0


自己动手丰衣足食,用CentOS搭建NAS服务器

旧帖新发,所以操作系统版本有点老,不过操作完全没有过时,本人的NAS服务器已稳定运行5年。
NAS对于电脑性能要求很低,家庭环境如果要考虑噪音,则建议选用静音主板和电源。

本文面向Linux小白,所以高手请直接略过。

一、安装CentOS 7.6

电脑配置(仅供参考,不低于这个配置的电脑都可以)
-========================================-
主板: 七彩虹 Colorful C.Q1900M 全固态主板
CPU: 内建英特尔赛扬J1900(功耗TDP 15W)
内存: 4GB
SATA扩展卡: 魔羯(MOGE)MC2692 台式机PCIE转4口SATA3.0硬盘扩展卡 (为了接更多硬盘)
系统盘: 希捷 320GB (有条件的可以换成SSD,128GB就足够)
数据盘: 西数蓝盘 4TB x 2
电源: 长城 325W 智控0分贝宽幅节能电源 GW-B425ZN

  1. 下载DVD安装镜像 http://mirrors.neusoft.edu.cn/centos/7.6.1810/isos/x86_64/CentOS-7-x86_64-DVD-1810.iso
  2. 在虚拟机中制作U盘安装介质(U盘设备id为 /dev/sdd) dd if=/mnt/hgfs/sharedfiles/CentOS-7-x86_64-DVD-1810.iso of=/dev/sdd
  3. 使用U盘启动,图形化安装 3.1 选择时区,设置时间 3.2 语言选“中文-简体中文(中国)” 3.3 安装源为“本地介质”,软件选择为“最小安装” (均为默认) 3.4 安装位置选320GB硬盘,一定选择“我要配置分区”,点击“完成”- 进入手动分区的界面,删除磁盘上所有旧分区,- 将“新挂载点使用以下分区方案”改为“标准分区”(旧系统盘不用考虑扩容,标准分区比LVM管理简单),- 点击“点这里自动创建它们”,- 删除自动创建的 /home 分区,- 修改 / 分区,将 /home 分区释放的空间增加到 / 分区上,文件系统最好是 xfs,- 点击“完成”。3.5 禁用KDUMP(没什么用) 3.6 开始安装 3.7 设置root密码,创建新用户(如bob)。
  4. 等待安装完成并重启进入系统

二、基本环境配置

  1. 安装vim
$ yum install vim
$ vim /etc/vimrc
--添加以下内容(使用习惯)---------------------
set cindent         " ci  C语言语法缩进
set expandtab       " et  输入时用space替换tab
set shiftwidth=4    " sw  缩进时使用4个字符宽度
set tabstop=4       " ts  显示tab字符时用4个字符宽度
set softtabstop=4   " sts 输入tab字符时用4个字符宽度
set ignorecase      " ic  查找时忽略大小写
set nowrap          "     显示时不折行
set number          " nu  显示行号
-----------------------------------------------------------
  1. 禁用selinux
$ vim /etc/selinux/config
--修改以下参数---------------------
SELINUX=disabled
-----------------------------------------
$ setenforce 0
  1. 将用户bob设置为sudoer
$ vim /etc/sudoers
--添加一行bob的设置------------------------------------
## Allow root to run any commands anywhere 
root    ALL=(ALL)   ALL
bob    ALL=(ALL)   ALL
----------------------------------------------------------------
  1. 禁止root直接从ssh登录
$ vim /etc/ssh/sshd_config
--修改以下参数---------------------
PermitRootLogin no
-----------------------------------------
$ systemctl restart sshd
  1. 修改硬件时间为本地时间(默认是UTC时间)
$ hwclock --systohc --localtime
查看
$ hwclock --debug
  1. 设置开机时网卡自动激活(下面命令中的xxxx要看自己的网卡到底叫什么)
$ vim /etc/sysconfig/network-scripts/ifcfg-xxxx
--修改以下参数----------------------
ONBOOT=yes
------------------------------------------
  1. 修改打开文件数限制,默认1024,最大可改成65535
$ vim /etc/security/limits.conf
-- 在末尾添加以下两行------------
*  soft    nofile          2048
*  hard    nofile          2048
------------------------------------------
用户重新登录后有效。执行 ulimit -a 查看。

三、安装ntfs-3g

