web-dev-qa-db-ja.com

ext4パーティションの縮小:fdiskは、同じ開始ブロックでパーティションを再作成することを許可しません

前回パーティションを縮小したときは、同じ開始セクターからパーティションを削除して再作成するのと同じくらい簡単でした。ただし、今回は、fdiskはセクター63からパーティションを再作成することを許可せず、最小で2048を強制します。

私はヘッドレスサーバーで作業しており、GUIであるため、gpartedはオプションではないことに注意してください。

  • なぜfdiskからこの動作が発生するのですか?
  • 2048を使用するとデータが失われますか?
  • パーティションを縮小するための回避策または解決策はありますか?

root@ubuntulive:~# fdisk -u=sectors /dev/sda

Command (m for help): p

Disk /dev/sda: 160.0 GB, 160041885696 bytes
255 heads, 63 sectors/track, 19457 cylinders, total 312581808 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
Disk identifier: 0x0ab2afe6

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *          63   104872319    52436128+  83  Linux
/dev/sda2       104872320   113274314     4200997+  83  Linux
/dev/sda3       113274315   312576704    99651195   83  Linux

Command (m for help): d
Partition number (1-4): 1

Command (m for help): n
Partition type:
   p   primary (2 primary, 0 extended, 2 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-312581807, default 2048): 63
Value out of range.
First sector (2048-312581807, default 2048):  
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-104872319, default 104872319): 52436159

Command (m for help): p

Disk /dev/sda: 160.0 GB, 160041885696 bytes
255 heads, 63 sectors/track, 19457 cylinders, total 312581808 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
Disk identifier: 0x0ab2afe6

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1            2048    52436159    26217056   83  Linux
/dev/sda2       104872320   113274314     4200997+  83  Linux
/dev/sda3       113274315   312576704    99651195   83  Linux
2
jpic

なぜfdiskからこの動作が発生するのですか?

一部のハードドライブモデルでのパフォーマンス

2048を使用するとデータが失われますか?

ルートパーティションの場合は とにかく起動できないはずです

パーティションを縮小するための回避策または解決策はありますか?

Fdiskの代わりにpartedを使用してください。 fdiskとは異なり、parted write change on the fly

(parted) p                                                                
Model: ATA Hitachi HTS72501 (scsi)
Disk /dev/sda: 160041885696B
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start         End            Size           Type     File system     Flags
 1      32256B        53694627839B   53694595584B   primary  ext4            boot
 2      53694627840B  57996449279B   4301821440B    primary  linux-swap(v1)
 3      57996449280B  160039272959B  102042823680B  primary  xfs

(parted) rm 1
(parted) mkpart primary 32256B 28998224639B                               
Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel? Ignore                                                     
(parted) p                                                                
Model: ATA Hitachi HTS72501 (scsi)
Disk /dev/sda: 160041885696B
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start         End            Size           Type     File system     Flags
 1      32256B        28998224895B   28998192640B   primary  ext4
 2      53694627840B  57996449279B   4301821440B    primary  linux-swap(v1)
 3      57996449280B  160039272959B  102042823680B  primary  xfs

警告!!

Ext4はそれほど断片化しないと思ったので(実際、非連続ブロックは0.1%しかありませんでした)、resize2fsは実行しませんでした。

最初はそれを実行しましたが、/ dev/sda1を再度マウントできませんでした。 (大笑いした後)パーティションを初期サイズで再作成し、e2fsckを実行して、resize2fsを実行することにしました。その後、別れを試みましたが、機能しました。

物理データを変更するのではなく、parted/fdiskを使用してパーティションテーブルを編集しているだけであることを忘れないでください。

これはヘッドレスサーバーです。再起動後、pingは実行されません。起動時のfsckが中断される可能性があるため、レスキューモードで再起動しないことにしました。そのため、スリープ状態になりました。翌朝、サーバーがバックアップされているのを見つけました。

1
jpic

パーティションを縮小するための[…]ソリューションはありますか?

デフォルトの開始セクター(2048)と適切な終了セクターを使用してパーティションを再作成します。この変更は、パーティションテーブルを作成するまで保留されているため、まだ63でなくてもかまいません。次に、コマンドxを与えます。

x   extra functionality (experts only)

mは(とりわけ)印刷します:

b   move beginning of data in a partition

bを使用すると、63を入力できます。 rでメインメニューに戻ります。この時点で、pは開始セクターとして63を表示するはずです。すべてが正常に見える場合は、wを使用して変更をディスクに書き込みます。

1

GPartedを使用して、ファイルシステムとパーティションのサイズを同時に変更できます。 IMHO、ヒューマンエラーが忍び寄る余地が少ないため、一般的にはこれが最善の解決策です。ただし、GPartedでMiBアライメントを使用する場合(使用しない場合でも)、シフトしようとする可能性が高いことに注意してください。セクター2048へのパーティションの開始。これにより、多くの余分なデータ移動が発生し、時間とリスクが伴います。 OTOH、これはブートディスクであり、新しいバージョンのGRUB)をインストールする場合に望ましい場合があります。一部のバージョンでは、MBRの後に、現在の62セクターよりも多くのスペースが必要になります。 。(ただし、現在のディスクでは、古いGRUBまたはLILOを引き続き使用できます。)

fdiskを使用して実行する必要がある場合は、古いディストリビューション(または少なくとも古いバージョンのfdisk)を使用してみてください。新しいバージョンのfdiskは、使用したいほど小さい開始セクターを指定する方法を提供していないようですが、それは完全に合法であり、最近まで(Linuxの場合は2〜3年前)標準でした。 WindowsまでXP Windowsの場合)。ただし、古いバージョンのfdiskはデフォルトで架空の「シリンダー」値を使用していました。これらの値は不正確であり、 fdiskの断片的な変更は、特定の中間バージョンで期待する動作が得られない可能性があることを意味します。

0
Rod Smith

また、元のスターティングブロックを保持できないという問題もありました。 cfdiskを使用しました。 cfdiskは、fdiskよりも正しく、はるかに簡単に実行できます。 「サイズ変更」を選択して、ディスク容量を入力するだけです。そして、構成に満足したら「書き込み」を行います。それでおしまい!ご覧のとおり、その場で書くというデメリットはありません。

0
ffonz