同一驱动器的磁盘使用情况在主机中显示为 20K,在容器中显示为 16G

同一驱动器的磁盘使用情况在主机中显示为 20K,在容器中显示为 16G

当比较已安装硬盘的磁盘使用情况时,主机和容器之间的使用情况完全不同。我在主机和 lxc 容器中运行 Ubuntu 14.04。

硬盘已安装在主机上,并由 确认,/etc/mtab其具有以下条目:/dev/nvme0n1 /mnt/SSD ext4 rw 0 0。但是,驱动器未使用 安装/etc/fstab。驱动器在 lxc 容器内使用 fstab 设置安装:/var/lib/lxc/container_name/fstab

来自主持人

# du -hs /mnt/SSD/
20K     /mnt/SSD/

# df -h
Filesystem                 Size  Used Avail Use% Mounted on
udev                        63G  4.0K   63G   1% /dev
tmpfs                       13G  1.4M   13G   1% /run
/dev/mapper/sifr--vg-root  314G  241G   58G  81% /
none                       4.0K     0  4.0K   0% /sys/fs/cgroup
none                       5.0M     0  5.0M   0% /run/lock
none                        63G     0   63G   0% /run/shm
none                       100M     0  100M   0% /run/user
/dev/sda1                  236M  100M  124M  45% /boot
/dev/nvme0n1               1.1T   71M  1.1T   1% /mnt/SSD

来自容器

$ du -hs /mnt/SSD/
16G /mnt/SSD/

$ df -h
Filesystem                 Size  Used Avail Use% Mounted on
/dev/mapper/sifr--vg-root  314G  241G   58G  81% /
none                       4.0K     0  4.0K   0% /sys/fs/cgroup
none                        13G  136K   13G   1% /run
none                       5.0M     0  5.0M   0% /run/lock
none                        63G  4.0K   63G   1% /run/shm
none                       100M     0  100M   0% /run/user
  1. 同一个驱动器如何以及为何会显示两种不同的用途?
  2. 哪一个是正确的用法?

更新: 使用卸载驱动器后sudo umount /dev/nvme0n1,我现在看到主机中的磁盘使用量为 16GB:

$ du -hs /mnt/SSD/
16G     /mnt/SSD/

/dev/sdb使用安装了另一个驱动器/etc/fstab,并使用相同的方法让容器访问它:/var/lib/lxc/container_name/fstab。第二个驱动器的使用也一致,并且内容在容器和主机中都可用。

这两个驱动器之间的区别在于,它/dev/nvme0n1是一个 nvme 驱动器,是手动安装的,而是/dev/sdb一个磁性驱动器,是使用安装的/etc/fstab

什么可能导致行为上的差异以及如何/dev/nvme0n1在容器中提供这种差异?

答案1

原因是,主机可以访问已安装的驱动器,而容器则不能。这是因为容器中没有安装任何内容。因此,当主机超出范围时/mnt/SSD,它会访问 SSD 上的数据并将其存储在 SSD 上 ( ) ,而容器会访问其根磁盘上的目录 ( )。/dev/nvme0n1/mnt/SSD/dev/mapper/sifr--vg-root

要在容器中实现这一点,您需要bind挂载,并且您可以在容器的文件系统中创建一个目录。为此,您需要create=dir在容器的 fstab 中添加选项:

/mnt/SSD      /moint/point/in/the/container    none   bind,create=dir

>

  • create=dir (将在路径上执行 mkdir_p)

  • create=file(将在目录名上执行 mkdir_p + 在路径上执行 fopen)

相关内容