Ця відповідь та повідомлення електронної пошти означають, що те, що називається "OverlayFS", доступне в Ubuntu 11.10 і змушує замінити aufs в Ubuntu 12.04.
Як я ним користуюся? Де знаходиться його документація?
Ця відповідь та повідомлення електронної пошти означають, що те, що називається "OverlayFS", доступне в Ubuntu 11.10 і змушує замінити aufs в Ubuntu 12.04.
Як я ним користуюся? Де знаходиться його документація?
Відповіді:
Редагувати: з моменту написання цієї відповіді деякі елементи змінилися в накладках, а саме додавання необхідного параметра workdir
, див. Відповідь totti нижче для детального опису цього нового параметра.
Нарешті мені вдалося його знайти. Я знайшов посилання на нього у джерелі ядра, але він чомусь не відображається у дереві git на kernel.org. Але! Якщо ви витягнете джерело ядра Ubuntu таким чином: apt-get source linux-image-3.0.0-16-generic
ви можете його знайти linux-3.0.0/Documentation/overlayfs.txt
. Він також доступний в пакеті linux-doc в /usr/share/doc/linux-doc/filesystems/overlayfs.txt.gz
.
Оскільки фактична довідкова документація - це скоріше "як вона працює", а не "як її встановити", ось короткий перебіг (у документації на ядро є один приклад):
mount -t overlayfs -o [mount options] overlayfs [mountpoint for merged system]
Де [параметри кріплення] можуть бути:
Одне, що мене спочатку збентежило, тому я, мабуть, повинен уточнити, - це те, що монтаж накладки насправді не монтує файлову систему. Я намагався змонтувати файлову систему squashfs за допомогою кріплення накладення, але це не так, як це працює. Спочатку потрібно встановити (у моєму випадку squashfs) файлову систему до довільної каталогів, а потім використати накладки, щоб об'єднати точку монтування (каталог) та інший каталог у третинний каталог (точка монтажу накладень) (редагувати: цей "третій" каталог насправді може бути верхній каталог =). У третинному каталозі ви побачите об'єднані файлові системи (або дерева каталогів - це гнучко).
Я працював на гібридному завантажувальному диску Ubuntu, де база Ubuntu існує як filesystem.squashfs, і у мене є файли під назвою ubuntu.overlay kubuntu.overlay xubuntu.overlay та lubuntu.overlay. Файли .overlay - це базові встановлення згаданих систем із вмістом fileystem.squashfs, підрізаними (для економії місця). Потім я змінив скрипти init, щоб накласти. Overlay файл правильного дистрибутива (від параметра завантаження), використовуючи накладки та вищевказані параметри, і це працює як шарм!
Це рядки, які я використовував у своїх сценаріях init (коли всі змінні будуть переведені):
mkdir -p /overlay
mount -t squashfs /cdrom/casper/ubuntu.overlay /overlay
mount -t overlayfs -o lowerdir=/filesystem.squashfs,upperdir=/overlay overlayfs /
Зауважте, що файли system.squashfs вище - це каталог, створений Casper, а не файл.
Ці три оператора створити /overlay
каталог, змонтувати Squashfs файлову систему на /overlay
каталог , а потім використовувати OverlayFS по суті об'єднати вміст /overlay
більш /
.
У процесі відновлення мого живого USB для кожного випуску я використовую OverlayFS, щоб заощадити купу часу. Я починаю з каталогу під назвою ubuntu-base, яка містить вміст ядра ubuntu-ядра, яке є найпростішою установкою. Тоді я буду створювати каталоги під назвою ubuntu, kubuntu, lubuntu та xubuntu.
Потім я використовую OverlayFS, щоб змусити файли з бази ubuntu відображатися в окремих каталогах. Я б використав щось подібне:
mount -t overlayfs -o lowerdir=ubuntu-base,upperdir=kubuntu overlayfs kubuntu
Це змушує файли з ubuntu-бази відображатися у папці kubuntu. Потім я можу chroot
перейти в папку kubuntu і зробити щось подібне apt-get install kubuntu-desktop
. Будь-які зміни, які вносяться під час цього кріплення OverlayFS, залишатимуться у верхньому каталозі, у цьому випадку - папці kubuntu. Потім, як тільки я відключу монтування OverlayFS, файли, які дійсно існують у ubuntu-базі, але "відображені" у папці kubuntu, зникають, якщо вони не були змінені. Це не дозволяє мені мати декілька копій файлів у ubuntu-базі, поки все ще в змозі використовувати їх так, ніби вони фізично існують у кожному місці.
overlay
не зoverlayfs
З https://www.kernel.org/doc/Documentation/filesystems/overlayfs.txt :
Верхня і Нижня
Файлова система, що накладається, поєднує дві файлові системи - «верхню» файлову систему та «нижню» файлову систему. Коли ім’я існує в обох файлових системах, об’єкт у 'верхній' файловій системі видно, тоді як об’єкт у 'нижній' файловій системі або прихований, або, у випадку каталогів, об'єднаний з 'верхнім' об'єктом.
Правильніше було б посилатися на верхнє і нижнє 'дерево каталогів', а не на 'файлову систему', оскільки цілком можливо, що обидва дерева каталогів знаходяться в одній файловій системі, і немає жодної вимоги, щоб корі файлової системи не було вказано для або верхній, або нижній.
Нижньою файловою системою може бути будь-яка файлова система, що підтримується Linux, і вона не потребує запису. Нижня файлова система може бути навіть іншим накладом. Верхня файлова система, як правило, може бути доступною для запису, і якщо вона є, вона повинна підтримувати створення надійних. * Розширених атрибутів і повинна надавати дійсні d_type у відповідях readdir, тому NFS не підходить.
Накладення двох файлових систем лише для читання може використовувати будь-який тип файлової системи.
Довідники
Накладання в основному стосується каталогів. Якщо задане ім’я з'являється у верхній та нижній файлових системах і посилається на не-каталог у будь-якій, то нижній об’єкт приховано - ім'я стосується лише верхнього об'єкта.
Там, де і верхній, і нижній об’єкти є каталогами, утворюється об'єднаний каталог.
Під час монтажу два каталоги, наведені як параметри монтажу "downdir" і "upperdir", об'єднуються в об'єднаний каталог:
mount -t overlay overlay -olowerdir=/lower,upperdir=/upper,workdir=/work /merged
"Workdir" повинен бути порожнім каталогом у тій же файловій системі, що і upperdir.
Потім, коли запит на пошук у такому об'єднаному каталозі, пошук виконується у кожному фактичному каталозі, а об'єднаний результат кешується в стоматології, що належить файловій системі накладення. Якщо обидва фактичні пошукові файли знаходять каталоги, обидва зберігаються та створюється об'єднаний каталог, інакше зберігається лише один: верхній, якщо він існує, інший нижній.
З’єднуються лише списки імен із каталогів. Інший вміст, такий як метадані та розширені атрибути, повідомляється лише для верхнього каталогу. Ці атрибути нижнього каталогу приховані.
Я розширив ці артекелі, щоб включити Скрипт для накладень, який встановлює кореневий файл, доступний лише для читання.
Сподіваюся, це допомагає.
Приклад мінімальної експлуатації
# Create the filesystems.
dd if=/dev/zero of=lower.ext4 bs=1024 count=102400
mkfs -t ext4 lower.ext4
cp lower.ext4 upper.ext4
mkdir lower upper overlay
sudo mount lower.ext4 lower
sudo mount upper.ext4 upper
sudo chown "$USER:$USER" lower upper
printf lower-content > lower/lower-file
# Upper and work must be on the same filesystem.
mkdir upper/upper upper/work
printf upper-content > upper/upper/upper-file
# Work must be empty. E.g. this would be bad:
#printf work-content > upper/work/work-file
# Make the lower readonly to show that that is possible:
# writes actually end up on the upper filesystem.
sudo mount -o remount,ro lower.ext4 lower
# Create the overlay mount.
sudo mount \
-t overlay \
-o lowerdir=lower,upperdir=upper/upper,workdir=upper/work \
none \
overlay \
;
# Interact with the mount.
printf 'overlay-content' > overlay/overlay-file
ls lower upper/upper upper/work overlay
# Write to underlying directories while mounted
# gives undefined behaviour.
#printf lower-content-2 > lower/lower-file-2
#printf upper-content-2 > upper/upper-file-2
# Unmount the overlay and observe state.
sudo umount overlay
ls lower upper/upper upper/work
# Cleanup.
sudo umount upper lower
Вихід першого ls
з кріпленням:
lower:
lost+found lower-file
overlay:
lost+found lower-file overlay-file upper-file
upper/upper:
overlay-file upper-file
upper/work:
work
Вихід другого ls
без кріплення:
lower:
lost+found lower-file
upper/upper:
overlay-file upper-file
upper/work:
work
Інтерпретація:
work/
каталог), про який ми не повинні піклуватисяПриклад адаптований з: Приклад використання OverlayFS
Ось більш складний приклад з кількома нижніми шарами: Overlayfs перезавантажується декількома шарами (міграція подалі від aufs)
Тестовано на Ubuntu 18.04, ядрі Linux 4.15.0.
mount -t overlayfs -o rw,uppderdir=x,lowerdir=y overlayfs /mount/point
. Поза цим я незрозумілий. Я розмовляю з нею в живій системі, але мені ще не вдалося змусити її працювати. Я б хотів, щоб я міг точно дізнатися, що означають "верхній" та "нижній". Я нічого не знайшов.