OverlayFS'i nasıl kullanırım?


53

Bu cevap ve e-posta mesajı , “OverlayFS” olarak adlandırılan bir şeyin Ubuntu 11.10'da mevcut olduğunu ve Ubuntu 12.04'teki aufların yerini alacağını gösterir.

Bunu nasıl kullanabilirim? Belgeleri nerede?


1
Sen ve ben ikimiz de kardeşim. Ben şimdiye kadar bu rastlamak ettik: mount -t overlayfs -o rw,uppderdir=x,lowerdir=y overlayfs /mount/point. Bunun ötesinde clueless'ım. Canlı bir sistemde onu kontrol ediyorum, ancak henüz işe almak için başardı. Keşke tam olarak "upperdir" ve "lowerdir" nin ne anlama geldiğini öğrenebilseydim. Hiçbir şey bulamadım.
Chuck R

Yanıtlar:


63

Düzenleme: Bu yanıtı yazma beri bazı şeyler overlayfs değişti, gerekli parametrenin yani eklenmesi workdir, bkz Totti cevabını bu yeni parametrenin ayrıntılı bir açıklama için aşağıya.

Sonunda onu bulmayı başardım. Çekirdek kaynağında referanslar buldum, ancak bir nedenden dolayı kernel.org'daki git ağacında görünmüyor. Fakat! Ubuntu çekirdek kaynağını bu şekilde çekerseniz: apt-get source linux-image-3.0.0-16-genericonu içinde bulabilirsiniz linux-3.0.0/Documentation/overlayfs.txt. Ayrıca linux-doc paketinde de mevcuttur /usr/share/doc/linux-doc/filesystems/overlayfs.txt.gz.

Asıl yardım dokümantasyonu, "nasıl bağlanır" yerine "nasıl çalışır" dan daha fazlası olduğundan, kısa bir özet (çekirdek belgelerinde bir örnek var):

mount -t overlayfs -o [mount options] overlayfs [mountpoint for merged system]

[Mount seçenekleri] nerede olabilir:

  • lowerdir = somedir: lowerdir, yeni dosya sisteminizin üzerine yerleştireceğiniz dizindir, bunlar kopyaların üzerine yazılırsa (aslında, lehine gizli)
  • upperdir = somedir: upperdir, bindirmek istediğiniz dizindir. Eğer yinelenen dosya isimleri Lowerdir ve Upperdir'de mevcutsa, Upperdir'in sürümü öncelikli olur.
  • standart montaj seçenekleri. Koddan gördüğüm tek şey ro / rw, fakat deneyebilirsiniz.

Başta kafamı karıştıran bir şey, bu yüzden muhtemelen açıklığa kavuşturmak gerekir, bir overlayfs montaj aslında bir dosya sistemi monte etmiyor olmasıdır. Bir bindirmeli dağı kullanarak bir squashfs dosya sistemi kurmaya çalışıyordum, ama bu böyle değil. Önce (benim durumumda squashfs) dosya sistemini rastgele bir dizine monte etmeli, daha sonra bağlama noktasını (bir dizin) ve başka bir dizini üçüncü bir dizine (bindirme bağlama noktası) birleştirmek için bindirmeleri kullanmalısınız (düzenleme: this "üçüncül" dizin aslında üst dizin olabilir = dizin). Üçüncül dizin, birleştirilmiş dosya sistemlerini göreceğiniz yerdir (veya dizin ağaçları - esnek).

Örnek 1, kök dosya sistemini kaplayan

Temel Ubuntu sisteminin filesystem.squashfs olarak bulunduğu ve ubuntu.overlay kubuntu.overlay xubuntu.overlay ve lubuntu.overlay adında dosyalar bulunan bir Ubuntu hibrit önyükleme diski üzerinde çalışıyorum. .Overlay dosyaları belirtilen sistemlerin temel kurulumlarıdır, filesystem.squashfs budanır (yer kazanmak için). Ardından, başlangıç ​​komutlarını ve yukarıdaki seçenekleri kullanarak doğru distro'nun .overlay dosyasını (bir önyükleme parametresinden) üst üste bindirmek için üstteki komut dosyalarını değiştirdim ve cazibeye benziyor!

