新的 Arch Linux 安装在(硬件)上RAID064位以下UEFI系统与GPT分区。必须添加
MODULES="ext4 dm_mod raid0"
HOOKS="base udev autodetect modconf block mdadm_udev filesystems keyboard fsck"
以便/etc/mkinitcpio.conf
在启动时正确识别 RAID0 上的分区。否则,
ERROR: device 'UUID=<uuid>' not found. Skipping fsck.
ERROR: Unable to find root device 'UUID=<uuid>'.
...
将被发行。
然而有一个特殊之处,我不知道如何解释。一方面,当/etc/fstab
包含/dev/*
或UUID=*
源时,Arch Linux 会正常启动。另一方面,当它包含PARTUUID=*
源时,启动时会发生一堆相应的Dependency failed
错误(关于从 挂载这些源/etc/fstab
)并且挂起。
你能解释一下在这种情况下PARTUUID=*
有什么问题吗?/etc/fstab
这和RAID0有关系吗?
$ cat /proc/mdstat
Personalities : [raid0]
md126 : active raid0 sda[1] sdb[0]
976768000 blocks super external:/md127/0 128k chunks
md127 : inactive sda[1](S) sdb[0](S)
4904 blocks super external:imsm
unused devices: <none>
$ dmsetup table
No devices found
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 465.8G 0 disk
└─md126 9:126 0 931.5G 0 raid0
├─md126p1 259:0 0 1G 0 md /boot/efi
├─md126p2 259:1 0 1G 0 md
├─md126p3 259:2 0 1G 0 md
├─md126p4 259:3 0 256G 0 md
├─md126p102 259:4 0 16G 0 md [SWAP]
├─md126p103 259:5 0 16G 0 md /
├─md126p104 259:6 0 16G 0 md /var
└─md126p105 259:7 0 256G 0 md /home
sdb 8:16 0 465.8G 0 disk
└─md126 9:126 0 931.5G 0 raid0
├─md126p1 259:0 0 1G 0 md /boot/efi
├─md126p2 259:1 0 1G 0 md
├─md126p3 259:2 0 1G 0 md
├─md126p4 259:3 0 256G 0 md
├─md126p102 259:4 0 16G 0 md [SWAP]
├─md126p103 259:5 0 16G 0 md /
├─md126p104 259:6 0 16G 0 md /var
└─md126p105 259:7 0 256G 0 md /home
sr0 11:0 1 1024M 0 rom
$ blkid
/dev/sda: TYPE="isw_raid_member"
/dev/sdb: TYPE="isw_raid_member"
/dev/md126p1: LABEL="EFI" UUID="722E-E4AB" TYPE="vfat" PARTLABEL="EFI system partition" PARTUUID="a8e94657-e6ea-4712-be06-ac9ffe6e2258"
/dev/md126p3: LABEL="Windows PE 5.0 (x64)" UUID="181C2F991C2F7144" TYPE="ntfs" PARTLABEL="Basic data partition" PARTUUID="15848c79-1456-418b-a243-830d0db894ce"
/dev/md126p4: LABEL="Windows 8.1 (x64)" UUID="AAB83149B83114F3" TYPE="ntfs" PARTLABEL="Basic data partition" PARTUUID="7d3a06f5-4c67-4299-80b0-029501e14f18"
/dev/md126p102: UUID="6a2d4998-3ac8-4135-9d72-47960b201d5d" TYPE="swap" PARTLABEL="Swap" PARTUUID="d418edd6-44eb-4058-921f-c68aa191c5ac"
/dev/md126p103: UUID="2c241730-a076-48d9-8d1f-6e10573a994f" TYPE="ext4" PARTLABEL="Arch Linux" PARTUUID="37200e1e-dea4-435a-a873-427e3ee8c494"
/dev/md126p104: UUID="8d4eff47-3a2b-46b4-9263-7bbf00d8d0db" TYPE="ext4" PARTLABEL="Variable" PARTUUID="cd15b1f0-e948-4975-9218-591efa5b9b95"
/dev/md126p105: UUID="e0b15e56-3846-4e75-96f8-4f75058b4a6b" TYPE="ext4" PARTLABEL="Home" PARTUUID="54e85323-522c-415a-b7bd-2eb83b6b4ee6"
/dev/md126: PTUUID="e4e1b9b8-c26f-416d-82d9-e9350d0b5ac2" PTTYPE="gpt"
/dev/md126p2: PARTLABEL="Microsoft reserved partition" PARTUUID="6e9264fd-da04-4966-b8e0-8f3124f47050"
答案1
既然现在很清楚您正在运行软件 raid(“假 raid”,其中固件/BIOS 也有一个软件 RAID 实现,可以更轻松地启动 Windows — 在本例中为英特尔矩阵存储),您可能会看到Arch 的 initramfs w/r/t 分区 md 数组中的一些错误。
真正的硬件raid对于操作系统来说几乎是完全透明的;例如,您只能看到一个设备(RAID 阵列),而不是每个磁盘一个设备。对于操作系统来说,硬件 RAID 阵列看起来就像一个普通磁盘,至少在安装了 RAID 驱动程序后(如果没有它,操作系统根本看不到它)。
很长一段时间,您根本无法对 md 数组进行分区(在它们之上使用 LVM 或创建多个数组很常见,现在仍然如此);后来,您可以设置一个可分区的分区,但这不是默认的;现在它们都可以被分区。但可能仍然有一些关于它们不可分区的假设,并且正在物理磁盘上而不是 RAID 阵列上寻找该partuuid。
就我个人而言,我并不担心这个问题,只需使用 UUID 即可。另外,一般来说,对于仅支持 Linux 的机器,通常最好根本不使用“fake raid”,而直接使用 Linux mdraid 及其本机格式。有了 RAID-0,我相信您很快就有机会重建盒子......