$ wget https://tuxera.com/opensource/ntfs-3g_ntfsprogs-2017.3.23.tgz
$ tar zxf ntfs-3g_ntfsprogs-2017.3.23.tgz
$ cd ntfs-3g_ntfsprogs-2017.3.23
$ ./configure
会报错,没有编译器
$ yum install gcc
$ ./configure
$ make 
$ make install

然后就可以用 mount -t ntfs-3g /dev/sdd1 /mnt/usb 加载ntfs盘的数据了。

四、创建RAID1

  1. 确定两块4TB硬盘的设备号
$ fdisk -l
找到两块硬盘分别是 /dev/sdb、/dev/sdc
  1. 给硬盘分区 因为硬盘大于2TB,需要创建GPT分区,使用parted命令
[root@localhost]# parted /dev/sdb
GNU Parted 3.1
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel gpt
(parted) mkpart primary 0% 100%     ——这里一定要用0%,否则会有一个性能警告
(parted) toggle 1 raid
(parted) select /dev/sdc
Using /dev/sdc
(parted) mklabel gpt
(parted) mkpart primary 0% 100%
(parted) toggle 1 raid
(parted) quit
Information: You may need to update /etc/fstab.
  1. 安装软RAID管理软件mdadm
$ yum install mdadm
  1. 创建RAID1
$ mdadm --create /dev/md0 -ayes -l1 -n2 /dev/sd[b,c]1
mdadm: Note: this array has metadata at the start and
    may not be suitable as a boot device.  If you plan to
    store '/boot' on this device please ensure that
    your boot-loader understands md/v1.x metadata, or use
    --metadata=0.90
Continue creating array? yes
mdadm: Fail create md0 when using /sys/module/md_mod/parameters/new_array
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
  1. 查看状态
$ cat /proc/mdstat
$ mdadm -D /dev/md0

可以看到还在 resyncing ,不影响后续操作。

  1. 格式化并mount RAID
$ mkfs.xfs /dev/md0
$ mkdir /mnt/data
$ mount /dev/md0 /mnt/data
$ df -h

能看到这一行:

/dev/md0                           4.0T   33M  4.0T   1% /mnt/data

测试写入:

$ cd /mnt/data
$ echo test > test.txt
$ cat test.txt

添加到 fstab

$ vim /etc/fstab
--增加一行----------------------------------
/dev/md0        /mnt/data       xfs     defaults        0 0
------------------------------------------------
  1. 创建配置文件
$ echo DEVICE /dev/sd{b,c}1 >> /etc/mdadm.conf
$ mdadm -Evs >> /etc/mdadm.conf
  1. 解决CentOS关机时等待RAID的问题 CentOS有个Availability of block devices服务,关机时会等待RAID,但超时时间只有1分30秒。
-- /usr/lib/systemd/system/blk-availability.service 文件中可以看到--------------------------
ExecStop=/usr/sbin/blkdeactivate -u -l wholevg -m disablequeueing -r wait
----------------------------------------------------------------------------------------------------------------
-- 查看 man blkdeactivate 可以看到-----------------------------------------------------------------
       -r, --mdraidoptions mdraid_options
              Comma-separated list of MD RAID specific options:

              wait   Wait MD device's resync, recovery or reshape action to complete before deactivation.
---------------------------------------------------------------------------------------------------------------

简单说,我们的数据盘很大,RAID要做完 resyncing 要很久,如果这个时候关机,系统貌似想等RAID完成工作,但1分30秒后系统等不及了,就直接杀进程关机了。(这个时候我们执行 mdadm --wait 也会发现命令不会返回)。下面是解决办法:

$ vim /usr/sbin/stopraid.sh 
-- stopraid.sh -----------------------------------------------------------------------
#!/bin/bash
/bin/umount /dev/md0
/usr/sbin/mdadm --stop /dev/md0
-----------------------------------------------------------------------------------------
$ chmod a+x /usr/sbin/stopraid.sh

创建 /usr/lib/systemd/system/raid-availability.service 服务,在blk-availability.service停止之前先停止。

-- raid-availability.service -------------------------------------------------------
[Unit]
Description=RAID Availability
After=blk-availability.service
Requires=blk-availability.service
DefaultDependencies=no
Conflicts=shutdown.target

