1.3 Arch搭建Nas系统之三:磁盘管理

3.1 数据磁盘分配说明

3.1.1 数据文件系统

为安装nas的Nas系统我准备总共有7块硬盘,分配如下:
a) 1块M2固态硬盘:大小为1T,做Nas系统盘使用。
b) 6块SATA机械硬盘:每块大小为8T,5块做数据盘,1块做校验盘。

为了方便使用,不碎片话,需要把5块数据磁盘整合然后挂到同一个目录下。因此使用联合文件系统mergerfs。

a) Nas系统盘,创建 /data 目录。用来挂载5块磁盘。/data目录,使用空间大小为40T。
b)5块磁盘全部格式化为btrfs文件系统。
c)使用mergerfs将5块4T磁盘,联合成一个整的20T磁盘使用。

3.1.2 数据备份

放弃raid,家用环境中raid是不可靠的,且恢复难度极大。多份冷备份才能减少数据丢失的概率。

a)重要数据做一份单独磁盘的复制冷备份。

b)Nas系统使用一块4T磁盘做snapraid的快照备份。

3.2 mergerfs

3.2.1 查看磁盘信息

查看硬盘列表

1
2
3
fdisk -l

lsblk

查看挂载信息

1
2
3
blkid

df -h

查看硬盘详细信息

1
2
paru hwinfo

3.2.2 格式化数据盘

我的5块数据盘如下:【sda,sdb,sdc,sdd,sde】

使用btrfs格式化 ,以第一块盘sda为例

1
2
3
4
5
6
7
8
# 安装btrfs文件系统
pacman -S btrfs-progs

# 格式化磁盘
mkfs.btrfs -L "sda" /dev/sda

# 如果需要强制格式化
mkfs.btrfs -f -L "sda" /dev/sda

挂载到/mnt目录

1
2
3
sudo mkdir /mnt/sda
chown -R archnas:archnas /mnt/sda
mount /dev/sda /mnt/sda -o compress=zstd

其他磁盘一样,这样有5块磁盘分别挂载如下:

【磁盘:/dev/sda,挂载:/mnt/sda】

【磁盘:/dev/sdb,挂载:/mnt/sdb】

【磁盘:/dev/sdc,挂载:/mnt/sdc】

【磁盘:/dev/sdd,挂载:/mnt/sdd】

【磁盘:/dev/sde,挂载:/mnt/sde】

3.2.3 配置mergerfs

安装mergerfs

1
paru  mergerfs

整合所有的btrfs磁盘到一个mergerfs文件系统,并挂载mergerfs文件系统到 /data目录下

1
2
3
4
sudo mkdir /data
chown -R archnas:archnas /data
mergerfs -o cache.files=partial,dropcacheonclose=true,category.create=epmfs \
/mnt/sda:/mnt/sdb:/mnt/sdc:/mnt/sdd:/mnt/sdd:/mnt/sde /data

重新加载所有磁盘

1
2
重新加载所有磁盘
mount -a

3.2.4 配置fstab

手动挂载磁盘,重启后就失效了。如果要开机自动挂载磁盘,需要配置fastab

mergerfs配置示例如下

1
2
3
4
5
6
7
8
9
vim /etc/fstab

添加内容:
UUID=XXXXXXXXXXXXXXXXXXXXXXXXXX /mnt/sda btrfs rw,relatime,compress=zstd 0 0
UUID=XXXXXXXXXXXXXXXXXXXXXXXXXX /mnt/sdb btrfs rw,relatime,compress=zstd 0 0
UUID=XXXXXXXXXXXXXXXXXXXXXXXXXX /mnt/sdc btrfs rw,relatime,compress=zstd 0 0
UUID=XXXXXXXXXXXXXXXXXXXXXXXXXX /mnt/sde btrfs rw,relatime,compress=zstd 0 0
UUID=XXXXXXXXXXXXXXXXXXXXXXXXXX /mnt/sde btrfs rw,relatime,compress=zstd 0 0
/mnt/sda:/mnt/sdb:/mnt/sdc:/mnt/sdd:/mnt/sde /data mergerfs cache.files=partial,dropcacheonclose=true,category.create=epmfs 0 0

3.3 snapraid

将第6块校验盘使用btrfs格式化,并挂载到 /mnt/sdf 目录、

3.3.1 安装配置snapraid

安装snapraid

1
paru  snapraid

配置snapraid

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
sudo mkdir /nas/snapraid
sudo chown -R archnas:archnas /nas/snapraid

vim /etc/snapraid.conf

添加内容
data d1 /mnt/sda
data d2 /mnt/sdb
data d3 /mnt/sdc
data d4 /mnt/sdd
data d5 /mnt/sde
parity /mnt/sdf/SnapRAID.parity
content /nas/snapraid/SnapRAID.content
content /mnt/sdf/SnapRAID.content
exclude /lost+found/

说明:

  1. disk 指定所需要备份的目录, 配置为数据盘挂载点
  2. parity 指定校验文件的存放位置,配置为校验盘目录文件
  3. content 指定文件索引等备份所需要的元信息,需要配置两个不同磁盘目录

3.3.2 备份数据
执行:

1
snapraid sync

3.3.3 还原数据

例如 /dev/sdb 盘挂掉。
a) 首先停止掉定时备份的脚本
b) 拆掉旧硬盘,替换新硬盘,并将新硬盘挂载到 /mnt/sdb_recovery 目录
c)修改/etc/snapraid.conf,替换

d)执行恢复命令

1
snapraid -d d2 -l recovery.log fix

3.3.4 取消删除
取消删除

1
2
snapraid fix -f FILENAME
(使用 file 或 dir 的完整 PATH 更好。file path 相对于所有根目录)

3.4 定时备份脚本

3.4 其他

btrfs磁盘管理命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 添加磁盘
btrfs device add /dev/sdZ /mnt/sda

# 强制添加
btrfs device add -f /dev/sdZ /mnt/sda

# 移除硬盘
btrfs device delete /dev/sdZ /mnt/sda

# 添加后重新均衡文件
btrfs balance start /mnt/sda

# 查看文件系统上各种数据的用量
btrfs filesystem df /data

3.5 磁盘休眠

  1. 安装
    安装 hdparm 软件包 和 smartmontools 软件包
    1
    2
    pacman -S hdparm
    pacman -S smartmontools

2)设置

设置休眠

1
2
3
4
5
6
7
8
9
10
11
12
13
vim /etc/systemd/system/hdparm.service

内容
---
[Unit]
Description=hdparm sleep

[Service]
Type=oneshot
ExecStart=/usr/bin/hdparm -q -S 241 -y /dev/sda /dev/sdb

[Install]
WantedBy=multi-user.target
1
systemctl start hdparm && systemctl enable hdparm

241指30分钟

时间数值说明
120:10分钟, 180:15分组,241:30分钟,242:1小时
从1到240的值指定5秒的倍数,从而产生5秒到20分钟的超时。
从241到251的值指定30分钟的1到11个单位,从而产生30分钟到5.5小时的超时。
值252表示超时21分钟。

3)查看硬盘活动状态
smartctl -i -n standby /dev/sda