旧帖新发,所以操作系统版本有点老,不过操作完全没有过时,本人的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
下载DVD安装镜像
http://mirrors.neusoft.edu.cn/centos/7.6.1810/isos/x86_64/CentOS-7-x86_64-DVD-1810.iso在虚拟机中制作U盘安装介质(U盘设备id为 /dev/sdd)
dd if=/mnt/hgfs/sharedfiles/CentOS-7-x86_64-DVD-1810.iso of=/dev/sdd使用U盘启动,图形化安装
3.1 选择时区,设置时间
3.2 语言选“中文-简体中文(中国)”
3.3 安装源为“本地介质”,软件选择为“最小安装” (均为默认)
3.4 安装位置选320GB硬盘,一定选择“我要配置分区”,点击“完成”- 进入手动分区的界面,删除磁盘上所有旧分区, - 将“新挂载点使用以下分区方案”改为“标准分区”(旧系统盘不用考虑扩容,标准分区比LVM管理简单), - 点击“点这里自动创建它们”, - 删除自动创建的 /home 分区, - 修改 / 分区,将 /home 分区释放的空间增加到 / 分区上,文件系统最好是 xfs, - 点击“完成”。
3.5 禁用KDUMP(没什么用)
3.6 开始安装
3.7 设置root密码,创建新用户(如bob)。等待安装完成并重启进入系统
二、基本环境配置
- 安装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 显示行号 -----------------------------------------------------------
- 禁用selinux
$ vim /etc/selinux/config --修改以下参数--------------------- SELINUX=disabled ----------------------------------------- $ setenforce 0
- 将用户bob设置为sudoer
$ vim /etc/sudoers --添加一行bob的设置------------------------------------ ## Allow root to run any commands anywhere root ALL=(ALL) ALL bob ALL=(ALL) ALL ----------------------------------------------------------------
- 禁止root直接从ssh登录
$ vim /etc/ssh/sshd_config --修改以下参数--------------------- PermitRootLogin no ----------------------------------------- $ systemctl restart sshd
- 修改硬件时间为本地时间(默认是UTC时间)
$ hwclock --systohc --localtime 查看 $ hwclock --debug
- 设置开机时网卡自动激活(下面命令中的xxxx要看自己的网卡到底叫什么)
$ vim /etc/sysconfig/network-scripts/ifcfg-xxxx --修改以下参数---------------------- ONBOOT=yes ------------------------------------------
- 修改打开文件数限制,默认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
- 确定两块4TB硬盘的设备号
$ fdisk -l 找到两块硬盘分别是 /dev/sdb、/dev/sdc
- 给硬盘分区
因为硬盘大于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.
- 安装软RAID管理软件mdadm
$ yum install mdadm
- 创建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.
- 查看状态
$ cat /proc/mdstat $ mdadm -D /dev/md0
可以看到还在 resyncing ,不影响后续操作。
- 格式化并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 ------------------------------------------------
- 创建配置文件
$ echo DEVICE /dev/sd{b,c}1 >> /etc/mdadm.conf $ mdadm -Evs >> /etc/mdadm.conf
- 解决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监控、模拟故障并恢复
- 设置监控报警邮箱
$ vim /etc/mdadm.conf -- 最后增加一行------------------------------------------------------------------- MAILADDR bob@somewhere.com ----------------------------------------------------------------------------------------
系统默认已经安装了邮件发送软件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,以守护进程方式运行。
- 模拟阵列中一块硬盘故障
$ 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又收到一封邮件。
- 模拟移出硬盘,更换后重新添加到阵列
$ 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
- 系统盘故障重组阵列
$ mdadm -A --scan 然后重新按之前的方法生成mdadm.conf,或者直接复制以前的mdadm.conf
六、安装配置Samba服务
- 安装samba并启动服务
$ yum install samba $ systemctl start smb $ systemctl enable smb
- 打开防火墙
$ firewall-cmd --zone=public --add-port=139/tcp --permanent $ firewall-cmd --zone=public --add-port=445/tcp --permanent $ systemctl restart firewalld.service
- 添加用户组和用户
$ groupadd family $ useradd -g family alice $ passwd alice
建议将用户目录转移到RAID盘上,此处不再赘述。
说明:之前创建的用户bob并不属于family组,下面会把他作为一个特殊用户。
- 设置用户的Samba密码(密码文件位置:/var/lib/samba/private/passdb.tdb)
$ smbpasswd -a alice
- 修改配置文件(关键)
规划如下:- 所有人(包括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
- 启用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
访问方法
Win+e 打开文件资源管理器,在地址栏里输入 \xxx.xxx.xxx.xxx 即可
或者 \HOMESAMBA记录一个坑:在路由器中为服务器绑定IP地址
如果用无线路由器 桥接 组网,要注意路由器桥接协议是否支持“4地址”格式。
TP-LINK WDR7660/7661等路由器都是“3地址”格式,导致主路由无法识别从路由上连接的设备的真实MAC,因而无法为从路由上的设备绑定IP。目前我只知道WDR6500支持“4地址”格式,另外客服告知WDR7800也支持“4地址”。
关于“3地址”与“4地址”,可参考 https://service.tp-link.com.cn/detail_article_3291.htmlupdate 20210621: 当前在售支持四地址格式的路由为AX5400和AX6000。
七、为用户目录设置限额
- 系统默认已经安装了quota
$ yum list installed | grep quota quota.x86_64 1:4.01-17.el7 @base quota-nls.noarch 1:4.01-17.el7 @base
- 修改mount参数(这里只对用户做限额,不对用户组做限额)
$ vim /etc/fstab --增加 usrquota,grpquota---------------------------------- /dev/md0 /mnt/data xfs defaults,usrquota 0 0 ------------------------------------------------------------------- $ umount /data $ mount /data
因为是xfs,不用做quotacheck
设置用户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 -------------------------------------------------------------------------------------------------------------
- 开启配额
$ quotaon -avu
- 验证
$ 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]