Linux

附加磁碟後,Linux 對不同磁碟上的相同掛載感到困惑

  • April 28, 2021

在將 EBS 卷附加到正在執行的 Linux(在本例中為 NixOS)實例時,我們遇到了一個奇怪的問題(為了在該附加卷上增加文件系統;它是我們關閉的另一台機器的 NixOS 根文件系統向下)。

在 attach 之前,一切正常:

# lsblk
NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
xvda    202:0    0  100G  0 disk
└─xvda1 202:1    0  100G  0 part

附加後,lsblk奇怪地聲稱附加卷的分區包含/目前機器的已安裝分區:

# lsblk
NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
xvda    202:0    0  100G  0 disk
└─xvda1 202:1    0  100G  0 part /nix/store
xvdf    202:80   0  400G  0 disk
└─xvdf1 202:81   0  200G  0 part /

這根本沒有意義:

只需“插入”該磁碟,Linux 就會認為根文件系統掛載只是“翻轉”到了新磁碟。(這/nix/store是一個 NixOS 只讀綁定掛載)以某種方式保留在正確的磁碟上。

Linux中dmesg/之外沒有任何消息指出磁碟已附加:journalctl

Apr 28 11:57:21 mymachine kernel: blkfront: xvdf: barrier or flush: disabled; persistent grants: disabled; indirect descriptors: enabled;
Apr 28 11:57:21 mymachine kernel:  xvdf: xvdf1

fdisk -l中,兩個磁碟看起來很正常,並且有不同Disk identifier的 s。

這是不可能的umount /dev/xvdf1;它說坐騎很忙。

為了增加分區的目標,growpart /dev/xvdf 1無論如何都可以工作,但resize2fs /dev/xvdf1失敗了:

Filesystem at /dev/xvdg1 is mounted on /; on-line resizing required
old_desc_blocks = 25, new_desc_blocks = 50
resize2fs: No space left on device While checking for on-line resizing support

這是怎麼回事,為什麼Linux會混淆這些磁碟?

原因是by-label坐騎。

出於聲明性自動化的原因(我們有很多機器),我們機器的每個根文件系統都有相同的 ext4 文件系統標籤nixos

# cat /etc/fstab
/dev/disk/by-label/nixos / ext4 x-nixos.autoresize 0 1
# cat /etc/mtab
/dev/disk/by-label/nixos /nix/store ext4 rw,relatime 0 0

將其中兩個附加到同一台機器上會使 Linux 感到困惑。

所以解決方案是:

  • 通過將 EBS 卷附加到其根文件系統未by-label使用相同標籤安裝的 AWS 機器來執行文件系統增長。
  • 首先更改文件系統標籤,然後進行更改,然後將其更改回所需的標籤。

引用自:https://serverfault.com/questions/1061854