วิธีการเมานต์อิมเมจของดิสก์ที่บีบอัด


12

หากฉันสร้างดิสก์อิมเมจและบีบอัดด้วย gzip / xz / etc จะมีวิธีการติดตั้งโดยตรงโดยไม่ต้องคลายการบีบอัดหรือไม่?

บอกว่าฉันเคยใช้

sudo dd if=/dev/sdc1 | gzip -9 > image1.dd.gz

ฉันจะเมานต์ภาพต้นฉบับโดยไม่สร้างสำเนาที่ไม่บีบอัดได้อย่างไร

หรือฉันเคยใช้

sudo dd if=/dev/sdc | gzip -9 > wholedisk.dd.gz

และดิสก์มีหลายพาร์ติชันนั่นจะทำให้มันยากขึ้นหรือไม่?

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

แต่มีวิธีเมานต์ / losetup / อ่านอิมเมจที่ถูกบีบอัดหรือไม่?

หากมันใช้ไม่ได้กับ gzip / xz จะมีวิธีการบีบอัดแบบใดที่จะใช้งานได้?


หมายเหตุเกี่ยวกับคำถามที่ซ้ำกัน

สำเนาที่แนะนำในปัจจุบัน

ไม่ใช้การบีบอัดและไม่ได้เป็นซ้ำ

mount จะไม่เมานต์รูปภาพที่ถูกบีบอัดด้วยตัวเอง


ฉันสามารถบอกคุณได้ว่าเป็นไปได้อย่างแน่นอน แต่ฉันไม่สามารถบอกคุณได้ว่า ATM เป็นอย่างไรเพราะคำแนะนำอยู่บน HDD ภายนอก 2 ตัวและตอนนี้ฉันสามารถเข้าถึงได้ทั้งสองอย่าง แต่ฉันต้องการให้คุณรู้ว่ามันทำงานได้ ฉันจะกลับมาพร้อมคำตอบเมื่อฉันมีหนึ่ง (และไม่มีใครโพสต์จนกว่าจะมี)
UTF-8


1
@ UTF-8 ขอบคุณมาก FYI เป้าหมายดั้งเดิมคือการสำรองข้อมูลขนาดเล็กของไดรฟ์ / พาร์ติชันที่เกือบจะว่างเปล่าหรือมีข้อมูลที่บีบอัดได้ง่ายมากมายและสามารถอ่านได้โดยไม่ต้องเขียนข้อมูลเพิ่มเติมจำนวนมากหรือต้องการพื้นที่ว่างจำนวนมากในการแยก
Xen2050

ดูเพิ่มเติมที่สำคัญ. iOS/2010/
Panther

2
@ bodhi.zazen ให้อภัย? บางทีฉันควรจะชี้แจง, เมาต์ไม่บีบอัดภาพโดยอัตโนมัติดังนั้น Q นี้ไม่ซ้ำกับaskubuntu.com/questions/69363 (บางทีฉันพลาดเรื่องตลกหวังว่าการคลายการบีบอัดไม่ใช่คำตอบเดียว :)
Xen2050

คำตอบ:


10

คุณสามารถใช้squashfsในการบีบอัดภาพดิสก์แล้วติดตั้ง

สร้างภาพดิสก์

หากคุณยังไม่มีดิสก์อิมเมจใช้ddเพื่อสร้าง:

dd if=/dev/sda1 of=/tmp/sda1.img bs=4M

บีบอัดภาพด้วยสควอช

ติดตั้งsquashfs:

apt-get install squashfs-tools

บีบอัดภาพ:

mksquashfs /tmp/sda1.img /tmp/sda1.squash.img

หรือสตรีมการบีบอัด (ไม่จำเป็นต้องมีไฟล์ dd ชั่วคราว)

mkdir empty-dir
mksquashfs empty-dir squash.img -p 'sda_backup.img f 444 root root dd if=/dev/sda bs=4M'