[Service]
Type=oneshot
ExecStart=/usr/bin/true
ExecStop=/usr/sbin/stopraid.sh
RemainAfterExit=yes

[Install]
WantedBy=sysinit.target
-----------------------------------------------------------------------------------------
$ systemctl daemon-reload
$ systemctl start raid-availability.service
$ systemctl enable raid-availability.service

$ reboot 
就不会看到 Availability of block devices 的等待信息了。

五、启用RAID监控、模拟故障并恢复

  1. 设置监控报警邮箱
$ vim /etc/mdadm.conf
-- 最后增加一行-------------------------------------------------------------------
MAILADDR [email protected]
----------------------------------------------------------------------------------------

系统默认已经安装了邮件发送软件mailx,确认一下

$ yum list installed | grep mailx
libreport-plugin-mailx.x86_64           2.1.11-40.el7.centos           @base    
mailx.x86_64                            12.5-19.el7                    @base  

系统已经默认启动了mdmonitor.service,它的定义文件中有一行 ConditionPathExists=/etc/mdadm.conf

$ systemctl | grep mdmonitor
● mdmonitor.service                                                                                             loaded failed failed    Software RAID monitoring and management
$ systemctl restart mdmonitor.service
$ systemctl | grep mdmonitor
  mdmonitor.service                                                                                             loaded active running   Software RAID monitoring and management

发个邮件试试

$ mdadm --monitor --scan --test --oneshot

正常的话bob@somewhere.com会收到一封测试消息的邮件

说明:有的帖子里说要在crontab里增加一行命令才能实现持续监控,但参数里又是 --oneshot。其实是不对的。
系统本来就有 mdmonitor.service 了,只要在/etc/mdadm.conf中添加了收件人邮箱地址,就会发送告警邮件,默认每60秒检查一次。看看 mdmonitor.service 的内容:

------------------------------------------------------------------
[Unit]
Description=Software RAID monitoring and management
After=syslog.target
ConditionPathExists=/etc/mdadm.conf

[Service]
Type=forking
PIDFile=/var/run/mdadm/mdadm.pid
Environment= MDADM_MONITOR_ARGS=--scan
EnvironmentFile=-/etc/sysconfig/mdmonitor
ExecStart=/sbin/mdadm --monitor $MDADM_MONITOR_ARGS -f --pid-file=/var/run/mdadm/mdadm.pid

[Install]
WantedBy=multi-user.target
------------------------------------------------------------------

上面 -f 参数等价于 --daemonise,以守护进程方式运行。

  1. 模拟阵列中一块硬盘故障
$ mdadm /dev/md0 --fail /dev/sdc1
mdadm: set /dev/sdc1 faulty in /dev/md0
$ cat /proc/mdstat
Personalities : [raid1] 
md0 : active raid1 sdc1[1] sdb1[0](F)
      4194169856 blocks super 1.2 [2/1] [U_]
      bitmap: 27/32 pages [108KB], 65536KB chunk

unused devices: <none>

可以看到 [U_],表示 sdc1 故障了,正常是 [UU]

$ mdadm -D /dev/md0

可以看到更详细信息

这个时候,Bob又收到一封邮件。

  1. 模拟移出硬盘,更换后重新添加到阵列
$ mdadm /dev/md0 --remove /dev/sdc1
mdadm: hot removed /dev/sdc1 from /dev/md0
$ mdadm /dev/md0 --add /dev/sdc1
mdadm: re-added /dev/sdc1
$ mdadm -D /dev/md0

可以看到RAID在自动重建数据

State : clean, degraded, recovering
spare rebuilding   /dev/sdc1
  1. 系统盘故障重组阵列
$ mdadm -A --scan
然后重新按之前的方法生成mdadm.conf,或者直接复制以前的mdadm.conf

六、安装配置Samba服务

  1. 安装samba并启动服务
$ yum install samba
$ systemctl start smb
$ systemctl enable smb
  1. 打开防火墙
$ firewall-cmd --zone=public --add-port=139/tcp --permanent
$ firewall-cmd --zone=public --add-port=445/tcp --permanent
$ systemctl restart firewalld.service
  1. 添加用户组和用户
$ groupadd family
$ useradd -g family alice 
$ passwd alice

