Ta odpowiedź i wiadomość e - mail wskazują, że coś o nazwie „OverlayFS” jest dostępne w Ubuntu 11.10 i wymusi zastąpienie aufs w Ubuntu 12.04.
Jak z tego korzystać? Gdzie jest jego dokumentacja?
Ta odpowiedź i wiadomość e - mail wskazują, że coś o nazwie „OverlayFS” jest dostępne w Ubuntu 11.10 i wymusi zastąpienie aufs w Ubuntu 12.04.
Jak z tego korzystać? Gdzie jest jego dokumentacja?
Odpowiedzi:
Edycja: Od czasu napisania tej odpowiedzi niektóre zmiany uległy zmianie w nakładkach, a mianowicie dodanie wymaganego parametru workdir
, patrz odpowiedź totti poniżej, aby uzyskać szczegółowy opis tego nowego parametru.
W końcu udało mi się go znaleźć. Znalazłem odniesienia do niego w źródle jądra, ale z jakiegoś powodu nie pojawia się w drzewie git na kernel.org. Ale! Jeśli wyciągniesz źródło jądra Ubuntu w ten sposób: apt-get source linux-image-3.0.0-16-generic
możesz je znaleźć linux-3.0.0/Documentation/overlayfs.txt
. Jest również dostępny w pakiecie linux-doc w /usr/share/doc/linux-doc/filesystems/overlayfs.txt.gz
.
Ponieważ faktyczna dokumentacja pomocy jest bardziej „sposobem działania” zamiast „jak się z nim zamontować”, oto krótkie podsumowanie (istnieje jeden przykład w dokumentacji jądra):
mount -t overlayfs -o [mount options] overlayfs [mountpoint for merged system]
Gdzie [opcje montowania] mogą być:
Jedną z rzeczy, która mnie na początku pomyliła, więc powinienem chyba wyjaśnić, jest to, że zamontowanie overlayfs nie powoduje zamontowania systemu plików. Próbowałem zamontować system plików squashfs za pomocą montowania overlayfs, ale nie tak to działa. Najpierw musisz zamontować system plików (w moim przypadku squashfs) w dowolnym katalogu, a następnie użyć overlayfs, aby scalić punkt montowania (katalog) i inny katalog w katalogu trzeciorzędnym (punkt montowania overlayfs) (edycja: ten katalog „trzeciorzędowy” może to być katalog Upperdir =). Trzeci katalog to miejsce, w którym zobaczysz scalone systemy plików (lub drzewa katalogów - jest elastyczny).
Pracowałem na hybrydowym dysku rozruchowym Ubuntu, na którym podstawowy system Ubuntu istnieje jako filesystem.squashfs i mam pliki o nazwie ubuntu.overlay kubuntu.overlay xubuntu.overlay i lubuntu.overlay. Pliki .overlay to podstawowe instalacje wymienionych systemów z przyciętą zawartością fileystem.squashfs (w celu zaoszczędzenia miejsca). Następnie zmodyfikowałem skrypty inicjujące, aby nałożyć plik .overlay prawidłowej dystrybucji (z parametru rozruchowego) za pomocą overlayfs i powyższych opcji i działa jak urok!
Oto linie, których użyłem w moich skryptach init (po przetłumaczeniu wszystkich zmiennych):
mkdir -p /overlay
mount -t squashfs /cdrom/casper/ubuntu.overlay /overlay
mount -t overlayfs -o lowerdir=/filesystem.squashfs,upperdir=/overlay overlayfs /
Zauważ, że fileystem.squashfs powyżej to katalog utworzony przez casper, a nie plik.
Te trzy instrukcje tworzą /overlay
katalog, montują system plików squashfs w /overlay
katalogu, a następnie używają OverlayFS do scalenia zawartości /overlay
over /
.
W trakcie przebudowy mojego Live USB dla każdej wersji używam OverlayFS, aby zaoszczędzić sporo czasu. Zaczynam od katalogu o nazwie ubuntu-base, który zawiera zawartość obrazu ubuntu-core, który jest najbardziej podstawową instalacją. Następnie utworzę katalogi o nazwach ubuntu, kubuntu, lubuntu i xubuntu.
Następnie używam OverlayFS, aby pliki z bazy ubuntu były wyświetlane w poszczególnych katalogach. Użyłbym czegoś takiego:
mount -t overlayfs -o lowerdir=ubuntu-base,upperdir=kubuntu overlayfs kubuntu
To sprawia, że pliki z Ubuntu-base pojawiają się w folderze Kubuntu. Następnie mogę chroot
przejść do folderu kubuntu i zrobić coś takiego apt-get install kubuntu-desktop
. Wszelkie zmiany dokonane podczas instalacji OverlayFS pozostaną w górnym katalogu, w tym przypadku w folderze kubuntu. Następnie, po odmontowaniu OverlayFS montuje pliki, które naprawdę istnieją w Ubuntu-base, ale są „dublowane” w folderze kubuntu, znikają, chyba że zostały zmienione. To powstrzymuje mnie od konieczności posiadania wielu kopii plików w Ubuntu-base, a jednocześnie mogę ich używać tak, jakby fizycznie istniały w każdej lokalizacji.
overlay
nieoverlayfs
Od https://www.kernel.org/doc/Documentation/filesystems/overlayfs.txt :
Wyżej i niżej
Nakładkowy system plików łączy dwa systemy plików - „górny” i „dolny”. Gdy nazwa istnieje w obu systemach plików, obiekt w „górnym” systemie plików jest widoczny, podczas gdy obiekt w „dolnym” systemie plików jest ukryty lub, w przypadku katalogów, scalony z „górnym” obiektem.
Bardziej właściwe byłoby odwołanie się do górnego i dolnego „drzewa katalogów” zamiast do „systemu plików”, ponieważ jest całkiem możliwe, że oba drzewa katalogów znajdują się w tym samym systemie plików i nie ma wymogu podawania katalogu głównego systemu plików dla górna lub dolna.
Niższy system plików może być dowolnym systemem plików obsługiwanym przez Linux i nie musi być zapisywalny. Niższy system plików może być nawet kolejną nakładką. Górny system plików zwykle nadaje się do zapisu, a jeśli tak, musi obsługiwać tworzenie atrybutów zaufanych. * Rozszerzonych i musi zapewniać poprawny typ d w odpowiedziach readdir, więc NFS nie jest odpowiedni.
Nakładka tylko do odczytu dwóch systemów plików tylko do odczytu może wykorzystywać dowolny typ systemu plików.
Katalogi
Nakładanie dotyczy głównie katalogów. Jeśli dana nazwa pojawia się zarówno w górnym, jak i dolnym systemie plików i odnosi się do innego niż katalog w którymkolwiek z nich, wówczas dolny obiekt jest ukryty - nazwa odnosi się tylko do górnego obiektu.
Gdzie zarówno górne, jak i dolne obiekty są katalogami, tworzony jest scalony katalog.
W czasie montowania dwa katalogi podane jako opcje montowania „katalog dolny” i „katalog górny” są łączone w połączony katalog:
mount -t overlay overlay -olowerdir=/lower,upperdir=/upper,workdir=/work /merged
„Katalog roboczy” musi być pustym katalogiem w tym samym systemie plików, co katalog górny.
Następnie za każdym razem, gdy wymagane jest wyszukiwanie w takim scalonym katalogu, wyszukiwanie jest przeprowadzane w każdym rzeczywistym katalogu, a połączony wynik jest buforowany w dentystyce należącej do systemu plików nakładki. Jeśli oba rzeczywiste wyszukiwania znajdują katalogi, oba są przechowywane i tworzony jest scalony katalog, w przeciwnym razie przechowywany jest tylko jeden: górny, jeśli istnieje, w przeciwnym razie dolny.
Scalane są tylko listy nazw z katalogów. Inne treści, takie jak metadane i atrybuty rozszerzone, są zgłaszane tylko w górnym katalogu. Te atrybuty niższego katalogu są ukryte.
Rozszerzyłem te artykuły, aby zawierały skrypt dla nakładek, który konfiguruje root tylko do odczytu.
Mam nadzieję, że to pomoże.
Minimalny możliwy do uruchomienia przykład
# 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
Wyjście pierwszego ls
z montażem:
lower:
lost+found lower-file
overlay:
lost+found lower-file overlay-file upper-file
upper/upper:
overlay-file upper-file
upper/work:
work
Wyjście drugiego ls
bez uchwytu:
lower:
lost+found lower-file
upper/upper:
overlay-file upper-file
upper/work:
work
Interpretacja:
work/
katalog), na których nie powinniśmy się przejmowaćPrzykład dostosowany z: Przykład użycia OverlayFS
Oto bardziej złożony przykład z wieloma niższymi warstwami: Overlayfs przeładowuje z wieloma warstwami (migracja z dala od aufs)
Testowany na Ubuntu 18.04, jądro Linux 4.15.0.
mount -t overlayfs -o rw,uppderdir=x,lowerdir=y overlayfs /mount/point
. Poza tym nie mam pojęcia. Majstruję przy tym w systemie na żywo, ale jeszcze nie udało mi się go uruchomić. Chciałbym dowiedzieć się dokładnie, co oznaczają „górny katalog” i „dolny katalog”. Nic nie znalazłem