旧帖新发,所以操作系统版本有点老,不过操作完全没有过时,本人的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]