建议将用户目录转移到RAID盘上,此处不再赘述。
说明:之前创建的用户bob并不属于family组,下面会把他作为一个特殊用户。

  1. 设置用户的Samba密码(密码文件位置:/var/lib/samba/private/passdb.tdb)
$ smbpasswd -a alice
  1. 修改配置文件(关键) 规划如下: - 所有人(包括Guest)都能读取目录PublicFiles- 只有用户bob和@family组所有用户都能读取目录SharedFiles- 只有用户bob对SharedFiles有写权限- 每个用户对自己的个人目录都有完全的读写权限
$ vim /etc/samba/smb.conf
-- 以下不解释,可 man smb.conf 查看具体含义-------------------------------
[global]
#   workgroup = SAMBA
    workgroup = WORKGROUP
    security = user

    passdb backend = tdbsam

    printing = cups
    printcap name = cups
    load printers = yes
    cups options = raw

    # enable soft-link access
    follow symlinks = yes
    wide links = yes
    unix extensions = no

# customized
    server string = Home Samba Server %v
    netbios name = HomeSamba
    map to guest = Bad User
    hosts allow = 192.168.1.0/255.255.255.0
    max connections = 20
    deadtime = 10

[homes]
    comment = Home Directories
    valid users = %S, %D%w%S
    browseable = No
    read only = No
    inherit acls = Yes

[PublicFiles]
    comment = PublicFiles
    path = /data/PublicFiles
    guest ok = yes
    read only = yes

[SharedFiles]
    comment = SharedFiles
    path = /data/SharedFiles
    guest ok = no
    read only = yes
    valid users = bob,@family
    read list = @family
    write list = bob
-------------------------------------------------------------------------------------------------

$ systemctl restart smb
  1. 启用NETBIOS名字解析(否则只能用IP访问)
$ systemctl enable nmb.service
$ systemctl start nmb.service
$ firewall-cmd --add-port=137/udp --zone=public --permanent
$ firewall-cmd --add-port=138/udp --zone=public --permanent
$ systemctl restart firewalld
  1. 访问方法 Win+e 打开文件资源管理器,在地址栏里输入 \xxx.xxx.xxx.xxx 即可 或者 \HOMESAMBA
  2. 记录一个坑:在路由器中为服务器绑定IP地址 如果用无线路由器 桥接 组网,要注意路由器桥接协议是否支持“4地址”格式。 TP-LINK WDR7660/7661等路由器都是“3地址”格式,导致主路由无法识别从路由上连接的设备的真实MAC,因而无法为从路由上的设备绑定IP。目前我只知道WDR6500支持“4地址”格式,另外客服告知WDR7800也支持“4地址”。 关于“3地址”与“4地址”,可参考 https://service.tp-link.com.cn/detail_article_3291.html**update 20210621:** 当前在售支持四地址格式的路由为AX5400和AX6000。

七、为用户目录设置限额

  1. 系统默认已经安装了quota
$ yum list installed | grep quota
quota.x86_64                           1:4.01-17.el7                   @base
quota-nls.noarch                       1:4.01-17.el7                   @base
  1. 修改mount参数(这里只对用户做限额,不对用户组做限额)
$ vim /etc/fstab
--增加 usrquota,grpquota----------------------------------
/dev/md0              /mnt/data          xfs     defaults,usrquota   0 0
-------------------------------------------------------------------
$ umount /data
$ mount /data
  1. 因为是xfs,不用做quotacheck
  2. 设置用户alice的配额为100GB
$ edquota -u alice
-- 把blocks的soft与hard都改成100*1024*1024=104857600(单位为KB) -----------
Disk quotas for user alice (uid 1001):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/md0                          8  104857600  104857600          7        0        0
-------------------------------------------------------------------------------------------------------------
  1. 开启配额
$ quotaon -avu
  1. 验证
$ mount -t cifs -o user=alice,password='password_of_alice' //192.168.1.123/alice /mnt/usb
$ df -h
Filesystem            Size  Used Avail Use% Mounted on
//192.168.1.123/alice  100G  8.0K   100G   1% /mnt/usb

[END]

标签: linux centos 服务器

本文转载自: https://blog.csdn.net/yorick/article/details/140032350
版权归原作者 水³立方 所有, 如有侵权,请联系我们删除。

“自己动手丰衣足食,用CentOS搭建NAS服务器”的评论:

还没有评论