virt-make-fs
จากqcow2
ตัวอย่างlibguestfs
https://serverfault.com/a/332114/163884พูดถึง แต่นี่คือตัวอย่างเต็มรูปแบบ:
sudo apt-get install libguestfs-tools
# Workarounds for Ubuntu 18.04 bugs. See section below.
sudo rm -rf /var/cache/.guestfs-*
echo dash | sudo tee /usr/lib/x86_64-linux-gnu/guestfs/supermin.d/zz-dash-packages
sudo chmod +r /boot/vmlinuz-*
mkdir sysroot
# Just a test file.
dd if=/dev/urandom of=sysroot/myfile bs=1024 count=1024
virt-make-fs --format=qcow2 --type=ext2 sysroot sysroot.ext2.qcow2
โปรดทราบวิธีsudo
ไม่จำเป็นต้องใช้ยกเว้นการติดตั้งและการแก้ไขข้อบกพร่องของ Ubuntu
ฉันยืนยันแล้วว่า QEMU สามารถอ่านได้ด้วย:
qemu-system-x86_64 -drive file=sysroot.ext2.qcow2,format=qcow2,if=virtio,snapshot ...
ฉันสามารถเมานต์รูปภาพภายใน QEMU Linux และอ่านไฟล์ได้
virt-make-fs
ต่อตัวอย่าง
เครื่องมือที่ยอดเยี่ยมนี้ยังสามารถสร้างระบบไฟล์ raw ext เช่น:
virt-make-fs --format=raw --type=ext2 sysroot sysroot.ext2
virt-make-fs --format=raw --type=ext4 sysroot sysroot.ext4
ซึ่งเราสามารถตรวจสอบโดยตรงกับโฮสต์ด้วย:
mkdir -p mnt
dev="$(sudo losetup --show -f -P sysroot.ext4)"
sudo mount -o loop "$dev" mnt
cmp sysroot/myfile mnt/myfile
ย่อขนาดรูปภาพ
คุณสมบัติที่ดีจริงๆvirt-make-fs
คือพยายามลดขนาดภาพโดยอัตโนมัติหากเป็นสิ่งที่เราต้องการ:
ค่าเริ่มต้น Virt-make-fs เพื่อลดพื้นที่ว่างให้น้อยที่สุด แต่คุณสามารถใช้ --size flag เพื่อเว้นช่องว่างในระบบไฟล์ได้หากคุณต้องการ
ดังนั้น:
df -h
บอกฉันว่าภาพเต็ม 82%:
/dev/loop17 1.5M 1.1M 244K 82% /home/ciro/test/guestfs/mnt
เราสามารถเพิ่มพื้นที่พิเศษได้อย่างง่ายดายด้วย--size-=+
:
virt-make-fs --format=raw --size=+8M --type=ext2 sysroot sysroot.ext2
ค่าใช้จ่ายในวารสาร ext4
คู่มือยังกล่าวถึง:
โปรดทราบว่าระบบไฟล์ ext3 มีวารสารที่มีขนาด 1-32 MB หากคุณไม่ต้องการใช้ระบบไฟล์ในแบบที่ต้องการบันทึกประจำวันนี่จะเป็นการสิ้นเปลืองค่าใช้จ่าย
และเป็นที่น่าสนใจในการตรวจสอบด้วย:
du -bs *
ซึ่งผลิต:
1052672 sysroot
1446297 sysroot.ext2
2599731 sysroot.ext4
ดังนั้นเราจึงเห็นว่า ext4 ออกมาใหญ่กว่าอย่างมาก
libguestfs ข้อบกพร่องของ Ubuntu
ตอนนี้ข้อเสีย: ดูเหมือนจะไม่มีผู้ดูแล Ubuntu ในปัจจุบันและโดยทั่วไปแล้วห้องสมุดมักจะบั๊กกี้บน Ubuntu
sudo
ไม่ได้อยู่ในทฤษฎีที่จำเป็น แต่มันเป็นสิ่งจำเป็นเนื่องจากข้อผิดพลาดบรรจุภัณฑ์ Ubuntu เว้นแต่ว่าเราจะแก้ปัญหา: /ubuntu/1046828/how-to-run-libguestfs-tools-tools-tools-tools-tools-tools-tools-tools-tools-such-as- virt-ทำให้ FS-โดยไม่ต้อง sudo / 1046829 # 1046829
libguestfs: error: /usr/bin/supermin exited with error status 1.
To see full error messages you may need to enable debugging.
Do:
export LIBGUESTFS_DEBUG=1 LIBGUESTFS_TRACE=1
and run the command again. For further information, read:
http://libguestfs.org/guestfs-faq.1.html#debugging-libguestfs
You can also run 'libguestfs-test-tool' and post the *complete* output
into a bug report or message to the libguestfs mailing list.
libguestfs: error: /usr/bin/supermin exited with error status 1.
หลังจากนั้นหากไม่มีวิธีแก้ไขปัญหาของเรา 18.04 (แต่ไม่ใช่ 16.04) จะล้มเหลวด้วย: https://bugzilla.redhat.com/show_bug.cgi?id=1591617
libguestfs: error: tar_in: write error on directory: /:
เนื่องจากข้อผิดพลาดที่ได้รับการแก้ไขแล้วต้นน้ำ
ทดสอบใน Ubuntu 18.04, libguestfs-tools 1: 1.36.13-1ubuntu3, QEMU 1: 2.11 + dfsg-1ubuntu7.3
qemu-img
และfallocate
สะดวกกว่าdd
เล็กน้อย