web-dev-qa-db-ja.com

再起動せずに新しいfdiskテーブルを使用するにはどうすればよいですか(kpartx)?

Fdiskを実行してパーティションのサイズを変更すると、fdiskの出力の最後に次のように表示されます。

The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8)

再起動せずにそれを実行したいのですが(それを実行するスクリプトを記述します) kpartx を使用してこれを正しく行うにはどうすればよいですか?私はもう試した:

kpartx -f -v /dev/mmcblk0

どの出力:

mmcblk0p1 : 0 102400 /dev/mmcblk0 2048
mmcblk0p2 : 0 7657472 /dev/mmcblk0 104448

そして:

kpartx -a -v /dev/mmcblk0

出力:

device-mapper: reload ioctl on mmcblk0p1 failed: Invalid argument
create/reload failed on mmcblk0p1
add map mmcblk0p1 (0:0): 0 102400 linear /dev/mmcblk0 2048
device-mapper: reload ioctl on mmcblk0p2 failed: Invalid argument
create/reload failed on mmcblk0p2
add map mmcblk0p2 (0:0): 0 7657472 linear /dev/mmcblk0 104448

これは、Debianを実行しているraspiのSDカード用です。

編集:私がやろうとしていることを明確にするため。 SDカードから未使用のp3を削除し、p2のサイズを変更してカードを埋めます。カードには現在小さなブートパーティションp1が含まれており、p2はOSが置かれている場所です。

11
Octopus

あなたが欲しいpartx -ukpartxではありません(デバイスマッパーデバイスで動作します)。

7
psusi

@derobert(元の質問にコメントした人)はおそらく正しいと思います。現在使用されているパーティションをfdiskする場合、再起動するしか方法がないようです。

partprobeapt-get install partedで取得)を使用しても、次の出力が得られます。

Error: Partition(s) 2, 3 on /dev/mmcblk0 have been written, but we have 
been unable to inform the kernel of the change, probably because it/they 
are in use.  As a result, the old partition(s) will remain in use.  You 
should reboot now before making further changes.
6
Octopus

デバイスをアンマウントするのを忘れたため、この問題が発生していました。後:

Sudo umount /dev/sdb

fdiskは正しく動作しました。