ทำไมต้องมีอุปกรณ์วนซ้ำเลย?


15

ก่อนหน้านี้ฉันเคยสร้างไฟล์รูปภาพโดยใช้ddตั้งค่าระบบไฟล์ที่พวกเขาใช้mkfsและmountพวกเขาเพื่อเข้าถึงพวกเขาเป็นพาร์ติชันที่ติดตั้ง ต่อมาฉันได้เห็นบนอินเทอร์เน็ตที่มีตัวอย่างมากมายใช้losetupล่วงหน้าเพื่อทำรายการอุปกรณ์ลูปใต้/devแล้วติดตั้ง ฉันไม่สามารถบอกได้ว่าเหตุใดจึงต้องใช้ไฟล์รูปภาพเพื่อทำงานเป็นอุปกรณ์วนรอบและมี/devรายการของตัวเองในขณะที่สามารถรับพฤติกรรมเดียวกันได้โดยไม่ต้องยุ่งยาก

สรุป:ในสถานการณ์จริงทำไมเราต้องมี/dev/loopXรายการที่จะปรากฏเมื่อเราเพียงแค่เมานท์ภาพ fs โดยไม่ได้หรือไม่ การใช้อุปกรณ์ลูปคืออะไร


9
"... ในขณะที่พฤติกรรมเดียวกันสามารถรับได้โดยไม่ต้องวุ่นวาย" - คุณทำผิดพลาด;) - บน Linux ไม่สามารถติดตั้งไฟล์ได้โดยไม่ต้อง "ยุ่งยาก" ของอุปกรณ์ลูป เป็นเพียงว่าทุกวันนี้mountฉลาดพอที่จะสร้างความยุ่งยากให้กับคุณ (ดังที่สตีเฟ่นแฮร์ริสแสดงในคำตอบของเขา)
marcelm

คำตอบ:


22

โดยทั่วไปการติดตั้งจะต้องดำเนินการกับอุปกรณ์บล็อก ไดรเวอร์ลูปวางอุปกรณ์บล็อกส่วนหน้าลงในไฟล์ข้อมูลของคุณ

หากคุณใช้การวนลูปโดยไม่losetupใช้ระบบปฏิบัติการจะทำสิ่งใดสิ่งหนึ่งในพื้นหลัง

เช่น

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

คุณอาจจำเป็นต้องโทรlosetupโดยตรงหากภาพไฟล์ของคุณมีพาร์ทิชันฝังอยู่

เช่นถ้าฉันมีภาพนี้:

$ 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

ฉันไม่สามารถเมานต์โดยตรง

$ 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

แต่ถ้าผมใช้losetupและkpartxจากนั้นฉันสามารถเข้าถึงพาร์ทิชัน:

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

คุณไม่จำเป็นต้องชัดเจนlosetupใช้เพียงmount -o loop,offset=$((512*2048))ที่512เป็นเซกเตอร์ขนาดและ2048คือสิ่งที่fdiskทำให้เป็นStartของพาร์ทิชัน
Ruslan

ใช่นี่เป็นเพียงตัวอย่างของการใช้งาน ในตัวอย่างนี้โดยเฉพาะมันอาจจะง่ายต่อการทำคำนวณชดเชย แต่อาจจะมีกรณีการใช้งาน (เช่นหลายพาร์ติชั่นที่คุณต้องการที่จะติดในเวลาเดียวกัน) ซึ่งมันอาจจะง่ายขึ้นเพียงแค่และlosetup kpartxให้เครื่องมือทำงานหนัก :-)
Stephen Harris

18

ระบบไฟล์คาดว่าจะอ่านและเขียนลงในอุปกรณ์บล็อกได้ แต่ไฟล์รูปภาพไม่ได้ปิดกั้นอุปกรณ์ อุปกรณ์วนรอบให้อุปกรณ์บล็อกอยู่ด้านบนของไฟล์ (หรืออุปกรณ์บล็อกอื่นหรือเลือกที่จะทำการแมปใหม่)

ไม่จำเป็นต้องพิจารณาอุปกรณ์ลูปเมื่อติดตั้งรูปภาพในหลาย ๆ กรณีเพราะmountดูแลทุกอย่างให้คุณ แต่อุปกรณ์ลูปยังคงเกี่ยวข้อง losetup -l -aจะแสดงพวกเขา

