ฉันจะเมานต์อิมเมจ Rroberryberry Pi Linux ได้อย่างไร


37

ภาพระบบไฟล์ปกติสามารถติดตั้งได้อย่างง่ายดาย:

mount system.img /mnt

ตรวจสอบและแก้ไข แต่เมื่อฉันลองด้วยภาพระบบ Raspberry Pi (เช่น raspbian) ฉันจะได้รับ:

mount: unknown filesystem type '(null)'

และไม่ว่าฉันจะลองด้วย-tอะไรมันก็ใช้ไม่ได้ ฉันจะเมารูปนี้ได้อย่างไร


2
คำถามคู่ขนานสำหรับ MS Windows: raspberrypi.stackexchange.com/questions/28457/… ?
goldilocks

คำตอบ:


71

คำถามนี้มีคำตอบเป็นส่วนหนึ่งของคำตอบสำหรับคำถามอื่น ๆ แต่ควรได้รับการปฏิบัติที่เป็นที่ยอมรับดังนั้นจึงไม่จำเป็นต้องทำซ้ำ

คุณไม่สามารถเมานท์ภาพรวมได้เนื่องจากมันมีพาร์ติชั่นสองตัวและบูตเซกเตอร์ อย่างไรก็ตามคุณสามารถเมาต์แต่ละพาร์ติชั่นในรูปภาพได้ถ้าคุณรู้ว่าออฟเซ็ตภายในพาร์ติชั่นนั้น fdisk -l whatever.imgจะพบพวกเขาตรวจสอบภาพเป็นอุปกรณ์ป้องกันด้วย ผลลัพธ์ควรมีตารางดังนี้:

Device         Boot     Start       End  Blocks  Id System
whatever.img1            8192    122879   57344   c W95 FAT32 (LBA)
whatever.img2          122880   5785599 2831360  83 Linux

นี่คือสองพาร์ติชัน อันแรกมีชื่อว่า "FAT32" และอีกอันหนึ่ง "Linux" เหนือตารางนี้มีข้อมูลอื่น ๆ เกี่ยวกับอุปกรณ์โดยรวมรวมถึง:

Units: sectors of 1 * 512 = 512 bytes

เราสามารถหาออฟเซ็ตเป็นไบต์โดยการคูณขนาดหน่วยนี้ด้วยStartบล็อกของพาร์ติชัน:

  • พาร์ติชันที่ 1 512 * 8192 = 4194304
  • พาร์ติชั่นที่สอง 512 * 122880 = 62914560

สิ่งเหล่านี้สามารถใช้กับoffsetตัวเลือกของmountคำสั่ง เรายังมีเบาะแสเกี่ยวกับที่ประเภทfdiskของแต่ละพาร์ทิชันจาก ดังนั้นสมมติว่าเรามีไดเรกทอรี/mnt/img/oneและ/mnt/img/twoให้บริการเป็นจุดเชื่อมต่อ:

mount -v -o offset=4194304 -t vfat whatever.img /mnt/img/one
mount -v -o offset=62914560 -t ext4 whatever.img /mnt/img/two

หากคุณได้รับข้อผิดพลาด "ลูปที่ทับซ้อนกัน" ที่นี่เวอร์ชันของmountคุณต้องการให้คุณระบุขนาดรวมถึงออฟเซ็ตของพาร์ติชันแรก ถอนติดตั้งและใช้จำนวนบล็อก (57344) * 512 (= 29360128):

mount -v -o offset=4194304,sizelimit=29360128 \
    -t vfat whatever.img /mnt/img/one  

พาร์ติชั่นที่สองไม่ต้องการ sizelimit เนื่องจากไม่มีสิ่งใดอยู่ในอิมเมจ

ตอนนี้คุณสามารถเข้าถึงพาร์ติชั่นทั้งสองได้แล้ว หากคุณไม่ต้องการเปลี่ยนแปลงสิ่งใดในสิ่งเหล่านั้นให้ใช้-rสวิตช์ (อ่านอย่างเดียว) เช่นกัน หากคุณเปลี่ยนแปลงสิ่งใดการเปลี่ยนแปลงเหล่านั้นจะถูกรวมไว้ใน.imgไฟล์

