使用Linux挂载NAS硬盘的RAID分区

背景

最近在研究各种NAS,包括我的D-Link DNS-320和群晖的DSM,使用NAS是为了给数据存储提供方便和安全保障,当然前提是不能被某个技术或产品绑架,尤其对于我们搞开源的工程师来说,更是如此。我比较关注我的数据安全,我会考虑如果某天我的NAS坏掉了,数据是否能够在其他设备上读取出来,这是蛮重要的事情。
因此我对DNS-320和群晖DSM系统做了这方面的验证,结果证明它们都使用了开源的RAID方案,因此我可以很方便地在Linux系统下访问这些RAID分区。

试验环境

下面的操作以DNS-320创建的RAID1分区为例,群晖DSM也是类似的,只是元数据目录结构会有些差异,但基本大同小异。Linux系统我用的是CentOS 8.1,其他发行版也都有类似功能。

挂载步骤

首先,硬件连接物理硬盘到主机,Linux正常识别到硬盘及RAID分区(/dev/sdb2),这一步通过分区大小就能判断:

[root@SCVM-CNT8-01 ~]# lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda           8:0    0   16G  0 disk
├─sda1        8:1    0  600M  0 part /boot/efi
├─sda2        8:2    0    1G  0 part /boot
└─sda3        8:3    0 14.4G  0 part
  ├─cl-root 253:0    0 12.8G  0 lvm  /
  └─cl-swap 253:1    0  1.6G  0 lvm  [SWAP]
sdb           8:16   0  1.8T  0 disk
├─sdb1        8:17   0  512M  0 part
├─sdb2        8:18   0  200G  0 part
├─sdb3        8:19   0  1.6T  0 part
└─sdb4        8:20   0    1G  0 part
sr0          11:0    1 1024M  0 rom

其次,尝试挂载RAID分区。但RAID分区并不能直接挂载,会报错:

[root@SCVM-CNT8-01 ~]# mkdir /mnt/raidcheck
[root@SCVM-CNT8-01 ~]# mount /dev/sdb2 /mnt/raidcheck
mount: /mnt/raidcheck: unknown filesystem type 'linux_raid_member'.

因此,需要使用mdadm命令还原RAID分区:

[root@SCVM-CNT8-01 ~]# yum install -y mdadm
......
Complete!
[root@SCVM-CNT8-01 ~]# mdadm --assemble --run /dev/md2 /dev/sdb2
mdadm: /dev/md2 has been started with 1 drive (out of 2).

再次将RAID分区挂载到系统中:

[root@SCVM-CNT8-01 ~]# mount /dev/md2 /mnt/raidcheck

检查RAID分区中的文件:

[root@SCVM-CNT8-01 ~]# ll /mnt/raidcheck/
total 24
drwx------. 2 root root 16384 Apr 20 02:52 lost+found
drwxrwxrwx. 3 root root  4096 Apr 20 03:03 Nas_Prog
drwxrwxrwx. 2  501  501  4096 Apr 20 22:56 RAID1_TEST_DATA
[root@SCVM-CNT8-01 ~]# ll /mnt/raidcheck/RAID1_TEST_DATA/
total 238660
-rwxrwxrwx. 1 1001 501     99157 Dec 10 03:01 testdata1.log
-rwxrwxrwx. 1 1001 501 244283341 Feb  7 06:41 testdata2.tar.gz

还可以查看RAID分区的信息:

[root@SCVM-CNT8-01 ~]# mdadm --detail /dev/md2
/dev/md2:
           Version : 0.90
     Creation Time : Mon Apr 20 02:51:59 2020
        Raid Level : raid1                             # RAID类型
        Array Size : 209715136 (200.00 GiB 214.75 GB)  # RAID大小
     Used Dev Size : 209715136 (200.00 GiB 214.75 GB)
      Raid Devices : 2                                 # 原有2块硬盘
     Total Devices : 1                                 # 发现1块硬盘
   Preferred Minor : 2                                 # 至少2块硬盘
       Persistence : Superblock is persistent

       Update Time : Tue Apr 21 03:03:35 2020
             State : clean, degraded              # 处于降级的服务状态
    Active Devices : 1
   Working Devices : 1
    Failed Devices : 0
     Spare Devices : 0

Consistency Policy : resync

              UUID : 2b9e5511:d8210d7b:32043162:e56069a7
            Events : 0.321

    Number   Major   Minor   RaidDevice State
       -       0        0        0      removed
       1       8       18        1      active sync   /dev/sdb2

常见错误

此外,你可能会遇到下面的错误:

[root@SCVM-CNT8-01 ~]# mdadm --assemble --run /dev/md2 /dev/sdb2
mdadm: /dev/sdb2 is busy - skipping

这时,你可以这样检查一下:

[root@SCVM-CNT8-01 ~]# cat /proc/mdstat
Personalities : [raid1]
md124 : active (auto-read-only) raid1 sdc3[0]
      1948692544 blocks super 1.2 [1/1] [U]

md125 : inactive sdb3[1](S)
      1742225408 blocks

md126 : inactive sdb2[1](S)
      209715136 blocks

md127 : inactive sdb1[1](S)
      524224 blocks

unused devices: <none>

你可能会发现你要挂载的sdb2分区已经被使用了。

当然,如果你愿意的话,你也可以手动停用它,方法是:

[root@SCVM-CNT8-01 ~]# mdadm --stop /dev/md126
[root@SCVM-CNT8-01 ~]#

你可能感兴趣的:(经验积累,[类型]经验随笔)