fstab 中的 UUID + 在這種情況下,我們不能在 fstab 中配置 UUID
討論 - 我們有 redhat linux 機器,我的問題是關於 /etc/fstab 文件中的 UUID 配置,在這種情況下 UUID 會給作業系統帶來風險
據我了解,如果使用軟體 RAID1,我們不得在 /etc/fstab 中使用 UUID。
**為什麼?**因為 RAID 卷本身和鏡像的第一個元素將看起來具有相同的文件系統 UUID。如果鏡像損壞或由於任何其他原因 md 設備未在引導時啟動,系統將改為掛載任何隨機底層磁碟,從而破壞您的鏡像。
所以我的問題是
哪些 RAID 級別(數字)不能是 fstab 中的 UUID?
有關突襲級別的資訊 - https://en.wikipedia.org/wiki/Standard_RAID_levels
我們將繼續在 ArchLinux 和 mdadm 上進行測試。但首先,這對於基於分區的數組來說並不重要,因為成員分區有自己的 UUID,所以這在理論上只適用於整個磁碟成員。
TL;DR:即使是舊的元數據塊,這也不是一個真正的問題。我不知道這可能是舊軟體中的錯誤。但它不會影響現代 ArchLinux。
#uname -sr Linux 4.14.7-1-ARCH #modprobe raid1 #mdadm --create --verbose /dev/md0 --metadata 0.9 --level=mirror --raid-devices=2 /dev/sdb /dev/sdd mdadm: size set to 102336K mdadm: array /dev/md0 started. #cat /proc/mdstat Personalities : [raid1] md0 : active raid1 sdd[1] sdb[0] 102336 blocks [2/2] [UU] unused devices: <none> #mdadm --detail --scan >> /etc/mdadm.conf fdisk /dev/md0 lsblk /dev/md0 NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sdb 8:16 0 100M 0 disk └─md0 9:0 0 100M 0 raid1 └─md0p1 259:0 0 98.9M 0 md sdd 8:48 0 100M 0 disk └─md0 9:0 0 100M 0 raid1 └─md0p1 259:0 0 98.9M 0 md md0 8:0 0 100M 0 raid1 └─sda2 8:2 0 98.9M 0 md
mdstat ->
$$ UU $$
#blkid /dev/md0 /dev/md0: PTUUID="d49d8666-e580-8244-8c82-2bc325157e66" PTTYPE="gpt" #blkid /dev/sdd /dev/sdd: UUID="b3d82551-0226-6687-8279-b6dd6ad00d98" TYPE="linux_raid_member" #blkid /dev/sdb /dev/sdb: UUID="b3d82551-0226-6687-8279-b6dd6ad00d98" TYPE="linux_raid_member" #mkfs.ext4 /dev/md0p1 mke2fs 1.43.7 (16-Oct-2017) creating filesystem with 101292 1k blocks and 25376 inodes Filesystem UUID: 652bcf77-fe47-416e-952c-bbOa76a78407 Superblock backups stored on blocks: 8193, 24577, 40961, 57345, 73729 Allocating group tables: done Writing inode tables: done Creating journal (4096 blocks): done Writing superblocks and filesystem accounting information: done #mount /dev/md0p1 /mnt #lsblk -o NAME,UUID,MOUNTPOINT /dev/sdb /dev/sdd NAME UUID MOUNTPOINT sdb b3d82551-0226-6687-8279-b6dd6ad00d98 └─md0 └─md0p1 652bcf77-fe47-416e-952c-bbOa76a78407 /mnt sdd b3d82551-0226-6687-8279-b6dd6ad00d98 └─md0 └─md0p1 652bcf77-fe47-416e-952c-bbOa76a78407 /mnt
到現在為止還挺好。這不僅將成員設備正確辨識為 RAID 設備,而且還有兩個匹配的分區級 UUID。實際上這些作為同一個容器設備的一部分 md0 並列出了同一個掛載點。它沒有列出 sdd 或 sdb 上的任何正常分區容器。請注意,md0 設備本身沒有 UUID。只有它的成員有 UUID 並且它實際上是相同的 UUID。
#echo "UUID=652bcf77-fe47-416e-952c-bbOa76a78407 /mnt ext4 rw,relatime,data=ordered 0 2" >> /etc/fstab umount /mnt mount /mnt cd /mnt fallocate -l 50MiB data
mdstat ->
$$ UU $$ 注意到我們詢問了 raid 成員的文件系統 UUID,現在讓我們嘗試在不執行 mdadm 的情況下執行系統。
#cd #umount /mnt #mdadm --stop /dev/md0 mdadm: stopped /dev/md0 #lsblk /dev/sdb /dev/sdd NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sdb 8:16 0 100M 0 disk sdd 8:48 0 100M 0 disk
現在系統認為這些是正確的原始磁碟,因為它們沒有分區表,因此不是容器。但是,如果我們詢問它們是什麼:
#blkid /dev/sdd /dev/sdd: UUID="b3d82551-0226-6687-8279-b6dd6ad00d98" TYPE="linux_raid_member"
它仍然是一個 linux_raid_member,如果我們嘗試掛載它:
#mount /dev/sdd /mnt mount /mnt: unknown filesystem type "linux raid member"
怎麼樣:
#mount /mnt mount: /mnt can't find UUID=652bcf77-fe47-416e-952c-bbOa76a78407
這是有道理的,因為 sdd 不是容器,因此沒有被探測的文件系統。但是,如果我執行:
#mdadm --assemble --scan && mount /mnt mdadm: /dev/md0 has been started with 2 drives.
如果我再次停止它並刪除 mdadm.conf:
#umount /mnt && mdadm --stop /dev/md0 #modprobe -r raid1 #rm /etc/mdadm.conf #modprobe raid1 #mdadm --assemble --scan mdadm: /dev/md/0 has been started with 2 drives.
請注意,我對 md0 設備名稱的配置不再生效,它會自動在 /dev/md/0 中創建。現在讓我們重新啟動,看看 systemd/Linux 對 fstab 做了什麼。
#mdadm --stop /dev/md/0 mdadm: stopped /dev/md/0 #systemctl reboot #dmesg | grep md0 [ 14.550231] md/raidl:md0: active with 2 out of 2 mirrors [ 14.550261] md0: detected capacity change from 0 to 104792064 [ 14.836905] md0: p1 [ 16.909057] EXT4-fs (md0p1): mounted filesystem with ordered data mode. Opts: data=ordered #lsblk /dev/md0 NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT md0 9:0 0 100M 0 raidl └─md0p1 259:0 0 98.9M 0 md /mnt
再次使用 raid=noautodetect 核心參數,因為這也將模擬不會自動檢測所有 raid 和所有超級塊/元數據版本等的 Linux 版本。但它仍然掛載 raid,因為我在 fstab 中要求它並且它強制載入 mod raid1 . 因此,讓我們再次嘗試使用 modprobe.blacklist=raid1 將其列入黑名單:
好的,怎麼回事?:
所以linux知道它是一個raid類型的設備,即使它沒有raid支持。嘗試掛載它時,它會正確檢測到它的 raid 設備,並且在使用 fstab 時,儘管它位於文件系統超級塊中,但它卻找不到 UUID。
然後再次!fstab 或 mdadm 中沒有資訊。
#mount /dev/sdd /mnt mount: /mnt: unknown filesystem type "linux_raid_member".
我認為這不僅僅是因為 Linux 的探測很聰明。除了使用 fdisk warm 之類的工具之外,分區表區域中還有額外的資訊。您將不得不非常努力地在其中一個成員磁碟的文件系統 UUID 上犯這個錯誤。