Mengapa seseorang membutuhkan perangkat loop sama sekali?

15

Saya sebelumnya digunakan untuk membuat file gambar menggunakan dd, mengatur sistem file pada mereka menggunakan mkfsdan mountmereka untuk mengaksesnya sebagai partisi yang dipasang. Kemudian, saya telah melihat di internet bahwa banyak contoh yang digunakan losetupsebelumnya untuk membuat entri perangkat loop di bawah /dev, dan kemudian memasangnya. Saya tidak bisa mengatakan mengapa seseorang secara praktis membutuhkan file gambar untuk berperilaku sebagai perangkat loop dan memiliki /deventri sendiri sementara perilaku yang sama dapat diperoleh tanpa semua kesulitan.

Rangkuman: Dalam skenario kehidupan nyata, mengapa kita membutuhkan /dev/loopXentri untuk hadir sama sekali, ketika kita bisa memasang gambar fs tanpa itu? Apa gunanya perangkat loop?

korsel
sumber
9
"... sementara perilaku yang sama dapat diperoleh tanpa semua kesulitan." - Anda salah di sana;) - di Linux, file tidak dapat dipasang tanpa "kerumitan" dari perangkat loop. Hanya saja saat mountini cukup pintar untuk melakukan kerumitan untuk Anda. (seperti yang ditunjukkan Stephen Harris dalam jawabannya)
marcelm
1
Kemungkinan rangkap dari Apa perbedaan antara mount dan mount -o loop
Dmitry Grigoryev

Jawaban:

22

Pemasangan, biasanya, harus dilakukan pada perangkat blok. Pengandar loop menempatkan front-end perangkat blok ke file data Anda.

Jika Anda melakukan loop mount tanpa losetupmaka OS melakukan satu di latar belakang.

misalnya

$ 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
$ 

Anda mungkin perlu menelepon losetuplangsung jika gambar file Anda telah menyematkan partisi di dalamnya.

mis. jika saya memiliki gambar ini:

$ 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

Saya tidak bisa memasang itu secara langsung

$ 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

Tetapi jika saya menggunakan losetupdan kpartxkemudian saya dapat mengakses partisi:

$ 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
$
Stephen Harris
sumber
Anda tidak perlu eksplisit losetup, cukup gunakan mount -o loop,offset=$((512*2048)), di mana 512ukuran sektor, dan 2048apa yang fdiskdiberikan Startpada partisi.
Ruslan
Ya, ini hanya contoh penggunaan. Dalam contoh khusus ini mungkin lebih mudah untuk melakukan perhitungan offset tetapi mungkin ada kasus penggunaan (misalnya beberapa partisi yang ingin Anda pasang pada saat yang sama) di mana lebih mudah untuk adil losetupdan kpartx. Biarkan alat melakukan kerja keras :-)
Stephen Harris
18

Sistem file berharap dapat membaca dan menulis untuk memblokir perangkat, tetapi file gambar tidak memblokir perangkat. Perangkat loop menyediakan perangkat blok di atas file (atau perangkat blok lain, opsional dengan memetakan ulang).

Tidak perlu mempertimbangkan perangkat loop saat memasang gambar dalam banyak kasus karena mountmengurus semuanya untuk Anda; tetapi perangkat loop masih terlibat. losetup -l -aakan menunjukkan kepada mereka.

Lihat juga Apa perbedaan antara mount dan mount -o loop .

Stephen Kitt
sumber
Jadi blokisasi perangkat secara implisit ditangani oleh mount?
corsel
2
Ya, mounturus losetup, tambahkan -o loopdll.
Stephen Kitt
@corsel, Dalam sebagian besar kasus mengalami kehilangan panggilan mount untuk Anda berfungsi dengan baik, tetapi ada pengecualian seperti memasang beberapa partisi dari gambar disk.
Hildred
11

Anda tampaknya berada di Linux dan Linux menggunakan nama yang salah untuk fitur itu.

Saya menemukan fitur itu pada tahun 1988 di SunOS-4.0 dan saya menyebut fitur itu fbk- File mengemulasi perangkat BlocK.

Latar belakangnya adalah driver perangkat mengemulasi perangkat blok di atas file biasa. Anda memerlukan ini karena sistem file tidak dapat menggunakan file biasa sebagai penyimpanan latar belakang untuk sistem file. Ini lebih membutuhkan perangkat blok dan inilah yang fbkditiru.

Sejak beberapa orang membuat program mountsedikit lebih pintar dan ada implementasi mount yang secara otomatis membuat fbkcontoh untuk file jika mountprogram mendeteksi bahwa argumen yang diharapkan menjadi perangkat blok tampaknya menjadi file rencana sebagai gantinya.

schily
sumber
3
CV yang sangat mengesankan Anda dapatkan di profil Anda. Hormat ...
corsel
11
Posting Anda terlihat agak terlalu elit. Anda mungkin telah menulis implementasi pertama, tetapi Linux menggunakan implementasi yang berbeda, sehingga tidak menggunakan nama 'salah', hanya berbeda dari apa yang Anda pilih untuk implementasi Anda.
Austin Hemmelgarn
4
Saya tidak pernah mengatakan mereka menggunakan nama yang benar, saya hanya mengatakan bahwa mengklaim itu salah membuat Anda terdengar seperti elitis yang memiliki pendapat.
Austin Hemmelgarn
9
Nama 'loop' adalah kependekan dari "loopback" 'dan mengacu pada cara operasi pada perangkat blok "di-looped kembali" ke VFS. Solaris 8 memperkenalkan perangkat lofi("loopback file") yang berfungsi serupa; BSD memperkenalkan mereka dengan nama vnd("vnode disk") sehingga konsep ini telah memiliki banyak nama berbeda selama bertahun-tahun.
caf
2
Dua masalah tersulit dalam CS: koherensi cache, penamaan pengidentifikasi, dan kesalahan satu per satu.
Jens
1

Bahkan jika itu tidak diperlukan di latar belakang untuk memasang sistem file dari file, Anda masih akan membutuhkannya untuk pengaturan apa pun menggunakan driver atau program yang benar-benar mengharapkan perangkat blok. Pikirkan server nbd (perangkat blok jaringan), driver perangkat blok majemuk seperti mdraid, lvm dll ....

pemeras
sumber