ชมเชยการterminator14 ที่ UbuntuForums.org คำนิยาม / คำอธิบาย:

  • empty-dir- dir "source" โดยทั่วไปในกรณีของเรามีเพียงผบว่างเปล่าเพื่อตอบสนองรูปแบบอินพุตของ mksquashfs
  • squash.img - ปลายทางและชื่อไฟล์ของไฟล์เอาต์พุต squashfs
  • sda_backup.img - ชื่อของการสำรองข้อมูล dd ภายในไฟล์ squashfs
  • f - ระบุว่า sda_backup.img เป็นไฟล์ปกติ (ตรงข้ามกับไดเรกทอรีอุปกรณ์บล็อกหรืออุปกรณ์ถ่าน)
  • 444 - สิทธิ์ของไฟล์ sda_backup.img ภายในอิมเมจ squashfs
  • root root- UID และ GID สำหรับไฟล์ sda_backup.img ภายในอิมเมจ squashfs สามารถระบุได้ด้วยตัวเลขทศนิยมหรือตามชื่อ
  • dd if=/dev/sda bs=4M - คำสั่ง dd เคยอ่านอุปกรณ์ที่เราต้องการสำรองข้อมูล

เมานต์ภาพ

ก่อนอื่นให้เมานต์squashfsรูปภาพ:

mkdir /mnt/squash
mount /tmp/sda1.squash.img /mnt/squash

นี่จะแสดงอิมเมจของดิสก์ที่ไม่บีบอัดเพื่อให้คุณเมานต์:

mkdir /mnt/sda1
mount /mnt/squash/sda1.img /mnt/sda1

หรือถ้าเป็นภาพไดรฟ์เต็มรูปแบบ (แบ่งพาร์ติชัน) คุณสามารถใช้losetupเพื่อแนบภาพ dd ไปยังอุปกรณ์วนรอบ (อาจเป็นทางเลือก) และจากนั้นkpartx -aหรือpartprobeค้นหาและแยกพาร์ติชันไปยังอุปกรณ์ที่แยกต่างหากหรือแม้กระทั่งvgscan/ vgchange -ayถ้ามี LVM


2
ฉันเพิ่มข้อมูลสควอชแบบ on-the-fly บางส่วนเพื่อหลีกเลี่ยงการต้องการไฟล์ dd ธรรมดาชั่วคราว คำตอบที่ยอดเยี่ยมสำหรับสควอชไม่เพียงแค่ใช้รูปแบบ xz / gz ที่เป็นมิตรต่อท่อมากขึ้น
เท่านั้น

อย่างนั้นจะทำงานกับดิสก์อิมเมจแบบเต็มที่มีหลายพาร์ติชันด้วยหรือไม่
friederbluemle

ดูที่นี่สำหรับดิสก์เต็ม: unix.stackexchange.com/questions/31669/…
HackerBoss

การติดตั้งอาจต้องการro,noloadตัวเลือกดังนี้:mount -o ro,noload /mnt/squash/sda1.img /mnt/sda1
HackerBoss

7

ฉันสามารถรับเซิร์ฟเวอร์ NBD เพื่อ "แสดงผล" ไฟล์. gz หรือ. xz ที่ไม่บีบอัดได้ ฉันไม่แน่ใจว่าจะต้องอ่านไฟล์บีบอัดทั้งหมดบ่อยครั้งหรือไม่ (ทดสอบเฉพาะไฟล์ที่มีขนาดเล็กในหน่วยความจำ) แต่อย่างน้อยก็ใช้งานได้โดยไม่ต้องแตกไฟล์ที่ถูกบีบอัดทั้งหมด

