極光日記

LinuxのSSDをbtrfsでフォーマットする

Created:

Ubuntu DesktopでSSDをbtrfsでフォーマットした手順とポイント

本記事では、Ubuntu Desktop環境において以前Windowsで使っていたためNTFSでフォーマットされていたNVMe SSDをBtrfsでフォーマットした際の手順と、その際に注意すべきポイントについて解説します。

BtrfsにするとWindowsでの読み込みが難しくなりますが、Linuxでしか使わないならばNTFSよりも安定性、読み込み速度の向上などが期待できる可能性があります。
ext4という選択肢もありますが、btrfsだとスナップショットや圧縮などのメリットがあります。

環境

  • OS: Ubuntu 22.04.4 LTS
  • 対象デバイス(パーティション): /dev/nvme0n1p1(NTFSからbtrfsへ変換)

1. ディスク状態の確認

まず、現在のマウント状態とファイルシステムを確認します。

df -hv
lsblk -f
  • df -hv マウント済みのファイルシステムの使用状況を確認するコマンドです。
  • lsblk -f デバイス構成とファイルシステム種別(ext4 / ntfs / btrfs など)を確認できます。
> df -hv
Filesystem      Size  Used Avail Use% Mounted on
tmpfs           3.2G  2.5M  3.2G   1% /run
/dev/sda2       915G  856G   13G  99% /
(省略)
/dev/nvme0n1p1  932G  172G  760G  19% /media/username/nvme0
> lsblk -f
(省略)
nvme0n1
└─nvme0n1p1 ntfs           ボリューム 8008198808197DFA                      759.6G    18% /media/username/nvme0

このコマンドで今回の対象デバイスである/dev/nvme0n1p1が現在NTFSでフォーマットされていることが確認できます。

2. アンマウント

btrfsでフォーマットする前に、対象デバイスをアンマウントします。

sudo umount /media/username/nvme0
  • umount マウント解除します。
  • マウントされたままのデバイスに対してフォーマットは実行できず、ERROR: /dev/nvme0n1p1 is mountedのようなエラーが発生します。
  • 私がumountコマンドを実行した時は特に何も表示されませんでしたが、成功していました。

3. btrfsでフォーマット

sudo mkfs.btrfs -L nvme0 -f /dev/nvme0n1p1

コマンドが見つからなければ以下のようにインストールしてください

sudo apt install btrfs-progs

フォーマットするとデータはすべて削除されます

  • mkfs.btrfs Btrfsファイルシステムを作成するコマンドです。
  • -L nvme0 ファイルシステムにラベル(名前)を付与します。
  • -f 既存のファイルシステム(今回はNTFS)を強制的に上書きします。

1TBのSSDでしたが、私の場合は1秒程度で終了しました。

4. ファイルシステムの確認

blkid /dev/nvme0n1p1

このデバイスのUUID(後述のマウント設定で利用する)やbtrfsでフォーマットされていることなどが確認できます。

個人的な経験としては、フォーマット直後はTYPEがntfsのまま表示されました。
私の場合は再起動することで正しく認識されました(他にも方法があるようですがこれが一番確実かと思いました)

5. 自動マウント設定(fstab)

ここまででbtrfsでのフォーマットは成功しており、ここからの手順は必須ではありません。起動のたびにmountして利用することも可能です。
ただ、内蔵SSDとしてはそれでは不便なためPC起動時に自動的にマウントされるように設定します。
自動マウントのためにfstabファイルを編集します。

sudo vim /etc/fstab

例:

fstabに以下のような行を追加します。

UUID=ec59293e-face-4757-b787-7e85e1a559a0 /media/username/nvme0 btrfs compress=zstd:3,noatime,autodefrag,nofail,x-systemd.automount 0 0
  • UUID
    • UUIDは先述のblkidで確認したものです。
  • /media/username/nvme0
    • マウント先のディレクトリです。任意の名前で事前に作成しておき、ここに設定します。
  • compress=zstd:3
    • btrfsはマウント時の設定によってファイルの透過的な圧縮が可能です。lzoなどの選択肢もありますが、現在はzstdが速度、圧縮率のバランスが取れています。
    • 後ろの数字は圧縮レベルです。3はデフォルト値ですが、バランスが取れており、個人的にはラグなどはほとんど感じません。
  • noatime
    • ファイルにアクセスしてもアクセス時刻を更新しないようになります。少しだけ読み書き性能が向上するかもしれません。
  • autodefrag
    • 自動でデフラグします。
  • nofail
    • マウントに失敗してもコンピュータの起動自体は成功するようにします。
  • x-systemd.automount
    • 私はX11のLinux Destkopを使っていますが、この設定を追加することで、起動時にデスクトップにアイコンが表示されるようになりました。なくても自動マウント自体はされるため必須ではないです。また、Waylandなどだと変わるかもしれません。

desktopに表示されるディスクのアイコン

6. マウントポイントの権限設定

デフォルトではroot所有になり不便なため、一般ユーザーが書き込みできるよう変更します。

sudo chown -Rv $USER:$USER /media/username/nvme0

7. 圧縮状態の確認

個人的にbtrfsはファイルを圧縮できることがメリットの1つだと思うため、その状況を確認します。
マウントしたディレクトリに適当にファイルを配置した後、次のコマンドを実行します。

sudo compsize /media/username/nvme0/

コマンドが見つからなければ以下のようにインストールしてください

sudo apt install btrfs-compsize
  • compsize Btrfsの圧縮率を確認するツールです。
  • zstd圧縮が有効な場合、以下のように表示されます:
Type       Perc     Disk Usage   Uncompressed
zstd        19%      4.0G          20G

これは約80%の圧縮効果があることを示しています。
テキストファイルが多いと圧縮効果が高くなり、画像などが中心だと低くなります。