Linux 在连接磁盘后对不同磁盘上的相同安装感到困惑

Linux 在连接磁盘后对不同磁盘上的相同安装感到困惑

在将 EBS 卷附加到正在运行的 Linux(在本例中为 NixOS)实例时,我们遇到了一个奇怪的问题(为了扩大该附加卷上的文件系统;它是我们关闭的另一台机器的 NixOS 根文件系统)。

在附加之前,一切正常:

# 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 只读绑定挂载)以某种方式保留在正确的磁盘上。

dmesgLinux 内部或外部均没有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 identifiers。

这是不可能的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 会混淆这些磁盘?

答案1

原因就是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 感到困惑。

因此解决方案是:

  • by-label通过将 EBS 卷附加到根文件系统未使用相同标签安装的 AWS 机器来增加文件系统的增长。
  • 首先更改文件系统标签,然后进行更改,然后将其改回所需的标签。

相关内容