Ahududu Pi Linux dağıtım görüntüsünü nasıl monte edebilirim?


37

Normal dosya sistemi görüntüleri kolayca monte edilebilir:

mount system.img /mnt

İncelendi ve değiştirildi. Ancak bunu bir Raspberry Pi sistem görüntüsü ile denediğimde (örneğin, raspbian), alıyorum:

mount: unknown filesystem type '(null)'

Ne denersem deneyeyim -t, işe yaramayacak. Bu resmi nasıl monte edebilirim?


Yanıtlar:


71

Bu soru, diğer sorulara verilen cevabın bir parçası olarak cevaplandırılmıştır, ancak burada kanonik tedaviyi hak etmektedir, bu yüzden tekrarlanmaya devam etmesi gerekmez.

Görüntüyü bir bütün olarak bağlayamazsınız çünkü aslında iki bölüm ve bir önyükleme kesimi içerir. Ancak, dosyanın içindeki ofsetini biliyorsanız, ayrı bölümleri görüntüye monte edebilirsiniz. Bunları bulmak için, görüntüyü bir blok cihaz olarak inceleyin fdisk -l whatever.img. Çıktı şöyle bir tablo içermelidir:

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

Bunlar iki bölümdür. Birincisi "FAT32", diğeri "Linux" olarak etiketlenmiştir. Bu tablonun üstünde, cihazla ilgili olarak bir bütün olarak başka bilgiler de var:

Units: sectors of 1 * 512 = 512 bytes

Bu birim büyüklüğü Startbölüm bloğuyla çarparak ofseti byte olarak bulabiliriz :

  • 1. bölüm 512 * 8192 = 4194304
  • 2. bölüm 512 * 122880 = 62914560

Bunlar komut offsetseçeneğiyle birlikte kullanılabilir mount. Ayrıca her bölümün türü hakkında bir ipucumuz var fdisk. Öyleyse, dizinlerimiz olduğunu /mnt/img/oneve /mnt/img/twobağlama noktaları olarak bulunduğunu varsayalım :

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

Burada bir "çakışan döngü" hatası mountalırsanız , sürümünüz , boyut ve birinci bölümün ofsetini belirtmenizi gerektirir. Çıkarın ve blok sayısını kullanın (57344) * 512 (= 29360128):

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

İkinci bölüm, görüntüden sonra hiçbir şey olmadığından bir büyüklüğe ihtiyaç duymaz.

Şimdi iki bölüme erişebilirsiniz. İçlerindeki hiçbir şeyi değiştirmeyi düşünmüyorsanız, -r(salt okunur) anahtarını da kullanın. Herhangi bir şeyi değiştirirseniz, bu değişiklikler .imgdosyaya dahil edilir .

/bootSistem çalışırken ilk bölümün muhtemelen ikinci bölüme monte edildiğini unutmayın .


12
kpartx sizin için daha da kolaylaştıracaktır: kpartx -a whatever.imgdaha sonra istediği zaman monte edebileceğiniz uygun (loop) düğümleri yapar. kpartx -d whatever.img(Bağlantısız) döngü düğümlerini silmek için çalıştırın .


Kök ve önyükleme bölümü aynı anda nasıl monte edilir: unix.stackexchange.com/q/342463/9689 ?
Grzegorz Wierzowiecki

1
PS Biri her iki bölümü de aynı anda monte etmek istiyorsa, "üst üste binme" hatasını önlemek için, sizelimitseçeneğin bulunduğu bölümün boyutunu belirtmeniz yeterlidir. Daha fazla bilgi için: unix.stackexchange.com/a/342466/9689 . (Btw. Yukarıdaki cevap, bu seçeneğin örnek kullanımını sağlamak için güncellenebilir)
Grzegorz Wierzowiecki

2
Aksine elle çarparak yerine, bash en Aritmetik Genişletme kullanabilirsiniz: $((8192*512)).
Ruslan

20

losetuparacılığıyla bölümleme sondası sağlar -P. Bunu kullanmak, Raspbian SD kart görüntüsü gibi tam disk görüntüsünün bölümlerini çok kolaylaştırır:

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

Bu insan hatası için daha az eğilimli görünüyor. Mount komutlarında etiketleri de kullanabilir miyim?
ctrl-alt-delor

1

İlk başta fdisk'i ayrıştırmak ve ofsetleri çıkarmak için awk / grep kullanıyordum, ancak daha sonra biraz karışık, lapa lapa ve anlamak zor olabilir. Bulduğum en kolay yöntem:

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}

Bu, sizin için bir temp-dir oluşturur, bir sonraki döngü aygıtını otomatik olarak atar ve onu sizin için p1ve p2bölümleme aygıtları olarak ayarlar ve önyüklemeyi ve kökü bağlar.

Ayrıca temizleme bölümünü bir çıkış tuzağına koyabilirsiniz, böylece bir şey başarısız olursa sarkan mount / dosyalar olmaz:

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

0

Fdisk -l, Arch linux üzerinde bloklar yerine sektörler gösteriyorsa ... "Örtüşen döngü hatası" durumunda blok sayısını bulmanın bir başka yolu, ofsetin birinci bölümün bayt cinsinden ikinci bölümden çıkarılmasıdır. ve ikiye bölün. Örneğin (62914560-4194304) / 2 = 29360128

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.