То ли лыжи не едут, то ли я… Короче, создал /usr_squash/sq, /usr_squash/upd и /usr_squash/tmp. И для тестов — /usr_test. Сжал существующий /usr вот так вот:
sudo mksquashfs /usr /usr_sqash/usr_2018_11.sfs -b 65536 -comp xz
Во fstab добавил, сразу после монтирования основного раздела, следующие две строчки:
/usr_squash/usr_2018_11.sfs /usr_squash/sq squashfs loop,ro 0 0
# overlayfs /usr overlayfs defaults,lowerdir=/usr_squash/sq,upperdir=/usr_squash/upd,workdir=/usr_squash/tmp 0 0
Раскомментирую вторую строчку на загруженной системе, запускаю sudo mount -a, оно прекрасно цепляется. Создаю тестовый файлик в /usr, он прекрасно создаётся в /usr_squash/upd, как ему и положено. Загружаюсь на пробу, сделав
overlayfs /usr_test overlayfs defaults,lowerdir=/usr_squash/sq,upperdir=/usr_squash/upd,workdir=/usr_squash/tmp 0 0
Всё прекрасно, в /usr_test появилась копия моего /usr, а в ней даже есть тестовый файлик, который overlayfs накатила из /usr_squash/upd, как ей и положено. Теперь наконец решаюсь подменить настоящий /usr — бах, грабли!
mount: mounting overlayfs on /root/usr failed: No such device.
Пробовал с aufs, всё ровно то же самое. Всё работает, пока не затрагивает реальный /usr или затрагивает его уже после загрузки.
mount: mounting aufs on /root/usr failed: No such device
Насколько я понял, жалуется на то, что упомянутое в крайней левой колонке устройство overlayfs (или aufs в другой попытке), которое должно быть примонтировано как /usr, не существует. Его надо как-то более явно прописать, чтобы какой-то модуль ядра запустился, или оно вообще не так называется? Просто добивает в ноль то, что я загружаюсь, снимаю # со строчки и после «mount -a» все добавления в /usr оказываются в /usr_squash/upd, т. е. overlayfs реально монтируется и работает! Но только не во время бута. Во время бута squashfs есть, а aufs(overlayfs) не докличешься (или докличешься, если монтировать не настоящий /usr, а /usr_test; в таком случае всё срабатывает и монтируется).
Я уже ни хрена не понимаю :(