โปรดทราบว่าอาจมีการติดตั้งพาร์ติชันแรกไว้/bootในพาร์ติชันที่สองเมื่อระบบกำลังทำงาน


12
kpartxทำให้มันง่ายยิ่งขึ้นสำหรับคุณ: kpartx -a whatever.imgสร้างโหนด (ลูป) ที่เหมาะสมซึ่งคุณสามารถเมานต์ได้ในภายหลัง รันkpartx -d whatever.imgเพื่อลบโหนดแบบวนซ้ำ

1
ที่คล้ายกัน: stackoverflow.com/a/1421075/544721
Grzegorz Wierzowiecki

วิธีเมาท์รูทและพาร์ติชั่นสำหรับเริ่มต้นพร้อมกัน: unix.stackexchange.com/q/342463/9689 ?
Grzegorz Wierzowiecki

1
ป.ล. ถ้าใครต้องการที่จะติดตั้งทั้งสองพาร์ติชันในเวลาเดียวกันเพื่อหลีกเลี่ยงข้อผิดพลาด "ทับซ้อน" เพียงระบุขนาดของพาร์ติชันพร้อมsizelimitตัวเลือก สำหรับข้อมูลเพิ่มเติม: unix.stackexchange.com/a/342466/9689 (คำตอบ Btw. ข้างต้นอาจมีการปรับปรุงเพื่อให้ตัวอย่างการใช้งานของตัวเลือกนั้น)
Grzegorz Wierzowiecki

2
$((8192*512))แทนที่จะคูณด้วยตนเองคุณสามารถใช้การขยายตัวของเลขคณิตทุบตี:
Ruslan

20

losetup-Pให้พาร์ทิชันละเอียดผ่าน การใช้สิ่งนี้ทำให้การติดตั้งพาร์ติชั่นของดิสก์อิมเมจเต็มรูปแบบเช่นภาพการ์ด Raspbian SD ง่ายมาก:

losetup -P /dev/loop0 raspbian.img
mount /dev/loop0p2 /mnt
mount /dev/loop0p1 /mnt/boot

ดูเหมือนว่าจะเกิดข้อผิดพลาดน้อยลง ฉันสามารถใช้ป้ายกำกับในคำสั่ง mount ได้หรือไม่
ctrl-alt-delor

1

ในตอนแรกฉันใช้ awk / grep เพื่อแยกวิเคราะห์ fdisk และดึง offsets ออก แต่พบว่ามันอาจจะซับซ้อนเล็กน้อยและยากที่จะเข้าใจในภายหลัง วิธีที่ง่ายที่สุดที่ฉันพบ:

IMAGE_FILE="YOUR IMAGE FILE GOES HERE"
TMP=$(mktemp -d)
LOOP=$(sudo losetup --show -fP "${IMAGE_FILE}")
sudo mount ${LOOP}p2 $TMP
sudo mount ${LOOP}p1 $TMP/boot/

# do stuff to ${TMP}/ which is rpi filesystem

# cleanup
umount ${TMP}/boot/
umount ${TMP}
rmdir ${TMP}

นี้จะสร้างชั่วคราว dir สำหรับคุณอัตโนมัติกำหนดห่วงอุปกรณ์ต่อไปและชุดขึ้นสำหรับคุณเป็นp1และp2พาร์ทิชันอุปกรณ์และบูตม้าและราก

คุณยังสามารถใส่ส่วนการล้างข้อมูลใน exit-trap ดังนั้นหากสิ่งที่ล้มเหลวคุณจะไม่ต้องเมานท์ / ไฟล์ที่ห้อยอยู่:

set -e
function cleanup {
  sudo umount -f $TMP/boot/
  sudo umount -f $TMP
  rmdir $TMP
}
trap cleanup EXIT

0

ในกรณีที่ fdisk -l ปรากฏขึ้นพร้อมกับเซ็กเตอร์แทนที่จะบล็อกบน Arch linux ... อีกวิธีในการค้นหาจำนวนบล็อกในกรณีที่ "ข้อผิดพลาดของลูปซ้อนทับกัน" คือการลบออฟเซ็ตเป็นไบต์ของพาร์ติชันแรกจากพาร์ติชันที่สอง และหารด้วยสอง ตัวอย่างเช่น (62914560-4194304) / 2 = 29360128

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