MightyCraft

Linuxのパーテションをリサイズ (コマンドライン)

最近のメディアの大容量化、というより低価格化が進んでいます。

数年前のサーバーのストレージやメモリメディアと比較して数倍の容量で価格は数分の1になっています。

今回、Linuxのディスクを大容量ドライブにまるごとコピーし、パーテションのリサイズをコマンドラインで実施しました。

1.parted  をインストールします

https://www.gnu.org/software/parted/

パッケージでインストールするのが簡単です。

2.対象パーテションをアンマウントします

自動的にマウントされていましたのでアンマウントしておきます。

#umount /mnt

3.ドライブの状況を確認します。

全ドライブを確認するには、下記のコマンドで。

#fdidsk-l

対象のドライブは /dev/sda にマウントされているので指定します。

# fdisk -l /dev/sda
Disk /dev/sda: 196.9 GB, 196865949696 bytes
255 heads, 63 sectors/track, 23934 cylinders, total 384503808 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: 0x6c70c806
Device Boot Start End Blocks Id System
/dev/sda1 2048 43007 20480 83 Linux
/dev/sda2 43008 3970047 1963520 83 Linux
#

/dev/sda2の2GB弱のパーテションを拡張します。

4.gpartedを起動して空きスペースを確認します

# parted
GNU Parted 2.3
Using /dev/sda
Welcome to GNU Parted! Type ‘help’ to view a list of commands.
(parted) print free
Model: Generic- USB3.0 CRW -SD (scsi)
Disk /dev/sda: 197GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number Start End Size Type File system Flags
31.7kB 1049kB 1017kB Free Space
1 1049kB 22.0MB 21.0MB primary fat16
2 22.0MB 2033MB 2011MB primary ext4
2033MB 197GB 195GB Free Space

(parted)

パーテション2の後ろに195GBのフリースペースがあります。

5.正確なセクタ指定をするためにユニット(セクタ)単位の表示に変更します

(parted) unit s
(parted) print free
Model: Generic- USB3.0 CRW -SD (scsi)
Disk /dev/sda: 384503808s
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system Flags
62s 2047s 1986s Free Space
1 2048s 43007s 40960s primary fat16
2 43008s 3970047s 3927040s primary ext4
3970048s 384503807s 380533760s Free Space
(parted)

最終セクタが384503807sであることがわかるのでメモしておきます。

parted には パーテションのリサイズコマンドも含まれますが、下記のように対応していない(incompatible feature )ようです。

(parted) resize
WARNING: you are attempting to use parted to operate on (resize) a file system.
parted’s file system manipulation code is not as robust as what you’ll find in
dedicated, file-system-specific packages like e2fsprogs. We recommend
you use parted only to manipulate partition tables, whenever possible.
Support for performing most operations on most types of file systems
will be removed in an upcoming release.
Partition number? 2
Start? [43008s]?
End? [3970047s]? 384503807s
Error: File system has an incompatible feature enabled. Compatible features are
has_journal, dir_index, filetype, sparse_super and large_file. Use tune2fs or
debugfs to remove features.
(parted)

なぜ対応していないのかは不明。
ext4ファイルシステムしか対応してないのですかね。
ここから先は慎重に進めましょう。

6.拡張する2番のパーテションの削除を行います

(parted) rm 2
(parted)

パーテションの管理テーブルが削除されるだけなので実際のファイルは削除されません。

7.2番のパーテションを新たに設定します

ファイルシステムは以前と同じ(ext4)を指定します。

(parted) mkpart
Partition type? primary/extended? primary
File system type? [ext2]? ext4
Start? 43008s
End? 384460807s
(parted)

ここで使用するコマンドは mkpart です。
似ていますが、mkpartfs を使うとファイルシステムも作成し上書きされるので使わないで下さい。

パーテション構成を確認します。後ろに空きスペースはありません。

(parted) print free
Model: Generic- USB3.0 CRW -SD (scsi)
Disk /dev/sda: 384503808s
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system Flags
62s 2047s 1986s Free Space
1 2048s 43007s 40960s primary fat16
2 43008s 384503807s 384460800s primary ext4
(parted)

8.コマンドライン(シェル)に戻ります

(parted) q
Information: You may need to update /etc/fstab.
#

ここで以前のファイルはちゃんと残っているのを確認できますが、 df コマ ンド等で確認してもパーテション容量は以前と同じです。

9.ファイルシステムのチェックをします

拡張したパーテションのファイルシステムの整合性チェックをします。
整合性チェックをしないと、この先のコマンドで警告が出て進めません。

# fsck.ext4 -f /dev/sda2 🙁
e2fsck 1.42.5 (29-Jul-2012)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/sda2: 17888/122880 files (0.2% non-contiguous), 242431/490880 blocks
#

特に問題無いようです。

10.ファイルシステムを変換します

拡張したパーテションに対応してファイルシステムをリサイズします。

# resize2fs /dev/sda2
resize2fs 1.42.5 (29-Jul-2012)
Resizing the filesystem on /dev/sda2 to 48057600 (4k) blocks.
The filesystem on /dev/sda2 is now 48057600 blocks long.
resize2fs /dev/sda2 30.50s user 18.80s system 10% cpu 8:02.46 total
# mount /dev/sda2 /mnt
# df | grep sda
/dev/sda2 189213468 942460 178659488 1% /mnt
#

これでパーテションが拡張されました。

ちょっと面倒ですがコマンドラインでのパーテションの拡張でした。
GUIであればGparted が定番ですね。

シンプルなext4のケースでしたが、LVMとかのケースはまた後日。

東京本社のNでした。