背景
最近在研究各種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 ~]#