Срыв покровов
Рассказ об особенностях монтирования файловых систем.
Вчера моя дражайшая половина супруга задала мне интересный вопрос — что будет, если в одну точку монтирования привинтить две разных файловых системы?
Сегодня, найдя свободное время, я попробовал это выяснить опытным путём в ВиртуалБоксовой машине с установленным Дебианом, о чём отчитываюсь: Показать
– Создал директории /mnt/A и /mnt/B и файлы A.img и B.img (размером по 10 Мб), отформатировав их в разные файловые системы (ext2 и minix): Показать
soul@debian:~$ sudo -s root@debian:/home/soul# fallocate -l 10M A.img root@debian:/home/soul# fallocate -l 10M B.img root@debian:/home/soul# ls /mnt root@debian:/home/soul# mkdir /mnt/A root@debian:/home/soul# mkdir /mnt/B root@debian:/home/soul# mkfs.ext2 A.img mke2fs 1.42.12 (29-Aug-2014) Discarding device blocks: done Creating filesystem with 10240 1k blocks and 2560 inodes Filesystem UUID: 866d1e35-dad7-466a-990a-411601395777 Superblock backups stored on blocks: 8193 Allocating group tables: done Writing inode tables: done Writing superblocks and filesystem accounting information: done root@debian:/home/soul# mkfs.minix B.img 3424 inodes 10240 blocks Firstdatazone=112 (112) Zonesize=1024 Maxsize=268966912 root@debian:/home/soul#
– Смонтировал их в разные директории (A.img в /mnt/A, B.img в /mnt/B): Показать
root@debian:/home/soul# mount -o loop A.img /mnt/A root@debian:/home/soul# ls /mnt/A lost+found root@debian:/home/soul# mount -o loop B.img /mnt/B root@debian:/home/soul# ls /mnt/B root@debian:/home/soul#
– Отмонтировал B.img от /mnt/B и примонтировал к /mnt/A, создал каталог /mnt/A/test1: Показать
root@debian:/home/soul# umount /mnt/B root@debian:/home/soul# mount -o loop B.img /mnt/A root@debian:/home/soul# mkdir /mnt/A/test1 root@debian:/home/soul# ls /mnt/A test1 root@debian:/home/soul#
– Перемонтировал A.img и B.img и примонтировал их к разным директориям, посмотрел результат создания каталога: Показать
root@debian:/home/soul# umount /mnt/A root@debian:/home/soul# umount /mnt/A root@debian:/home/soul# mount -o loop A.img /mnt/A root@debian:/home/soul# mount -o loop B.img /mnt/B root@debian:/home/soul# ls /mnt/A lost+found root@debian:/home/soul# ls /mnt/B test1 root@debian:/home/soul# umount /mnt/A root@debian:/home/soul# umount /mnt/B root@debian:/home/soul#
– Повторил эксперимент в другой последовательности: Показать
root@debian:/home/soul# mount -o loop B.img /mnt/A root@debian:/home/soul# mount -o loop A.img /mnt/A root@debian:/home/soul# ls /mnt/A lost+found root@debian:/home/soul# mkdir /mnt/A/test2 root@debian:/home/soul#
– Отмонтировал оба файла, примонтировал их опять к разным директориям и посмотрел результат второго этапа: Показать
root@debian:/home/soul# umount /mnt/A root@debian:/home/soul# umount /mnt/A root@debian:/home/soul# mount -o loop A.img /mnt/A root@debian:/home/soul# mount -o loop B.img /mnt/B root@debian:/home/soul# ls /mnt/A lost+found test2 root@debian:/home/soul# ls /mnt/B test1 root@debian:/home/soul#
– Отмонтировал всё, удалил ненужные файлы и каталоги: Показать
root@debian:/home/soul# umount /mnt/A root@debian:/home/soul# umount /mnt/B root@debian:/home/soul# rm A.img root@debian:/home/soul# rm B.img root@debian:/home/soul# rmdir /mnt/A root@debian:/home/soul# rmdir /mnt/B root@debian:/home/soul# ^D exit soul@debian:~$
Из вышеприведённого можно сделать вывод, что изменения применяются на ту файловую систему, которая была примонтирована последней.
P. S. Здесь речь идёт о стандартных решениях, всякие там LVM, ZFS, btrfs и unionfs не рассматриваются.
Информация о системе: Показать
soul@debian:~$ uname -a Linux debian 3.16.0-6-amd64 #1 SMP Debian 3.16.56-1 (2018-04-28) x86_64 GNU/Linux soul@debian:~$ cat /etc/issue.net Debian GNU/Linux 8 soul@debian:~$ cat /etc/os-release PRETTY_NAME="Debian GNU/Linux 8 (jessie)" NAME="Debian GNU/Linux" VERSION_ID="8" VERSION="8 (jessie)" ID=debian HOME_URL="http://www.debian.org/" SUPPORT_URL="http://www.debian.org/support" BUG_REPORT_URL="https://bugs.debian.org/" soul@debian:~$ lsb_release -a No LSB modules are available. Distributor ID: Debian Description: Debian GNU/Linux 8.10 (jessie) Release: 8.10 Codename: jessie soul@debian:~$