GNU / Linux: อุปกรณ์บล็อกซ้อนทับ / อุปกรณ์บล็อกซ้อนได้


14

GNU / Linux มียูเนี่ยนเมาท์ที่ซ้อนทับ dirs ดังนั้นคุณสามารถเมานต์ dir แบบเขียนได้ด้านบนของ dir แบบอ่านอย่างเดียว เมื่อ dir แบบเขียนได้ถูกถอดออกแล้ว dir แบบอ่านอย่างเดียวจะไม่ถูกแตะต้อง

ฉันกำลังมองหาฟังก์ชั่นเดียวกันสำหรับอุปกรณ์บล็อก - ควรมีส่วนที่เขียนได้เก็บไว้ในไฟล์ ดังนั้นฉันต้องการเรียกใช้บางสิ่งเช่น:

device-setup /dev/newdevice /dev/read-only-device overlayfile

ถ้าฉันเขียนถึง / dev / newdevice การเปลี่ยนแปลงควรถูกเก็บไว้ใน overlayfile ถ้าฉันอ่านเซกเตอร์ที่เขียนไปฉันควรได้รับข้อมูลจากโอเวอร์เลย์ไฟล์ ถ้าฉันอ่านส่วนที่ไม่ได้เขียนฉันควรได้รับข้อมูลจาก / dev / read-only-device

เครื่องมือดังกล่าวมีอยู่จริงหรือไม่?


ที่คล้ายกัน Q & A: LVM เหมือนภาพรวมบนอุปกรณ์บล็อกปกติ
imz - Ivan Zakharyaschev

คำตอบ:


22

คุณสามารถทำเช่นนั้นกับผู้ทำแผนที่อุปกรณ์และsnapshotเป้าหมายของมัน

โดยพื้นฐานแล้วคุณจะต้องทำสิ่งเดียวกันกับที่ LVM ทำเมื่อคุณสร้างสแนปชอตที่เขียนได้

dev=/dev/read-only-device
ovl=/path/to/overlay.file
newdevname=newdevice
size=$(blockdev --getsz "$dev")

loop=$(losetup -f --show -- "$ovl")
printf '%s\n' "0 $size snapshot $dev $loop P 8" |
  dmsetup create "$newdevname"

จากนั้นคุณสามารถเข้าถึงอุปกรณ์ overlayed /dev/mapper/newdeviceเป็น

หากคุณต้องการเข้าถึงอุปกรณ์ดั้งเดิมในเวลาเดียวกันคุณสามารถทำได้:

printf '%s\n' "0 $size snapshot-origin $dev" |
  dmsetup create originaldevice

/dev/mapper/originaldeviceและเข้าถึงมันมากกว่า

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

ไฟล์ภาพซ้อนทับอาจเป็นไฟล์แบบเบาบาง (เช่นสร้างเป็นtruncate -s10G the-file) และไม่จำเป็นต้องมีขนาดใหญ่เท่ากับอุปกรณ์ดั้งเดิม dmsetup status "$newdevname"คุณสามารถบอกได้ว่ามันเป็นเต็มรูปแบบด้วย

หมายเหตุ: มีขนาดและเนื้อหา reqirements บนอุปกรณ์ภาพ


1
คำถามที่น่าสนใจที่ตามมาคือการรวมการเปลี่ยนแปลงที่สะสมไว้ในภายหลังสามารถรวมเข้ากับอุปกรณ์ดั้งเดิมได้หรือไม่
imz - Ivan Zakharyaschev

1
คำตอบที่ตามมา: ใช่ "Device-mapper ช่วยให้คุณ ... *) เพื่อรวมสแน็ปช็อตของอุปกรณ์บล็อกกลับเข้าไปในอุปกรณ์ดั้งเดิมของสแน็ปช็อต" kernel.org/doc/Documentation/device-mapper/snapshot.txt
imz - Ivan Zakharyaschev

พารามิเตอร์ chunksize ของเป้าหมาย snapshot (8 ในกรณีของคุณ) หมายถึงอะไร วิธีการเลือก
imz - Ivan Zakharyaschev

1
@Tom ตัวเลขเหล่านั้นในตาราง DM มักอ้างถึง 512 ไบต์ไม่ใช่ขนาดเซกเตอร์กายภาพของอุปกรณ์บล็อกพื้นฐาน ดังนั้นการใช้บางสิ่งที่ไม่ใช่สแนปชอต 8 อันบนอุปกรณ์ที่มีเซ็กเตอร์ 4K จะเป็นความคิดที่ไม่ดี
Stéphane Chazelas

1
@Tom, chunksize กำหนดความละเอียดของภาพรวม มันไม่ได้เกี่ยวกับขนาดของ FS สำหรับไฟล์โอเวอร์เลย์ แต่การทำงานของ I / O ที่เกิดขึ้นกับสิ่งที่อยู่บนอุปกรณ์บล็อก ดังนั้นการย้อนกลับ ขอบคุณสำหรับ getsz vs getsize
Stéphane Chazelas
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.