Neden bir döngü cihazına ihtiyaç duyulur?


15

Daha önce kullanarak görüntü dosyaları oluşturmak dd, bunları kullanarak bir dosya sistemi kurmak mkfsve mountonlara bağlı bölümler olarak erişmek için kullanıyordum . Daha sonra, internette birçok örneğin losetupönceden bir döngü cihazı girişi yapmak /devve daha sonra monte etmek için önceden kullandığını gördüm . Neden bir döngü cihazı olarak davranmak ve kendi /devgirişine sahip olmak için bir görüntü dosyasına neden ihtiyaç duyulduğunu söyleyemedim , aynı davranış tüm güçlükler olmadan elde edilebilir.

Özet: Gerçek hayat senaryosunda, /dev/loopXfs görüntüsünü onsuz bağlayabildiğimizde neden var olmak için bir girdiye ihtiyacımız var? Bir döngü cihazının kullanımı nedir?


9
“... aynı davranış tüm güçlükler olmadan elde edilebilir.” - Orada yanılıyorsunuz;) - Linux'ta bir dosya , bir döngü aygıtının "derdi" olmadan bağlanamaz . Sadece bugünlerde mountsizin için güçlük yapacak kadar zeki. (Stephen Harris'in cevabında gösterdiği gibi)
marcelm

Yanıtlar:


22

Montajlar tipik olarak blok cihazlarda yapılmalıdır. Döngü sürücüsü, veri dosyanıza bir blok cihazı ön ucu koyar.

Onsuz bir döngü montajı yaparsanız losetup, OS arka planda bir montaj yapar.

Örneğin

$ dd if=/dev/zero of=/tmp/foo bs=1M count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 0.0798775 s, 1.3 GB/s
$ mke2fs /tmp/foo
mke2fs 1.42.9 (28-Dec-2013)
....


$ losetup    
$ mount -o loop /tmp/foo /mnt1    
$ losetup
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE
/dev/loop0         0      0         1  0 /tmp/foo
$ umount /mnt1
$ losetup
$ 

losetupDosya resminizde gömülü bölümler varsa doğrudan aramanız gerekebilir .

örneğin bu görüntü varsa:

$ fdisk -l /tmp/foo2      

Disk /tmp/foo2: 104 MB, 104857600 bytes, 204800 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x1f25ff39

     Device Boot      Start         End      Blocks   Id  System
/tmp/foo2p1            2048      204799      101376   83  Linux

Doğrudan monte edemiyorum

$ mount -o loop /tmp/foo2 /mnt1
mount: /dev/loop0 is write-protected, mounting read-only
mount: wrong fs type, bad option, bad superblock on /dev/loop0,
       missing codepage or helper program, or other error

Ama kullanırsam losetupve kpartxsonra bölümlere erişebilirsem:

$ losetup -f /tmp/foo2
$ losetup
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE
/dev/loop0         0      0         0  0 /tmp/foo2
$ kpartx -a /dev/loop0
$ mount /dev/mapper/loop0p1 /mnt1
$

Sen açık gerekmez losetup, sadece kullanımını mount -o loop,offset=$((512*2048))nerede, 512sektör boyutudur ve 2048ne fdiskkadar verdi Startbölümünün.
Ruslan

Evet, bu sadece bir kullanım örneğiydi. Bu özel örnekte, ofset hesaplamasını yapmak daha kolay olabilir, ancak sadece losetupve daha kolay olabileceği kullanım durumları (örneğin, aynı anda monte etmek istediğiniz çoklu bölümler) olabilir kpartx. Araçlar zor işi yapalım :-)
Stephen Harris

18

Dosya sistemleri aygıtları engellemeyi okumayı ve aygıtlara yazmayı bekler, ancak görüntü dosyaları aygıtları engellemez. Döngü aygıtları bir dosyanın üstünde bir blok aygıtı (veya isteğe bağlı olarak yeniden eşleme ile başka bir blok aygıtı) sağlar.

Birçok durumda görüntüleri monte ederken loop cihazlarını düşünmenize gerek yoktur çünkü mountsizin için her şeyi halleder; ancak döngü aygıtları hala söz konusudur. losetup -l -agösterecek.

Ayrıca bkz. Mount ve mount -o döngüsü arasındaki fark nedir .


Yani blok cihaz-izlemi örtük olarak mount?
corsel

2
Evet, mountilgilenir losetup, ekler -o loopvb.
Stephen Kitt

@ corsel, Çoğu durumda sizin için mount call losetup'a sahip olmak iyi çalışır, ancak bir disk görüntüsünden birden çok bölüm monte etmek gibi istisnalar vardır.
Hildred

11

Linux'ta görünüyorsunuz ve Linux bu özellik için yanlış bir ad kullanıyor.

Bu özelliği 1988'de SunOS-4.0'da icat ettim ve bu özelliği çağırıyorum fbk- Dosya BlocK cihazını taklit ediyor.

Arka plan, aygıt sürücüsünün düz bir dosyanın üzerine bir blok aygıtı taklit etmesidir. Bir dosya sistemi düz bir dosyayı bir dosya sistemi için arka plan depolama alanı olarak kullanamadığından buna ihtiyacınız vardır. Daha ziyade bir blok cihaza ihtiyaç duyar ve bu fbktaklit eder.

Bir süredir bazı insanlar programı mountbiraz daha akıllı hale getirdi ve programın bir blok cihaz olması beklenen argümanın bir plan dosyası gibi göründüğünü tespit etmesi fbkdurumunda, otomatik olarak bir dosya için örnek oluşturan bağlama uygulamaları var mount.


3
Profilinizde çok etkileyici CV var. Saygı ...
corsel

11
Gönderiniz biraz daha seçkin görünüyor. İlk uygulamayı yazmış olabilirsiniz, ancak Linux farklı bir uygulama kullanıyor, bu yüzden 'yanlış' adı kullanmıyor, sadece uygulamanız için seçtiğinizden farklı.
Austin Hemmelgarn

4
Asla doğru ismi kullandıklarını söylemedim, sadece yanlış olduğunu iddia etmenin sizi kanaat sahibi bir seçkin gibi hissettirdiğini söyledim.
Austin Hemmelgarn

9
'Döngü' adı "geri döngü" kısaltmasıdır ve blok cihazdaki işlemlerin VFS'ye "geri döngü" şeklini belirtir. Solaris 8 lofibenzer şekilde çalışan bir ("geri döngü dosyası") cihazı tanıttı ; BSD onları vnd("vnode disk") adı altında tanıttı, bu yüzden konsept yıllar boyunca birçok farklı isme sahipti.
caf

2
CS'deki en zor iki sorun: önbellek tutarlılığı, tanımlayıcı adlandırma ve tek tek hatalar.
Jens

1

Dosya sistemlerini dosyalardan monte etmek için arka planda gerek olmasa bile, kesinlikle bir blok cihazı bekleyen bir sürücü veya program kullanan herhangi bir kurulum için buna ihtiyacınız olacaktır. Nbd (ağ blok cihazı) sunucuları, mdraid, lvm vb gibi bileşik blok cihaz sürücüleri düşünün ....

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.