xfsなHDDをより容量が大きいものに置き換えた話

普段使いのUbuntuを入れているノートのHDDの容量を変更(500GB⇒1TB)しました。システム領域は変更せず、home領域のパーティションを拡張しました。ファイルシステムがxfsで、記事が少ない気がするので備忘録代わりに書いてみました。
※ファイルシステムがext2/ext3/ext4などの場合はfdiskでパーティションを再構成し、e2fsck,resizefsなどをするようですが、ここでは使いません。

大まかな手順は以下になります。

+ ddでデータをバイトごとまるっとコピー
+ partedでhome領域のパーティションを拡張
+ xfs_growfsでxfsのhome領域を拡張

## 準備

1. 新HDDはUSB接続のHDDケースにセットし、ノートから認識できるようにします。今回は玄人志向の[GW2.5TL-U3](https://www.kuroutoshikou.com/product/case/25hdd/gw2_5tl-u3_bk/)を使いました。
+ ノートのBIOSでブート順位を光学ドライブを最優先にします。
+ CDブートのlinuxを用意し、これでノートを起動します。今回はUbuntu 18.04のインストールDVDを使いました。(インストールDVDですが、Ubuntuの環境を試すのにも使えます。)
+ 起動したら1.で用意したHDDをノートに接続します。
+ 旧HDDが/dev/sda、新HDDが/dev/sdbで使えるようになったら準備完了です。

## dd
DVDから起動したUbuntuで端末を開き以下を実行します。

```
% sudo su
# dd if=/dev/sda of=/dev/sdb bs=32M
```

## parted
以下が実行ログになります。パーティション番号1がシステム領域(/)、番号2がスワップ、番号3がhome領域(/home)です。拡張対象は番号３ですが、resizeコマンドは使えませんでした…

```
# parted /dev/sdb
GNU Parted 3.2
/dev/sdb を使用
GNU Parted へようこそ！ コマンド一覧を見るには 'help' と入力してください。
(parted) print
モデル: WDC WDS 100T2B0A-00SM50 (scsi)
ディスク /dev/sdb: 1000GB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos
ディスクフラグ: 

番号  開始    終了    サイズ  タイプ   ファイルシステム  フラグ
 1    1049kB  21.5GB  21.5GB  primary  xfs               boot
 2    21.5GB  34.4GB  12.9GB  primary  linux-swap(v1)
 3    34.4GB  525GB   491GB   primary  xfs

(parted) resize 3 34.4GB 1000GB                                           
エラー: resize コマンドは parted 3.0 で削除されました
(parted) p                                                                
モデル: WDC WDS 100T2B0A-00SM50 (scsi)
ディスク /dev/sdb: 1000GB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos
ディスクフラグ: 

番号  開始    終了    サイズ  タイプ   ファイルシステム  フラグ
 1    1049kB  21.5GB  21.5GB  primary  xfs               boot
 2    21.5GB  34.4GB  12.9GB  primary  linux-swap(v1)
 3    34.4GB  525GB   491GB   primary  xfs

(parted) help                                                             
  align-check TYPE N            パーティション N のアライメント(TYPE: min|opt)をチェックする
  help [コマンド]               ヘルプ表示。コマンド指定でそのヘルプを表示
  mklabel,mktable ラベルの種類  新しいラベル(パーティションテーブル)を作る
  mkpart パーティションの種類 [ファイルシステムの種類] 開始 終了
        　　　　　　　　　　　　パーティションを作る
  name NUMBER 名前              パーティションに名前をつける
  print [devices|free|list,all|NUMBER]
        　　　　　　　　　　　  パーティションテーブルや、利用可能なデバイス、空き領域、
        　　　　　　　　　　　  見つかった全てのパーティション、あるいは特定のパーティションについて表示する
  quit                          プログラムを終了する
  rescue 開始 終了              開始、終了で指定した範囲付近にあるパーティションを復活させる
  resizepart NUMBER END         パーティション NUMBER を END にリサイズする
  rm NUMBER                     パーティションを削除する
  select デバイス               操作するデバイスを選択
  disk_set FLAG STATE           選択したデバイスの FLAG を変更
  disk_toggle [FLAG]            選択したデバイスの FLAG の状態をトグル
  set NUMBER フラグ 状態        ファイルシステムのフラグと状態を設定する
  toggle [NUMBER [FLAG]]        パーティションのフラグの状態を反転する
  unit UNIT                     デフォルトの単位を UNIT にする
  version                       GNU Parted のバージョンと著作権情報を表示
(parted) resizepart 3 1000GB
(parted) p                                                                
モデル: WDC WDS 100T2B0A-00SM50 (scsi)
ディスク /dev/sdb: 1000GB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos
ディスクフラグ: 

番号  開始    終了    サイズ  タイプ   ファイルシステム  フラグ
 1    1049kB  21.5GB  21.5GB  primary  xfs               boot
 2    21.5GB  34.4GB  12.9GB  primary  linux-swap(v1)
 3    34.4GB  1000GB  966GB   primary  xfs

(parted) q                                                                
通知: 必要であれば /etc/fstab を更新するのを忘れないようにしてください。
```
## xfs_growfs
以下が実行ログになります。xfs_growfsは対象パーティションをマウントしてから実行します。xfs_growfsの実行前後でdfコマンドの比較でパーティションサイズが457GBから900GBに増加しているのが分かります。

```
root@ubuntu:/home/ubuntu# mkdir -p /tmp/sdb3
root@ubuntu:/home/ubuntu# mount /dev/sdb3 /tmp/sdb3
root@ubuntu:/home/ubuntu# df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            5.8G     0  5.8G   0% /dev
tmpfs           1.2G  1.7M  1.2G   1% /run
/dev/sr0        1.8G  1.8G     0 100% /cdrom
/dev/loop0      1.7G  1.7G     0 100% /rofs
/cow            5.8G  464M  5.4G   8% /
tmpfs           5.8G   36M  5.8G   1% /dev/shm
tmpfs           5.0M  8.0K  5.0M   1% /run/lock
tmpfs           5.8G     0  5.8G   0% /sys/fs/cgroup
tmpfs           5.8G  516K  5.8G   1% /tmp
tmpfs           1.2G   48K  1.2G   1% /run/user/999
/dev/loop1       87M   87M     0 100% /snap/core/5145
/dev/loop2       35M   35M     0 100% /snap/gtk-common-themes/319
/dev/loop3      141M  141M     0 100% /snap/gnome-3-26-1604/70
/dev/loop4      2.4M  2.4M     0 100% /snap/gnome-calculator/180
/dev/loop5       13M   13M     0 100% /snap/gnome-characters/103
/dev/loop6       15M   15M     0 100% /snap/gnome-logs/37
/dev/loop7      3.8M  3.8M     0 100% /snap/gnome-system-monitor/51
tmpfs           1.2G     0  1.2G   0% /run/user/0
/dev/sdb3       457G  369G   89G  81% /tmp/sdb3
root@ubuntu:/home/ubuntu# xfs_growfs -d /tmp/sdb3
meta-data=/dev/sdb3              isize=256    agcount=4, agsize=29953121 blks
         =                       sectsz=512   attr=2, projid32bit=0
         =                       crc=0        finobt=0 spinodes=0 rmapbt=0
         =                       reflink=0
data     =                       bsize=4096   blocks=119812482, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
log      =internal               bsize=4096   blocks=58502, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 119812482 to 235751761
root@ubuntu:/home/ubuntu# df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            5.8G     0  5.8G   0% /dev
tmpfs           1.2G  1.7M  1.2G   1% /run
/dev/sr0        1.8G  1.8G     0 100% /cdrom
/dev/loop0      1.7G  1.7G     0 100% /rofs
/cow            5.8G  464M  5.4G   8% /
tmpfs           5.8G   36M  5.8G   1% /dev/shm
tmpfs           5.0M  8.0K  5.0M   1% /run/lock
tmpfs           5.8G     0  5.8G   0% /sys/fs/cgroup
tmpfs           5.8G  516K  5.8G   1% /tmp
tmpfs           1.2G   48K  1.2G   1% /run/user/999
/dev/loop1       87M   87M     0 100% /snap/core/5145
/dev/loop2       35M   35M     0 100% /snap/gtk-common-themes/319
/dev/loop3      141M  141M     0 100% /snap/gnome-3-26-1604/70
/dev/loop4      2.4M  2.4M     0 100% /snap/gnome-calculator/180
/dev/loop5       13M   13M     0 100% /snap/gnome-characters/103
/dev/loop6       15M   15M     0 100% /snap/gnome-logs/37
/dev/loop7      3.8M  3.8M     0 100% /snap/gnome-system-monitor/51
tmpfs           1.2G     0  1.2G   0% /run/user/0
/dev/sdb3       900G  369G  531G  42% /tmp/sdb3
```

## 新HDDで起動
ノートのHDDを交換してブートします。