Lin*_*eak 2 software-raid mdadm gpt
我目前的想法是创建一个软件阵列,类 RAID-6,有 4 个成员驱动器,使用mdadm.
具体而言,驱动器将是小型服务器 Dell T20 中 SATA 上的 1 TB HDD。
操作系统是GNU/Linux Debian 8.6(后来升级:Jessie?Stretch?Buster)
在我的情况下,这将使 2 TB 的磁盘空间具有 2 TB 的奇偶校验。
我还想将它与 GPT 分区表一起使用,为了使其工作,我不确定如何具体进行,假设我更愿意纯粹通过终端执行此操作。
由于我从未创建过 RAID 阵列,您能指导我如何进行吗?
笔记:
此数组将仅用于唯一数据。没有启动或操作系统。
由于此阵列的用途,我选择了 RAID-6。阵列必须能够承受两次驱动器故障。由于我受硬件限制为 4 个驱动器,因此我所知道的 RAID-6 没有替代方案。(无论 RAID-6 的减速看起来多么丑陋,在这个阵列中都无关紧要。)
在这个答案中,要明确表示所有阵列成员(驱动器)上的所有数据都将被销毁,因此请先备份!
打开终端,变成root( su); 如果您已sudo启用,您也可以这样做sudo -i;查看man sudo所有选项):
sudo -i
Run Code Online (Sandbox Code Playgroud)
首先,我们应该擦除驱动器,如果之前有任何数据和文件系统,那就是。假设我们有 4 个成员:sdi, sdj, sdk, sdl。为了直观地获得此过程的反馈,此处使用了pv(管道查看器):
pv < /dev/zero > /dev/sdi
pv < /dev/zero > /dev/sdj
pv < /dev/zero > /dev/sdk
pv < /dev/zero > /dev/sdl
Run Code Online (Sandbox Code Playgroud)
或者,为了检查是否没有留下任何东西,您可以查看所有驱动器上的 GParted,如果有任何带或不带任何文件系统的分区,擦除它可能就足够了,尽管我自己更喜欢上面将所有的归零所涉及的驱动器,请记住在执行此操作之前卸载所有分区,它可以类似于这些单行程序完成:
umount /dev/sdi?; wipefs --all --force /dev/sdi?; wipefs --all --force /dev/sdi
umount /dev/sdj?; wipefs --all --force /dev/sdj?; wipefs --all --force /dev/sdj
umount /dev/sdk?; wipefs --all --force /dev/sdk?; wipefs --all --force /dev/sdk
umount /dev/sdl?; wipefs --all --force /dev/sdl?; wipefs --all --force /dev/sdl
Run Code Online (Sandbox Code Playgroud)
然后,我们使用 GUID 分区表 (GPT) 初始化所有驱动器,我们需要对所有驱动器进行分区,但不要使用 GParted 进行此操作,因为它会在此过程中创建我们不想要的文件系统,使用gdisk来代替:
gdisk /dev/sdi
gdisk /dev/sdj
gdisk /dev/sdk
gdisk /dev/sdl
Run Code Online (Sandbox Code Playgroud)
在所有情况下,请使用以下内容:
o Enter对于新的空 GUID 分区表 (GPT)
y Enter确认您的决定
n Enter对于新分区
Enter对于第一个分区
Enter的默认值 对于第一个扇区
Enter的默认值
fd00 Enter对于 Linux RAID 类型的最后一个扇区的默认值
w Enter写入更改
y Enter以确认您的决定
您现在可以检查驱动器:
mdadm --examine /dev/sdi /dev/sdj /dev/sdk /dev/sdl
Run Code Online (Sandbox Code Playgroud)
它应该说:
Run Code Online (Sandbox Code Playgroud)(type ee)
如果是,我们现在检查分区:
mdadm --examine /dev/sdi1 /dev/sdj1 /dev/sdk1 /dev/sdl1
Run Code Online (Sandbox Code Playgroud)
它应该说:
Run Code Online (Sandbox Code Playgroud)No md superblock detected
如果是,我们可以创建 RAID6 阵列:
mdadm --create /dev/md0 --level=6 --raid-devices=4 /dev/sdi1 /dev/sdj1 /dev/sdk1 /dev/sdl1
Run Code Online (Sandbox Code Playgroud)
我们应该等到数组完全创建,这个过程我们可以很容易地watch:
watch cat /proc/mdstat
Run Code Online (Sandbox Code Playgroud)
创建完数组后,我们应该看看它的细节:
mdadm --detail /dev/md0
Run Code Online (Sandbox Code Playgroud)
它应该说:
Run Code Online (Sandbox Code Playgroud)State : clean
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0
Run Code Online (Sandbox Code Playgroud)
现在我们在数组上创建一个文件系统,如果你使用ext4,下面的隐藏命令最好避免,因为ext4lazyinit在大数组的情况下会花费大量的时间,因此名称为“ lazyinit ”,因此我推荐你避免这种情况:
mkfs.ext4 /dev/md0
相反,您应该强制进行完整的即时初始化(保留 0%,root因为它是一个数据数组):
mkfs.ext4 -m 0 -E lazy_itable_init=0,lazy_journal_init=0 /dev/md0
Run Code Online (Sandbox Code Playgroud)
通过指定这些选项,inode 和日志将在创建期间立即初始化,这对于较大的数组很有用。
如果您选择使用快捷方式并ext4使用“更好避免的命令”创建文件系统,请注意ext4lazyinit初始化所有 inode 将花费大量时间,您可以观察它直到完成,例如使用iotop或nmon。
无论选择哪种方式进行文件系统初始化,都应在完成初始化后挂载它。
我们现在为这个 RAID6 阵列创建一些目录:
mkdir -p /mnt/raid6
Run Code Online (Sandbox Code Playgroud)
并简单地安装它:
mount /dev/md0 /mnt/raid6
Run Code Online (Sandbox Code Playgroud)
由于我们基本上完成了,我们可以再次使用 GParted 来快速检查它是否显示linux-raid文件系统,以及raid所有驱动器上的标志。
如果是这样,我们正确地创建了具有 GPT 分区的 RAID6 阵列,现在可以在其上复制文件。
查看md文件系统有什么 UUID :
blkid /dev/md0
Run Code Online (Sandbox Code Playgroud)
将 UUID 复制到剪贴板。
现在我们需要fstab使用您最喜欢的文本编辑器编辑 ,我使用了nano,但sudoedit可能更好地使用:
nano /etc/fstab
Run Code Online (Sandbox Code Playgroud)
并向其添加一个条目:
UUID=<the UUID you have in the clipboard> /mnt/raid6 ext4 defaults 0 0
Run Code Online (Sandbox Code Playgroud)
我自己不建议使用一defaults组标志,我只是希望线条不要过于复杂。
这是我在 UPS 备份数据 RAID(而不是defaults)上使用的挂载标志:nofail,nosuid,nodev,noexec,nouser,noatime,auto,async,rw,data=journal,errors=remount-ro
您可以在保存更改后检查是否正确:
mount -av | grep raid6
Run Code Online (Sandbox Code Playgroud)
它应该说:
Run Code Online (Sandbox Code Playgroud)already mounted
如果是,我们保存阵列配置;如果您还没有md创建任何设备,您可以简单地执行以下操作:
mdadm --detail --scan >> /etc/mdadm/mdadm.conf
Run Code Online (Sandbox Code Playgroud)
如果已经存在数组,只需运行前面的命令而不重定向到配置文件:
mdadm --detail --scan
Run Code Online (Sandbox Code Playgroud)
并手动将新数组添加到配置文件中。
最后,不要忘记更新您的initramfs,否则您的新数组将只会自动只读组装,可能与此/dev/md127类似:
update-initramfs -u -k all
Run Code Online (Sandbox Code Playgroud)
检查您是否按计划进行了所有操作,如果是,则可以重新启动:
reboot
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3394 次 |
| 最近记录: |