Extending SSD Lifespan by Moving Specific Directories to HDD on Linux (Btrfs)
はじめに
今回、家のデスクトップPCにHDDを追加しました。今まではSSD(256GB)に全システムを構成していたのですが、
・SSDには書き込み回数に制限がある(頻繁に書き込みを行うことは寿命を縮める)
・HDDは安価で大容量のストレージを確保できる
・システムファイルとユーザーデータを分離させることでバックアップや管理が容易になる
・システムの再インストール時や更新時に特定ディレクトリを保持したまま作業ができる
以上の点より/home(ユーザーデータ)/var(ログファイル・キャッシュファイル)のディレクトリをSSDからHDDに移すことにしました。
実際、SSDを寿命が来るまで使いつぶしたとかあまり聞いたことがありませんが、一応こういう方法があるよという紹介です。
それでは、実際にどういったやり方をして実装したのか説明していきます。
手順
OS : Opensuse Tumbleweed
1.新しいサブボリュームの作成
はじめに、新しいドライブ(/dev/sdb2)に@homeと@varという名前で新しいBtrfsサブボリュームを作成しました。
sudo mkdir /mnt/newhdd
sudo mount /dev/sdb2 /mnt/newhdd
sudo btrfs subvolume create /mnt/newhdd/@home
sudo btrfs subvolume create /mnt/newhdd/@var
2.データの移動
次に既存の/homeと/varの内容を新しいサブボリュームに移行していきます。
su -l
sudo rsync -avxHAX /home/ /mnt/newhdd/@home
sudo rsync -avxHAX /var/ /mnt/newhdd/@var
3.バックアップ・既存ディレクトリの削除(varディレクトリを削除する前に必ずシステムで動かしているアプリケーションを停止するようにしてください)
mkdir home_old;cp -r /home /home_old
mkdir var_old;cp -r /var /var_old
sudo rm -rf /home/*
sudo rm -rf /home/.*
sudo rm -rf /var/*
sudo rm -rf /var/.*
4.fstabの更新
#/dev/sdb2のUUIDを確認
sudo blkid
#fstabに以下を追記
sudo nano /etc/fstab
UUID=yourUUID /home btrfs subvol=@home,defaults,noatime 0 0
UUID=yourUUID /var btrfs subvol=@var,defaults,noatime 0 0
※/homeと/varのfstabが書かれているはずなので、その行をコメントアウトするようにしてください
5.再起動・確認
sudo reboot
#起動後、上手く認識しているか確認
df -h
tmpfs 3.2G 1.4M 3.2G 1% /run
tmpfs 1.0M 0 1.0M 0% /run/credentials/systemd-journald.service
tmpfs 1.0M 0 1.0M 0% /run/credentials/systemd-udev-load-credentials.service
tmpfs 1.0M 0 1.0M 0% /run/credentials/systemd-tmpfiles-setup-dev-early.service
tmpfs 1.0M 0 1.0M 0% /run/credentials/systemd-sysctl.service
tmpfs 1.0M 0 1.0M 0% /run/credentials/systemd-tmpfiles-setup-dev.service
tmpfs 1.0M 0 1.0M 0% /run/credentials/systemd-vconsole-setup.service
/dev/sda2 112G 11G 101G 10% /.snapshots
/dev/sda2 112G 11G 101G 10% /boot/grub2/i386-pc
/dev/sda2 112G 11G 101G 10% /boot/grub2/x86_64-efi
/dev/sda2 112G 11G 101G 10% /opt
/dev/sda2 112G 11G 101G 10% /root
/dev/sda2 112G 11G 101G 10% /srv
tmpfs 7.9G 268K 7.9G 1% /tmp
/dev/sda2 112G 11G 101G 10% /usr/local
/dev/sdb2 464G 1.6G 461G 1% /home
/dev/sdb2 464G 1.6G 461G 1% /var
/dev/loop2 64M 64M 0 100% /snap/core20/
無事に認識されていたら完了です。