การจัดการพื้นที่ผู้ใช้ของพาร์ติชันและดิสก์อิมเมจ


4

บนระบบ Linux เป็นไปได้หรือไม่ที่จะใช้เฉพาะเครื่องมือพื้นที่ผู้ใช้ในการสร้างและจัดการอิมเมจพาร์ติชัน (ซึ่งอาจจะมีระบบไฟล์ ext2 อยู่บนภาพเหล่านั้น) จากนั้นจึงนำอิมเมจพาร์ติชันเหล่านั้นมาสร้างอิมเมจดิสก์

ฉันสามารถใช้ genext2fs เพื่อสร้างภาพของระบบไฟล์ ext2 ใน userspace แต่ฉันไม่พบเครื่องมือใด ๆ ที่สามารถจัดการภาพดิสก์ (เช่นการสร้างตารางพาร์ติชันหรือสร้างภาพดิสก์จากอิมเมจพาร์ติชันที่มีอยู่เป็นต้น) โดยไม่จำเป็นต้องเข้าถึงรูท ขณะนี้ฉันกำลังใช้ kpartx เพื่อติดตั้งพาร์ทิชันภายในดิสก์อิมเมจ แต่เนื่องจากต้องใช้รูทจึงไม่เหมาะสำหรับการสร้างสคริปต์และหากมีข้อผิดพลาดในสคริปต์การสร้างที่ไม่ติดกับอุปกรณ์ mapper ก็ยังคงใช้งาน

โดยทั่วไปฉันมีสามไดเรกทอรีและฉันต้องการให้แต่ละไดเรกทอรีเป็นพาร์ติชันบนดิสก์อิมเมจ แต่ฉันต้องการสคริปต์นี้และฉันไม่ต้องการใช้เครื่องมือใด ๆ ที่ต้องการเข้าถึงรูท กระบวนการที่จำเป็นต้องมีการเข้าถึงรูทอย่างแน่นอน)

คำตอบ:


4

การสร้างพาร์ติชัน

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

parted -s testing.img mklabel gpt
parted -s -a none testing.img mkpart ESP fat32 0 4M
parted -s -a none testing.img mkpart linux ext4 4M 10M

การสร้างระบบไฟล์

ฉันไม่มีโซลูชันที่สะอาดในการเมานต์หรือสร้างระบบไฟล์ในพาร์ติชันเสมือน สิ่งที่ถูกต้องที่ควรทำคือ fuse ไดรเวอร์ (ระบบไฟล์ใน Userspace) สำหรับตารางพาร์ติชัน แต่ฉันไม่ได้พบหนึ่งในขณะนี้

อย่างไรก็ตาม mke2fs สามารถใช้ -E offset=1234 ตัวเลือกในการสร้าง ext2, ext3 หรือ ext4 ระบบไฟล์ที่ออฟเซ็ตโดยพลการภายในไฟล์ คุณสามารถให้ออฟเซ็ตพาร์ติชันของคุณได้ อย่างไรก็ตามให้แน่ใจว่าได้กำหนดขนาดของระบบไฟล์ด้วยเนื่องจากพฤติกรรมเริ่มต้นดูเหมือนจะเป็นบั๊กและเขียนระบบไฟล์ด้วยขนาดของดิสก์เสมือนโดยค่าเริ่มต้นขยายไฟล์หากจำเป็น

mke2fs -E offset=4000256 testing.img 6316k

น่าเสียดายที่ไม่ใช่ทั้งหมด mkfs มีตัวเลือกดังกล่าว mkfs.vfat ไม่ ดังนั้นวิธีการแก้ปัญหาอื่นสามารถสร้างไฟล์แยกขนาดของพาร์ติชันใช้ mkfs กับมันแล้วใช้ dd เพื่อคัดลอกเนื้อหาลงในดิสก์เสมือนเต็ม

dd if=testing.img of=testing.fat32.img bs=512 skip=34 count=7779
mkfs -t vfat testing.fat32.img
dd if=testing.fat32.img of=testing.img bs=512 seek=34 count=7779 conv=notrunc

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

ติดตั้งระบบไฟล์

คุณสามารถต่อเชื่อมระบบไฟล์ในพาร์ติชั่นได้ด้วยความช่วยเหลือของ fuse หากมีการสนับสนุนสำหรับระบบไฟล์ของคุณ มีการสนับสนุนมาตรฐานสำหรับ ext ระบบไฟล์ภายใต้ชื่อ fuse-ext2 และหนึ่งสำหรับ FAT ภายใต้ชื่อ fusefat. น่าเสียดายที่พวกเขาไม่ได้รับ offset ตัวเลือกในขณะนี้ ดังนั้นฉันเดาว่าคุณจะต้องใช้ mount หรือเหมือนกัน dd หลอกลวงเหมือนก่อนหน้านี้

วิธีการมาตรฐานด้วย partx หรือ kpartx, หรือ -o offset ตัวเลือกของ mount ) ต้องใช้สิทธิ์รูท dd การแก้ปัญหาช้าซับซ้อนและแจ้งข้อผิดพลาด

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