ดูเพิ่มเติมความแตกต่างระหว่าง mount และ mount -o loopคืออะไร


ดังนั้นการจัดการอุปกรณ์บล็อกจึงถูกจัดการโดยปริยายmount?
corsel

2
ใช่mountดูแลlosetupเพิ่ม-o loopฯลฯ
สตีเฟ่น Kitt

@corsel ในกรณีส่วนใหญ่การเมานต์ losetup สำหรับคุณทำงานได้ดี แต่มีข้อยกเว้นเช่นการติดตั้งหลายพาร์ติชันจากดิสก์อิมเมจ
hildred

11

ดูเหมือนว่าคุณใช้งานบน Linux และ Linux ใช้ชื่อผิดสำหรับคุณสมบัตินั้น

ฉันคิดค้นคุณลักษณะนี้ในปี 1988 บน SunOS-4.0 และฉันเรียกคุณลักษณะนี้ว่าfbk- ไฟล์จำลองอุปกรณ์ BlocK

พื้นหลังคือโปรแกรมควบคุมอุปกรณ์จำลองอุปกรณ์บล็อกด้านบนของไฟล์ธรรมดา คุณต้องการสิ่งนี้เนื่องจากระบบไฟล์ไม่สามารถใช้ไฟล์ธรรมดาเป็นที่เก็บพื้นหลังสำหรับระบบไฟล์ ค่อนข้างต้องการอุปกรณ์บล็อกและนี่คือสิ่งที่fbkเลียนแบบ

เนื่องจากในขณะที่บางคนทำให้โปรแกรมmountมีความฉลาดขึ้นเล็กน้อยและมีการติดตั้งที่สร้างfbkอินสแตนซ์สำหรับไฟล์โดยอัตโนมัติในกรณีที่mountโปรแกรมตรวจพบว่าอาร์กิวเมนต์ที่คาดว่าจะเป็นอุปกรณ์บล็อกนั้นดูเหมือนจะเป็นไฟล์แผนแทน


3
ประวัติย่อที่คุณประทับใจในโปรไฟล์ของคุณ เคารพ ...
corsel

11
โพสต์ของคุณออกมาค่อนข้างน่าพอใจ คุณอาจเขียนการติดตั้งใช้งานครั้งแรก แต่ลีนุกซ์ใช้การติดตั้งอื่นดังนั้นจึงไม่ใช้ชื่อ 'ผิด' แต่ต่างจากที่คุณเลือกสำหรับการนำไปใช้งาน
Austin Hemmelgarn

4
ฉันไม่เคยบอกว่าพวกเขาใช้ชื่อที่ถูกต้องฉันแค่บอกว่าการอ้างว่ามันผิดนั้นทำให้คุณฟังดูเหมือนเป็นชนชั้นนำที่มีความเห็น
Austin Hemmelgarn

9
ชื่อ 'loop' นั้นสั้นสำหรับ "loopback" "และอ้างถึงวิธีการทำงานของอุปกรณ์บล็อกนั้นคือ" looped back "ไปยัง VFS Solaris 8 แนะนำอุปกรณ์lofi("ไฟล์ลูปแบ็ค") ที่ใช้งานได้ในทำนองเดียวกัน BSD แนะนำพวกเขาภายใต้ชื่อvnd("ดิสก์ vnode") ดังนั้นแนวคิดมีชื่อแตกต่างกันมากในช่วงหลายปีที่ผ่านมา
คาเฟ่

2
ปัญหาที่ยากที่สุดสองข้อใน CS: การเชื่อมโยงกันแคชการตั้งชื่อตัวระบุและข้อผิดพลาดแบบแยกจากกัน
Jens

1

แม้ว่าจะไม่จำเป็นต้องใช้ในพื้นหลังสำหรับการติดตั้งระบบไฟล์จากไฟล์คุณยังคงต้องการมันสำหรับการตั้งค่าใด ๆ โดยใช้ไดรเวอร์หรือโปรแกรมที่คาดว่าจะมีอุปกรณ์บล็อก คิดว่าเซิร์ฟเวอร์ nbd (อุปกรณ์บล็อกเครือข่าย) ไดรเวอร์อุปกรณ์อุปกรณ์บล็อกแบบผสมเช่น mdraid, lvm ฯลฯ ....

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.