Mountにはオプションoffset
があり、ファイルシステムがデバイスの最初から開始するのではなく、特定のバイト数後に開始するように指定します。どうすればresize2fs
、そのオプションがない、デバイスの最初から開始しないようなファイルシステムのサイズを変更するには?
offset
のmount
オプションは、直接マウントするために渡されるのではなく、下にあるブロックデバイスのオフセットされた場所を参照するループデバイスをセットアップするlosetup
に渡されます。次に、Mountは、rawブロックデバイス自体ではなく、そのループデバイスで操作を実行します。
losetup
を使用して、次のようなファイルシステムをresize2fs
で再生することもできます。
# losetup --offset=<offset> --find --show /dev/<device>
/dev/loop0
# resize2fs /dev/loop0 <newsize>
# losetup --detach /dev/loop0
(resize2fs操作では例が完全でない場合があります)
losetup
は、--find
が渡されたときに、最初のフリーループデバイス(この例では/ dev/loop0)を検索します。 --show
はそのループデバイスをSTDOUTに出力します。
ブロックデバイスの先頭の空き領域からext4ファイルシステムを拡張する前に、他の人がどのようにそれを行ったかを確認するために検索を実行しました。あなたの質問は私が見つけた最も近いもののようです。しかし、提供された答えは、あなたが尋ねた、または私が必要としていたものとは正確には異なります。ディスクの最初からサイズ変更/拡張に成功したばかりなので、自分の考えを共有することにしました。
簡単に言うと、手順:1。)拡張/拡張するファイルシステム:1026048セクターで始まり、ブロックデバイスの最後で終わるパーティション上のext4ファイルシステム(私の場合は/dev/sdb
)2。)割り当てるこのファイルシステムのブロックデバイスの先頭にある未使用のセクターでは、dd
を使用してデータを将来/新しいパーティションの先頭に移動する必要がありました。3。)古いパーティションを削除し、新しいパーティションで再作成します。セクター4。)resize2fs
新しいパーティションサイズに拡張する
使用されるコマンドとメソッドの詳細:
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
(上記の情報はfdisk -l /dev/sdb
によって明らかにされました。)
dd
シークとスキップオフセットとbs
を計算します(この場合、bs
はセクターサイズと一致します):
# dd seek=2048 skip=1026048 if=/dev/sdb bs=512 of=/dev/sdb
したがって、データをセクター1026048以降に移動して、新しいパーティションが開始されるセクター2048から開始します。入力から読み取るほど、さらに取得するため、何も失うことはないはずです。したがって、出力で上書きを開始するまでに(最終的にはセクター1026048に到達します)、そこにあったものをコピーします。デバイスの先頭に移動します。
次に、fdisk
を使用して古いパーティションを削除し、セクター2048から開始するように再作成します。
それが完了したら、次を実行できます。
# partprobe /dev/sdb or
# blockdev --rereadpt /dev/sdb
# resize2fs /dev/sdb<num>
ファイルシステムを拡張します。
そのような低レベルの手順を実行する前に、必ずデータのバックアップを作成してください。一部の手順で障害が発生したり、システムがクラッシュしたり、電源障害が発生したりすると、データが失われます。これは、ブロックデバイス上の単一のパーティションを説明する例です。設定が異なる場合がありますので、そのまま使用しないでください。それがどのように機能するかを学び、理解してからテストし、期待される結果が得られたら、自己責任でライブデータを実行してください!
それが他の人にも役立つことを願っています。フィードバックと、どこを改善/より冗長にするかは大歓迎です。
ありがとうございました!