ดู gz / xz บีบอัดภาพ dd "on-the-fly"

  1. ติดตั้ง nbdkit & ไคลเอ็นต์

    apt install nbdkit nbd-client
    
  2. สร้างไฟล์สไตล์การสาธิต "dd" - ไฟล์ 50M ว่างพร้อมระบบไฟล์ต่อ & zip (ตัวเลือกสำหรับการทดสอบเท่านั้น)

    fallocate -l 50M 50m
    mkfs.ext3 -v 50m
    

    จากนั้นบีบอัดด้วย gzip หรือ xz

    gzip -vk9 50m
    xz -v9k 50m
    

    หมายเหตุ: xzตัวเลือกที่--block-size=16MiBควรให้ประสิทธิภาพการเข้าถึงแบบสุ่มดีกว่า แต่มีค่าใช้จ่ายในการบีบอัดน้อยกว่า (อาจจะ 1%?) ดูรายละเอียดปลั๊กอิน nbdkit ของ XZ

  3. เรียกใช้เซิร์ฟเวอร์บนรูปภาพที่ถูกบีบอัด

    nbdkit -v --no-fork -i 127.0.0.1 /usr/lib/i386-linux-gnu/nbdkit/plugins/nbdkit-gzip-plugin.so file=~/Downloads/50m.gz
    

    หรือสำหรับ xz

    nbdkit -v --no-fork -i 127.0.0.1 /usr/lib/i386-linux-gnu/nbdkit/plugins/nbdkit-xz-plugin.so file=~/Downloads/50m.xz
    

    --no-forkบอกเซิร์ฟเวอร์"อย่าแยกเป็นพื้นหลัง"เพื่อให้เห็นข้อความผิดพลาดที่เป็นไปได้และฆ่ามันด้วยการกด Ctrl-C เป็นเล็ก ๆ น้อย ๆ ได้ง่ายขึ้น

    -v พฤษภาคม / จะแสดงข้อความสถานะมากเกินไปโดยเฉพาะเมื่ออ่าน

  4. เรียกใช้ไคลเอนต์ (ในเทอร์มินัล / หน้าต่างอื่น)

    sudo nbd-client -nofork 127.0.0.1 10809 /dev/nbd0
    

    -noforkคล้ายกับ-no-forkข้างต้น แต่ฉันจะไม่ฆ่าลูกค้าด้วยการกด Ctrl-C หรือkill <pid> sudo kill <pid>การสิ้นสุดเซิร์ฟเวอร์ด้วย CTRL-C หยุดทั้งเซิร์ฟเวอร์และไคลเอ็นต์

  5. สังเกตว่า/dev/nbd0ตอนนี้เหมือนกับภาพที่ไม่ถูกบีบอัด

    $ sudo diff -s /dev/nbd0 ~/Downloads/50m
    Files /dev/nbd0 and /home/user/Downloads/50m are identical
    

    /dev/nbd0สามารถใช้งานได้เหมือนกับภาพที่ไม่มีการบีบอัด ติดตั้งอ่าน / คัดลอกด้วยddหรือการใช้งานkpartx, partprobe, vgscan/ vgchangeฯลฯ !

ขอบคุณCristian Ciupitu บน Unix & Linuxแม้ว่าจะต้องใช้การขุดอีกเล็กน้อยเพื่อค้นหาปลั๊กอินและทำให้ทุกอย่างดำเนินไปด้วยกัน


ใน Fedora 31 nbdkit -v --no-fork -i 127.0.0.1 --filter=xz file ~/Downloads/50m.xzทำงานได้ยอดเยี่ยมด้วยคำสั่งไคลเอนต์เดียวกัน
EkriirkE

บน Ubuntu xenial 16.04 LTS nbdkit 1.1.11 ใช้โปรโตคอล NBD เก่าซึ่งแตกต่างจากโปรโตคอล NBD ใหม่ที่ใช้ในnbd-client 3.13แต่คุณสามารถใช้เวอร์ชันไคลเอนต์ nbd-3.10 ก่อน 3.10 เช่นnbd-client 3.8 from Ubuntu precise 12.04 old LTS[ใช้รุ่นเก่าเท่านั้นในท้องถิ่นเพื่อความปลอดภัย!]
user1742529

0

นี่คือวิธีของฉันในการทำมันไม่รู้ว่าเทียบเท่าคอนโซลนี้แม้ว่า

  • บีบอัดโฟลเดอร์ลงใน iso ป้อนคำอธิบายรูปภาพที่นี่
  • ติดไฟล์ที่มี .isoDisk Image Mounterป้อนคำอธิบายรูปภาพที่นี่
  • ธาดาฉันเปิด iso ที่ถูกบีบอัดโดยไม่เปิดออกมา ป้อนคำอธิบายรูปภาพที่นี่

4
วิธีนี้บีบอัดข้อมูลจริงหรือไม่ ดูเหมือนว่าจะใช้ภาพ iso9660 ธรรมดา (ผ่าน file-roller?) ซึ่งไม่ได้ใช้การบีบอัด ฉันลองมันในไฟล์ 100MB ของ zero ( dd if=/dev/zeroและ file-roller) ทั้งหมดและมันเพิ่มข้อมูล 362k (iso overhead ที่ฉันคิด) ขอบคุณแม้ว่าความคิดจะอยู่ในเส้นทางที่ถูกต้อง
Xen2050

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