Qt、qwt、およびRPIをオーバークロックしてコンパイルおよびインストールする方法に関する投稿のコマンド こちら を勉強しています。==
Sudo mount -o loop,offset=62914560
<date>-wheezy-raspbian.img /mnt/rasp-pi-rootfs
私がやります fdisk 2016-02-26-raspbian-jessie.img
と私は
Disk: 2016-02-26-raspbian-jessie.img geometry: 976/128/63 [7870464 sectors]
Signature: 0xAA55
Starting Ending
#: id cyl hd sec - cyl hd sec [ start - size]
------------------------------------------------------------------------
1: 0C 0 130 3 - 8 40 32 [ 8192 - 122880] Win95 FAT32L
2: 83 8 40 33 - 489 232 63 [ 131072 - 7739392] Linux files*
3: 00 0 0 0 - 0 0 0 [ 0 - 0] unused
4: 00 0 0 0 - 0 0 0 [ 0 - 0] unused
マウントでオフセットが特定されるのはなぜですか?
62914560はファイルに正確に60MiBをポイントしているので、ラスピアンディスクイメージが実際にパーティション分割されていると思います。オフセットは、mount
(または実際にはlosetup
)に、rootファイルシステムの実際のオフセットを通知します(これは2つのパーティションの2番目で、最初のパーティションが最も-おそらく/boot
またはブートローダー/ファームウェアファイル)。
ここでの問題は、loop
ドライバーが実際にパーティション化されたイメージをサポートしている場合でも、loop
デバイスあたりの最大パーティション数を、モジュールのロード時に(またはカーネルコマンドラインで)モジュールパラメーターとして指定する必要があることです。デフォルトではこれを行わないディストリビューションがたくさんあるので、loop
がデフォルトのパラメーター(0であるため、パーティションのサポートがない)を使用する場合、...,offset=XXX
はパーティション化されたイメージに対処する最も信頼できる方法です。
/sys/module/loop/parameters/max_part
を調べることにより、loop
ドライバーにパーティションサポートが読み込まれているかどうかをテストできます。現在のシステム(ArchLinux)では、パラメーターなしでloop
をロードした後、次のようになります。
$ cat /sys/module/loop/parameters/max_part
0
パーティショニングサポートを有効にするには、loop
をアンロードし、max_part
オプションに必要な値を指定して再度ロードする必要があります。
# modprobe -r loop
# modprobe loop max_part=8
この後、次のようにして、イメージのループデバイスを手動で設定してみることができます
# losetup /dev/loop0 /path/to/<date>-wheezy-raspbian.img
これで、イメージ全体を表す/dev/loop0
が表示されるだけでなく、(私の理論が正しい限り;)内のすべてのパーティションに対して/dev/loop0p1
、/dev/loop0p2
などもあるはずです。画像。
編集:
これを退屈な方法で自分で行いたい場合(正しいmax_part
オプションを指定してloop
をリロードし、パーティションを使用するだけをお勧めします)、画像でfdisk
を直接使用して、必要なオフセットを見つけることができますファイル(手元にあるのでArchLinux ISOで表示されますが、考え方は同じです):
$ fdisk -l archlinux-2016.03.01-dual.iso
Disk archlinux-2016.03.01-dual.iso: 268.3 MiB, 281339392 bytes, 549491 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x2237702c
Device Boot Start End Sectors Size Id Type
archlinux-2016.03.01-dual.iso1 * 0 1452031 1452032 709M 0 Empty
archlinux-2016.03.01-dual.iso2 172 63659 63488 31M ef EFI (FAT-12/16/32)
2番目のパーティションは、セクターサイズ512バイトのセクター172から始まります。両方の値を乗算すると、オフセットがバイト単位で得られます。したがって、パーティションをマウントするには、次を使用します。
# mount -o loop,offset=$((172*512)) archlinux-2016.03.01-dual.iso /mnt
# ls -l /mnt
total 4
drwxr-xr-x 4 root root 2048 Mar 1 15:49 EFI
drwxr-xr-x 3 root root 2048 Mar 1 15:49 loader
出来上がり。
「losetup」のmanページに従って。
-o、--offset offsetデータの開始は、指定されたファイルまたはデバイスにoffsetバイト移動されます。
例えばデバイスの "dd"がある場合は、offsetオプションを使用して、任意のデバイスのパーティションをマウントできます。
このオフセット値は、パーティションの開始値にセクターサイズを掛けて計算されます。
例えば.
SHW@SHW:/tmp # fdisk -lu 040614.dd
Disk 040614.dd: 1.9 GiB, 2048385024 bytes, 4000752 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x5324798e
Device Boot Start End Sectors Size Id Type
040614.dd1 * 2048 30719 28672 14M 83 Linux
040614.dd2 30720 1054719 1024000 500M 83 Linux
040614.dd3 1054720 1095679 40960 20M 83 Linux
SHW@SHW:/tmp # mount -o loop,offset=`echo 1054720 \* 512|bc` 040614.dd1 /mnt/loop
更新:
040614.ddは次のコマンドで作成されます:
SHW@SHW:/tmp # fdisk -l /dev/sdb
Disk /dev/sdb: 1.9 GiB, 2048385024 bytes, 4000752 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x5324798e
Device Boot Start End Sectors Size Id Type
/dev/sdb1 * 2048 30719 28672 14M 83 Linux
/dev/sdb2 30720 1054719 1024000 500M 83 Linux
/dev/sdb3 1054720 1095679 40960 20M 83 Linux
SHW@SHW:/tmp # dd if=/dev/sdb of=040614.dd