一部のSSDでボリュームが読み込み専用になってしまう現象
一部のNVMe(NVM Express)接続のSSDで、ボリュームが読み込み専用になってしまう現象が報告されています。現状報告されている内容では、Samsung製SSD、Toshiba製SSD、Intel製SSDでこの現象が発生しているとのことです。
いずれもNVMeデバイスの省電力を制御するAPST(Autonomous Power State Transition)に起因する問題です。
APSTの導入のきっかけ
APSTはNVMeドライブの消費電力を抑えるため、「Ubuntu 17.04(Linux Kernel 4.10)」を機に導入されました。結果、消費電力が8.26ワットから4.23ワットにまで抑えられ、またPC3までしか移行しなかったCPUのPower Saving Stateが、PC8まで移行するようになったとのことです。
その後、「Ubuntu 16.10(Linux Kernel 4.8)」にも導入されています。
ユーザーから見た現象
ユーザーから見た現象としては、しばらくUbuntuを利用していると、突然ルートファイルシステム(/)が読み込み専用になり、TTY(Ctrl+Alt+F1)に切り替えると、以下のような内容が出力されれます。
[ 746.341551] EXT4-fs error (device nvme0n1p7): ext4_find_entry:1463: inode #525023: comm NetworkManager: reading directory iblock 0
[ 746.343318] EXT4-fs error (device nvme0n1p7): ext4_find_entry:1463: inode #524289: comm pool: reading directory iblock 0
[ 746.356125] EXT4-fs error (device nvme0n1p7): ext4_find_entry:1463: inode #11272213: comm systemd-udevd: reading directory iblock 0
[ 746.356139] EXT4-fs error (device nvme0n1p7): ext4_find_entry:1463: inode #11272210: comm systemd-udevd: reading directory iblock 0
[ 746.356332] EXT4-fs error (device nvme0n1p7): ext4_find_entry:1463: inode #11272193: comm systemd-udevd: reading directory iblock 0
[ 746.356338] EXT4-fs error (device nvme0n1p7): ext4_find_entry:1463: inode #11272825: comm systemd-udevd: reading directory iblock 0
[ 746.356400] EXT4-fs error (device nvme0n1p7): ext4_find_entry:1463: inode #11272210: comm systemd-udevd: reading directory iblock 0
[ 746.474632] EXT4-fs error (device nvme0n1p7): ext4_find_entry:1463: inode #524539: comm unity-settings-: reading directory iblock 0
[ 746.992814] EXT4-fs error (device nvme0n1p7): ext4_find_entry:1463: inode #5506108: comm BrowserBlocking: reading directory iblock 0
[ 746.304451] EXT4-fs error (device nvme0n1p7): ext4_find_entry:1463: inode #5506117: comm BrowserBlocking: reading directory iblock 0
[ 746.343318] EXT4-fs error (device nvme0n1p7): ext4_find_entry:1463: inode #524289: comm pool: reading directory iblock 0
[ 746.356125] EXT4-fs error (device nvme0n1p7): ext4_find_entry:1463: inode #11272213: comm systemd-udevd: reading directory iblock 0
[ 746.356139] EXT4-fs error (device nvme0n1p7): ext4_find_entry:1463: inode #11272210: comm systemd-udevd: reading directory iblock 0
[ 746.356332] EXT4-fs error (device nvme0n1p7): ext4_find_entry:1463: inode #11272193: comm systemd-udevd: reading directory iblock 0
[ 746.356338] EXT4-fs error (device nvme0n1p7): ext4_find_entry:1463: inode #11272825: comm systemd-udevd: reading directory iblock 0
[ 746.356400] EXT4-fs error (device nvme0n1p7): ext4_find_entry:1463: inode #11272210: comm systemd-udevd: reading directory iblock 0
[ 746.474632] EXT4-fs error (device nvme0n1p7): ext4_find_entry:1463: inode #524539: comm unity-settings-: reading directory iblock 0
[ 746.992814] EXT4-fs error (device nvme0n1p7): ext4_find_entry:1463: inode #5506108: comm BrowserBlocking: reading directory iblock 0
[ 746.304451] EXT4-fs error (device nvme0n1p7): ext4_find_entry:1463: inode #5506117: comm BrowserBlocking: reading directory iblock 0
ボリュームが読み込み専用となってしまうため、アプリの動作がおかしくなったり、システムがフリーズします。
APSTが有効になっているか調べるには
APSTが有効になっているか調べるには、以下のコマンドを実行します。
sudo nvme get-feature -f 0x0c -H /dev/nvme0
APSTが有効になっていれば、以下の出力結果が得られます。
get-feature:0xc (Autonomous Power State Transition), Current value:0x000001
Autonomous Power State Transition Enable (APSTE): Enabled
Autonomous Power State Transition Enable (APSTE): Enabled
nvmeコマンドが見つからない時は
nvmeコマンドが見つからない時は、以下のボタンをクリックして「nvme-cli」パッケージをインストールしてください。APSTを無効にするには
APSTを無効にする方法です。1./etc/default/grubを開く
以下のコマンドを実行し、「/etc/default/grub」ファイルをrootで開きます。
sudo -i gedit /etc/default/grub
2.編集箇所の検索
「GRUB_CMDLINE_LINUX_DEFAULT」で始まる行を検索します。3.パラメーターの追加
その行に「nvme_core.default_ps_max_latency_us=0」パラメーターを追加します。上記の場合「GRUB_CMDLINE_LINUX_DEFAULT」行の内容は、以下のようになります。
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nvme_core.default_ps_max_latency_us=0"
編集したらファイルを上書き保存します。
4.GRUB2設定ファイルの更新
以下のコマンドを実行し、GRUB2設定ファイルを更新します。
sudo update-grub
作業が完了したら、PCを再起動します。
5.パラメーターの確認
PCを再起動したら以下のコマンドを実行し、パラメーターが反映されているか確認します。
cat /proc/cmdline
後は上記で紹介した方法でAPSTが無効(disabled)になっているか確認してください。