ループインストールで特定のオフセットが必要なのはなぜですか? [コピー]

ループインストールで特定のオフセットが必要なのはなぜですか? [コピー]

コマンドを実行しています。ここに関する投稿から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       

マウントのオフセットがなぜ特定されますか?

ベストアンサー1

62914560はファイル内の正確に60MiBを指しているため、Raspianディスクイメージが実際に分割されていると推測できます。 offsetは実際のオフセットを知らせますmount(または実際に実行します)。losetupファイルシステム(私はこれが2つのパーティションのうちの2番目であることを示唆しています。最初のものは/bootブートローダ/ファームウェアファイルである可能性が高いです)。

ここでの問題は、loopドライバが実際にパーティションイメージをサポートしていても、モジュールをロードするとき(またはカーネルコマンドラインから)デバイスあたりの最大パーティション数をモジュールパラメータとして指定する必要があることですloop。デフォルトではこれを実行しないディストリビューションが多いため、これはデフォルトのパラメータ...,offset=XXX(ゼロなので分割がサポートされていない)を使用するときに分割画像を処理する最も信頼性の高い方法です。loop

loopドライバを見ると、ドライバにパ​​ーティションサポートがロードされているかどうかをテストできます/sys/module/loop/parameters/max_part。現在のシステム(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/loop0p2losetupはい)。

編集する:

この作業を退屈な方法で直接実行するには(loop正しいmax_partオプションを使用して再ロードして単にパーティションを使用することをお勧めします)、イメージ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番目のパーティションはセクタ172で始まり、セクタサイズは512バイトです。 2 つの値を掛けるとバイト単位のオフセットが得られるので、パーティションをマウントするには次のようにします。

# 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

望むより。

おすすめ記事