Bunlar init betiğimde kullandığım satırlar (tüm değişkenler çevrildikten sonra):

mkdir -p /overlay
mount -t squashfs /cdrom/casper/ubuntu.overlay /overlay
mount -t overlayfs -o lowerdir=/filesystem.squashfs,upperdir=/overlay overlayfs /

Yukarıdaki filesystem.squashfs dosyasının bir dosya değil, casper tarafından oluşturulan bir dizin olduğunu unutmayın .

Bu üç ifadeler bir oluşturmak /overlayüzerinde squashfs mount, dizin /overlayesas içeriğini birleştirmek için OverlayFS kullanmak sonra dizin ve /overlayüzerine /.

Örnek 2, iki dizinin şeffaf bir şekilde birleştirilmesi

Her sürüm için canlı USB'mi yeniden oluşturma sürecinde, çok fazla zaman kazanmak için OverlayFS kullanıyorum. En temel kurulum olan ubuntu-core görüntünün içeriğini içeren ubuntu-base adında bir dizinle başladım. Daha sonra ubuntu, kubuntu, lubuntu ve xubuntu adlı dizinler oluşturacağım.

Ardından, ubuntu-tabanındaki dosyaları tek tek dizinlerde göstermek için OverlayFS kullanıyorum. Böyle bir şey kullanırdım:

mount -t overlayfs -o lowerdir=ubuntu-base,upperdir=kubuntu overlayfs kubuntu

Bu ubuntu-base'den gelen dosyaları kubuntu klasöründe gösterir. Sonra chrootkubuntu klasörüne gidip bir şey yapabilirim apt-get install kubuntu-desktop. Bu OverlayFS montajı sırasında yapılan değişiklikler üst dizinde, bu durumda kubuntu klasörü olarak kalacaktır. Ardından, OverlayFS'nin bağlantısını çıkardıktan sonra ubuntu-base'de gerçekten var olan ancak değiştirilmediği sürece kubuntu klasörüne "yansıtılmış" olan dosyaları bağladım. Bu, ubuntu-base içindeki dosyaların birden fazla kopyasına sahip olmamın yanı sıra, her bir yerde fiziksel olarak varmış gibi kullanmaya devam etmemi sağlıyor.


3
"ama nedense kernel.org'daki git ağacında görünmüyor" - Bunun sebebi, bindirmelerin yukarı akıştaki çekirdeğin içinde olmaması, tıpkı aufların olmadığı (ve hiç olmayacağı). Bu tür bir birleşim dosya sistemleri Ubuntu Çekirdek Ekibi tarafından entegre edilmiştir.
MestreLion

2
OverlayFS görünüşe göre çekirdeğe giriyor 3.10.
David C. Bishop

8
Sonunda, 3.18'de
Rmano

4
@Rmano: makinemde sadece ile overlaydeğil çalışıroverlayfs
Janus Troelsen

1
Eyvallah @austinmarton, ben de bir süre önce bunu buldum ve cevabımı güncellemeden önce aşağıdakileri ele aldım.
Chuck R,

20

Gönderen https://www.kernel.org/doc/Documentation/filesystems/overlayfs.txt :

Üst ve alt

Bir bindirmeli dosya sistemi iki dosya sistemini birleştirir - bir 'üst' dosya sistemi ve bir 'alt' dosya sistemi. Her iki dosya sisteminde bir ad bulunduğunda, 'üst' dosya sistemindeki nesne görünürken 'alt' dosya sistemindeki nesne gizlenir veya dizinler durumunda 'üst' nesneyle birleştirilir.

Her iki dizin ağacının aynı dosya sisteminde olması oldukça muhtemel olduğundan ve 'dosya sistemi' yerine üst ve alt bir 'dizin ağacına' başvurmak daha doğru olacaktır ve bir dosya sisteminin kökü için bir gereklilik yoktur. Üst veya alt.

Düşük dosya sistemi Linux tarafından desteklenen herhangi bir dosya sistemi olabilir ve yazılabilir olması gerekmez. Düşük dosya sistemi başka bir bindirmeler olabilir. Üst dosya sistemi normalde yazılabilir olacaktır ve eğer öyleyse güvenilir. * Genişletilmiş özniteliklerin oluşturulmasını desteklemeli ve readdir yanıtlarında geçerli d_type sağlamalıdır, bu nedenle NFS uygun değildir.

Salt okunur iki dosya sisteminin salt okunur yerleşimi herhangi bir dosya sistemi türünü kullanabilir.

Dizinler

Yer paylaşımı, genellikle dizinleri içerir. Belirli bir ad hem alt hem de üst dosya sistemlerinde görünüyorsa ve her ikisinde de bir dizine işaret etmiyorsa, alt nesne gizlenir - ad yalnızca üst nesneye işaret eder.

Hem üst hem de alt nesnelerin dizinler olması durumunda, birleştirilmiş bir dizin oluşturulur.

Montaj zamanında, "lowerdir" ve "upperdir" montaj seçenekleri olarak verilen iki dizin birleştirilmiş bir dizinde birleştirilir:

mount -t overlay overlay -olowerdir=/lower,upperdir=/upper,workdir=/work /merged

"Workdir", üst dosya ile aynı dosya sisteminde boş bir dizin olmalıdır.

Daha sonra böyle bir birleştirilmiş bir dizinde bir arama istendiğinde, arama her bir gerçek dizinde gerçekleştirilir ve birleştirilmiş sonuç, bindirme dosya sistemine ait dişlide önbelleğe alınır. Her iki gerçek arama da dizin bulursa, her ikisi de saklanır ve birleştirilmiş bir dizin oluşturulur, aksi takdirde yalnızca bir tanesi saklanır: varsa, üst, daha düşük.

Sadece dizinlerden gelen isimlerin listeleri birleştirilir. Meta veri ve genişletilmiş öznitelikler gibi diğer içerikler yalnızca üst dizin için rapor edilir. Bu alt dizinin bu özellikleri gizlidir.


4
Workdir'deki açıklama için teşekkürler. Bu oldukça son zamanlarda yapılan bir değişiklikti ve ne nedenle olursa olsun, 'workdir' ile ilgili ne yaptığına dair hiçbir belge bulamadım. En son baktığımda da çekirdek yardımında değildi. IMO'yu üst üste bindirmek için bir karışıklık katmanı ekler, yeni sürümlerin onsuz kullanılabilmesini ister - bu benim iş akışımı mahvetti.
Chuck R,

7

Bu makaleleri, salt okunur bir kök fs ayarlayan bindirmeler için bir Komut Dosyası içerecek şekilde genişlettim.

Umarım yardımcı olur.


1
Başkalarının yaptığı çalışma sayesinde, Dustin ve ben cloud-initramfs-tools kaynak paketinin bir parçası olan quantal'a 'overlayroot' adlı bir banary paket ekledik . İçinde kullanım belgelerine bakın /etc/overlayroot.conf
smoser

2

Minimum çalıştırılabilir örnek

# 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

GitHub yukarı akış .

Bağlantılı ilk çıktı ls:

lower:
lost+found  lower-file

overlay:
lost+found  lower-file  overlay-file  upper-file

upper/upper:
overlay-file  upper-file

upper/work:
work

Bağlantısız ikinci çıkış ls:

lower:
lost+found  lower-file

upper/upper:
overlay-file  upper-file

upper/work:
work

Yorumlama:

  • alt: bindirmeye yazdıktan sonra değişmedi
  • upper: yer paylaşımına modifikasyon aldı
  • bindirme: alt ve üstteki dosyaları gösterir
  • work: work/umursamamız gereken bazı rastgele içerikler (bir dizin) içerir

Uyarlanan örnek: Örnek OverlayFS Kullanımı

İşte birden fazla alt katmana sahip daha karmaşık bir örnek: Bindirmeler birden fazla katmanla yeniden yüklendi (auflardan uzaklaşarak)

Ubuntu 18.04, Linux çekirdeği 4.15.0'da test edilmiştir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.