「ソリッドステートドライブ」の版間の差分
細 (→定期的な TRIM: 修正) |
(→連続的な TRIM: 翻訳) |
||
77行目: | 77行目: | ||
==== 連続的な TRIM ==== |
==== 連続的な TRIM ==== |
||
+ | {{Note|{{ic|fstrim}} を定期的に実行しているのであれば、連続的な TRIM を有効化する必要はありません。TRIM を使いたいのであれば、定期的な TRIM か連続的な TRIM のどちらか一方を使ってください。}} |
||
− | {{Note|There is no need to enable continuous TRIM if you run {{ic|fstrim}} periodically. If you want to use TRIM, use either periodic TRIM or continuous TRIM.}} |
||
+ | TRIM コマンドを定期的に ({{ic|fstrim.timer}} を使用する場合はデフォルトで1週間に1度) 発行するのではなく、ファイルが削除されるたびに TRIM コマンドを発行することも可能です。後者は、連続的な TRIM (continuous TRIM) として知られています。 |
||
− | Instead of issuing TRIM commands once in a while (by default once a week if using {{ic|fstrim.timer}}), it is also possible to issue TRIM commands each time files are deleted instead. The latter is known as the continuous TRIM. |
||
− | {{Warning| |
+ | {{Warning|[[Wikipedia:Serial ATA#SATA revision 3.1|SATA 3.1]] 以前ではすべての TRIM コマンドはキューされなかったので、連続的な TRIM はシステムを頻繁にフリーズさせていました。この場合、低頻度で [[#定期的な TRIM]] を適用するのがより良い代替策です。また、深刻なデータ破損のため、キューに入れられた TRIM コマンドの実行がブラックリスト化されているデバイスの多くでも似たような問題が発生します ([https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/ata/libata-core.c Linux ソースコード]の {{ic|ata_device_blacklist}} を参照)。そのような場合、デバイスにも依りますが、システムはキューの TRIM コマンドではなく非キューの TRIM コマンドを SSD に送信することを強制される場合があります。詳細は [[Wikipedia:ja:TRIM#短所]] を見てください。}} |
− | {{Note| |
+ | {{Note|連続的な TRIM は、TRIM コマンドを発行する方法として Linux コミュニティの間で最も好まれているわけではありません。例えば、Ubuntu は定期的な TRIM をデフォルトで有効化しており [https://askubuntu.com/questions/1034169/is-trim-enabled-on-my-ubuntu-18-04-installation]、Debian は [[Debian:SSDOptimization#Mounting SSD filesystems|連続的な TRIM]] の使用を推奨しておらず、Red Hat は可能であれば連続的な TRIM よりも定期的な TRIM を使用することを推奨しています [https://web.archive.org/web/20160917183831/https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Storage_Administration_Guide/ch02s04.html]。}} |
+ | {{ic|/etc/fstab}} 内で {{ic|discard}} オプションを使うことにより、デバイスオペレーションでの連続的な TRIM を有効化します: |
||
− | Using the {{ic|discard}} option for a mount in {{ic|/etc/fstab}} enables continuous TRIM in device operations: |
||
/dev/sda1 / ext4 defaults,'''discard''' 0 1 |
/dev/sda1 / ext4 defaults,'''discard''' 0 1 |
||
− | {{Note|1= |
+ | {{Note|1=XFS {{ic|/}} パーティションの場合、{{ic|/etc/fstab}} 内で discard オプションを指定しても、うまく行きません。[https://bbs.archlinux.org/viewtopic.php?id=143254 このスレッド]によると、{{ic|1=rootflags=discard}} [[カーネルパラメータ]]を使用して設定しなければならないようです。}} |
+ | ext4 ファイルシステムでは、''tune2fs'' を使って {{ic|discard}} フラグを[[アクセス制御リスト#ACL の有効化|デフォルトマウントオプション]]として設定することもできます: |
||
− | On the ext4 filesystem, the {{ic|discard}} flag can also be set as a [[Access Control Lists#Enable ACL|default mount option]] using ''tune2fs'': |
||
# tune2fs -o discard /dev/sd'''XY''' |
# tune2fs -o discard /dev/sd'''XY''' |
||
+ | 外部ドライブの場合は、{{ic|/etc/fstab}} 内のエントリではなくデフォルトマウントオプションを使うと便利です。そのようなパーティションは、他のマシンでもデフォルトのオプションを使ってマウントされるからです。この方法では、すべてのマシンで {{ic|/etc/fstab}} を編集する必要はありません。 |
||
− | Using the default mount options instead of an entry in {{ic|/etc/fstab}} is particularly useful for external drives, because such partition will be mounted with the default options also on other machines. This way, there is no need to edit {{ic|/etc/fstab}} on every machine. |
||
− | {{Note| |
+ | {{Note|デフォルトマウントオプションは、{{ic|/proc/mounts}} にリストアップされません。}} |
==== デバイス全体を trim する ==== |
==== デバイス全体を trim する ==== |
2022年11月8日 (火) 17:32時点における版
この記事では、ソリッドステートドライブ (SSD) や他のフラッシュメモリベースのストレージデバイスの取り扱いに関するトピックをカバーしています。
特定の目的のために SSD をパーティショニングしたい場合、フラッシュメモリ向けに最適化されたファイルシステムのリストで検討すると良いかもしれません。
一般的な利用では、自由にファイルシステムを選び、#TRIM を有効化すると良いでしょう。
使用法
TRIM
ほとんどの SSD は、長期的なパフォーマンスの維持とウェアレベリングのための ATA_TRIM コマンドをサポートしています。TechSpot 記事では、SSD をデータで埋める前と後でのパフォーマンスベンチマークの例が示されています。
Linux カーネルバージョン 3.8 以降、異なるファイルシステムに対する TRIM のサポートが継続的に追加されました。概要は以下の表を見てください:
ファイルシステム | 連続的な TRIM ( discard オプション) |
定期的な TRIM (fstrim) |
参照 と備考 |
---|---|---|---|
Btrfs | Yes | Yes | |
exFAT | Yes | Yes | fstrim はカーネル 5.13 以降、サポートされています。[1] |
ext3 | Yes | Yes | |
ext4 | Yes | Yes | [2] の "discard, nodiscard(*)" |
F2FS | Yes | Yes | |
JFS | Yes | Yes | [3] |
NILFS2 | Yes | Yes | |
NTFS-3G | No | Yes | バージョン 2015.3.14 以降 [4] |
VFAT | Yes | Yes | fstrim はカーネル 4.19 以降、サポートされています。[5] |
XFS | Yes | Yes | [6] |
TRIM のサポートを確認するには、以下を実行してください:
$ lsblk --discard
そして、DISC-GRAN (discard granularity) と DISC-MAX (discard max bytes) 列の値を確認してください。値が 0 でなければ、TRIM をサポートしていることを意味します。
あるいは、hdparm パッケージをインストールし、以下を実行してください:
# hdparm -I /dev/sda | grep TRIM
* Data Set Management TRIM supported (limit 1 block)
定期的な TRIM
util-linux パッケージは fstrim.service
と fstrim.timer
systemd ユニットファイルを提供しています。タイマーを有効化すれば毎週サービスが実行されます。このサービスは、discard 操作をサポートしているデバイス上のマウント済みのファイルシステムすべてに対して fstrim(8) を実行します。
タイマーは最後に実行してから一週間経過したことを知るために (最初に実行したときに作成される) /var/lib/systemd/timers/stamp-fstrim.timer
のタイムスタンプを使います。そのため、anacron のように、何度も頻繁に実行される恐れはありません。
ユニットの活動と状態を取得するには、journalctl を見てください。タイマーの周期や実行されるコマンドを変更するには、提供されているユニットファイルを編集してください。
連続的な TRIM
TRIM コマンドを定期的に (fstrim.timer
を使用する場合はデフォルトで1週間に1度) 発行するのではなく、ファイルが削除されるたびに TRIM コマンドを発行することも可能です。後者は、連続的な TRIM (continuous TRIM) として知られています。
/etc/fstab
内で discard
オプションを使うことにより、デバイスオペレーションでの連続的な TRIM を有効化します:
/dev/sda1 / ext4 defaults,discard 0 1
ext4 ファイルシステムでは、tune2fs を使って discard
フラグをデフォルトマウントオプションとして設定することもできます:
# tune2fs -o discard /dev/sdXY
外部ドライブの場合は、/etc/fstab
内のエントリではなくデフォルトマウントオプションを使うと便利です。そのようなパーティションは、他のマシンでもデフォルトのオプションを使ってマウントされるからです。この方法では、すべてのマシンで /etc/fstab
を編集する必要はありません。
デバイス全体を trim する
If you want to trim your entire SSD at once, e.g. for a new install or if you want to sell the drive, you can use the blkdiscard command.
LVM
TRIM requests that get passed from the file system to the logical volume are automatically passed to the physical volume(s). No additional configuration is necessary.
No LVM operations (lvremove, lvreduce and all others) issue TRIM requests to physical volume(s) by default. This is done to allow restoring previous volume group configuration with vgcfgrestore(8). The setting issue_discards
in /etc/lvm/lvm.conf
controls whether discards are sent to a logical volume's underlying physical volumes when the logical volume is no longer using the physical volumes' space.
dm-crypt
For non-root filesystems, configure /etc/crypttab
to include discard
in the list of options for encrypted block devices located on an SSD (see dm-crypt/System configuration#crypttab).
For the root filesystem, follow the instructions from dm-crypt/Specialties#Discard/TRIM support for solid state drives (SSD) to add the right kernel parameter to the bootloader configuration.
パフォーマンスを最大化する
Follow the tips in Improving performance#Storage devices to maximize the performance of your drives.
セクタサイズ
See Advanced Format#Solid state drives.
SSD のメモリセルのクリア
On occasion, users may wish to completely reset an SSD's cells to the same virgin state they were at the time the device was installed, thus restoring it to its factory default write performance. Write performance is known to degrade over time even on SSDs with native TRIM support: TRIM only safeguards against file deletes, not replacements such as an incremental save.
The reset can be accomplished by following the appropriate procedure denoted in SSD memory cell clearing, either for #SATA or #NVMe SSDs.
セキュリティ
Hdparm で "frozen" 状態と表示される
一部のマザーボードの BIOS は、初期化時に SATA デバイスに対して "security freeze" コマンドを発行します。同様に、一部の SSD (や HDD) の BIOS は、工場出荷時にすでに "security freeze" に設定されています。どちらにしても、以下の出力のように、デバイスのパスワードセキュリティ設定が frozen になります:
# hdparm -I /dev/sda
Security: Master password revision code = 65534 supported not enabled not locked frozen not expired: security count supported: enhanced erase 4min for SECURITY ERASE UNIT. 2min for ENHANCED SECURITY ERASE UNIT.
デバイスのフォーマットやオペレーティングシステムのインストールといった操作は、"security freeze" の影響を受けません。
上記の出力は、デバイスが起動時に HDD パスワードによってロックされていないこと、そして frozen 状態によってデバイスを (実行時にパスワードを設定してデバイスをロックさせてしまうような) マルウェアから保護していることを示しています。
"frozen" 状態のデバイスにパスワードを設定したい場合、それに対応しているマザーボード BIOS が必要です。ハードウェア暗号化に必要なので、多くのノートパソコンでサポートされていますが、デスクトップやサーバーのボードではサポートがあるかどうかはっきりしないことがあります。
例えば、Intel DH67CL/BL マザーボードの場合、設定にアクセスするには物理的なジャンパによってマザーボードを "maintenance mode" に設定する必要があります ([10], [11] を参照)。
SSD を消去するときは、ディスクの完全消去#hdparm や ソリッドステートドライブ/メモリセルの消去 を見て下さい。
スリープから復帰したあとに SSD 状態を "frozen" にする
スリープからの復帰時に SSD は "frozen" 状態を失っていることが多く、ソリッドステートドライブ/メモリセルの消去 で説明されているように ATA SECURE ERASE コマンドに対して脆弱になっています。
この問題を回避するために、スリープからの復帰後にスクリプトを実行することができます:
/usr/lib/systemd/system-sleep/ssd-freeze.sh
#!/bin/sh if [ "$1" = 'post' ]; then sleep 1 if hdparm --security-freeze /dev/disk/by-id/ata-name-of-disk; then logger "$0: SSD freeze command executed successfully" else logger "$0: SSD freeze command failed" fi fi
ハードウェア暗号化
As noted in #Hdparm shows "frozen" state setting a password for a storage device (SSD/HDD) in the BIOS may also initialize the hardware encryption of devices supporting it. If the device also conforms to the OPAL standard, this may also be achieved without a respective BIOS feature to set the passphrase, see Self-encrypting drives.
トラブルシューティング
SSD の問題は Linux 固有の問題ではないファームウェアのバグである可能性も存在します。SSD に関しては、問題のトラブルシューティングを始める前に、ファームウェアのアップデートが存在しないか確認してみてください:
- SSD のファームウェアをアップデートする。#ファームウェアのアップデート を参照。
- マザーボードの BIOS/UEFI をアップデートする。Linux から BIOS を書き換えるを参照。
ファームウェアのバグであったとしても、解決できることがあります。ファームウェアにアップデートが存在しなかったり、ファームウェアのアップデートをしたくない場合、以下のセクションを見て下さい。
NCQ エラーを解消する
SSD や SATA チップセットによっては Linux Native Command Queueing (NCQ) が正しく動作しないことがあります。dmesg に以下のようなエラーが表示されます:
[ 9.115544] ata9: exception Emask 0x0 SAct 0xf SErr 0x0 action 0x10 frozen [ 9.115550] ata9.00: failed command: READ FPDMA QUEUED [ 9.115556] ata9.00: cmd 60/04:00:d4:82:85/00:00:1f:00:00/40 tag 0 ncq 2048 in [ 9.115557] res 40/00:18:d3:82:85/00:00:1f:00:00/40 Emask 0x4 (timeout)
起動時に NCQ を無効にするには、ブートローダーの設定におけるカーネルコマンドラインに libata.force=noncq
を追加してください。ポート 1 のディスク 0 の NCQ だけを無効化するには次を使用: libata.force=1.00:noncq
。
また、sysfs を使うことで再起動せずに特定のドライブの NCQ を無効化することもできます:
# echo 1 > /sys/block/sdX/device/queue_depth
問題が解決しなかったり他の問題が発生する場合は、バグレポートを作成してください。
SATA の電源管理関連のエラーを解消する
SATA Active Link Power Management (ALPM) が有効になっている場合にエラーを吐く SSD も存在します (例: Transcend MTS400)。ALPM はデフォルトで無効になっており、省電力デーモンによって有効になります (例: TLP, Laptop Mode Tools)。
省電力デーモンを使っていて SATA 関連のエラーが表示される場合、バッテリーと AC 電源のプロファイルを max_performance
に設定して ALPM を無効化してみてください。
ファームウェア
ADATA
ADATA は Linux (i686) で利用できるユーティリティを、ここ にある彼らのサポートページに用意しています。モデルを選択すれば最新のファームウェアへのリンクが表示されます。
最新の Linux アップデートユーティリティはファームウェアと一緒に入っており root で実行してください。最初にバイナリファイルに対して適切なパーミッションを設定する必要があるかもしれません。
Crucial
Crucial は ISO イメージを使ってファームウェアをアップデートする方法を提供しています。ここ から製品を選んで "Manual Boot File" をダウンロードすることでイメージを入手できます。
M4 Crucial モデルを使っている場合、smartctl
でファームウェアのアップグレードが必要かどうかチェックすることが可能です:
$ smartctl --all /dev/sdX
==> WARNING: This drive may hang after 5184 hours of power-on time: http://www.tomshardware.com/news/Crucial-m4-Firmware-BSOD,14544.html See the following web pages for firmware updates: http://www.crucial.com/support/firmware.aspx http://www.micron.com/products/solid-state-storage/client-ssd#software
上記のような警告が表示された場合は重要なデータをバックアップしてから直ちにアップグレードを行うことが推奨されます。ISO イメージと Grub を使用して Crucial MX100 のファームウェアをアップデートする手順は こちら を参照してください。
Intel
Intel は Intel® Solid-State Drive Toolbox ソフトウェアが対応していないオペレーティングシステム向けに、Linux ライブシステムベースの Firmware Update Tool を用意しています。
Kingston
Kingston は Sandforce コントローラを搭載しているドライブのファームウェアをアップデートする Linux ユーティリティを用意しています。Kingston の SSD のサポートページ で見つけることができます。使用している SSD のモデルにあわせてページを開いてください。例えば SH100S3 SSD のサポートは HyperX のサポートページ です。
Mushkin
マイナーな Mushkin ブランドのソリッドステートドライブも Sandforce コントローラーを使っており、ファームウェアをアップデートする Linux ユーティリティ (Kingston のものとほとんど同じ) が存在します。
OCZ
OCZ は Linux 用の Command Line Online Update Tool (CLOUT) を用意しています。ocz-ssd-utilityAUR, ocztoolboxAUR, oczcloutAUR パッケージでインストールすることができます。
Samsung
Samsung は Magician Software 以外の方法によるアップデートを"サポートしない"としていますが、不可能ではありません。Magician Software を使ってファームウェアのアップデートを起動する USB ドライブを作成することができるようですが、一番簡単な方法はファームウェアのアップデート用のブータブル ISO イメージを使用することです。イメージは ここ から入手することが可能です。また、samsung_magicianAUR[リンク切れ: パッケージが存在しません] パッケージでインストールすることができます。Magician がサポートしているのは Samsung ブランドの SSD だけです。OEM 供給されている Samsung 製の SSD はサポートされていません (Lenovo 向けの SSD など)。
(Microsoft Windows で Samsung の "Magician" ソフトウェアを使わずに) Linux で作成したライブ USB スティックからファームウェアアップデートを実行したい場合は、この記事 を参照してください。
SanDisk
SanDisk は SanDisk SSD Toolkit でサポートされていないオペレーティングシステムにおいて SSD のファームウェアアップデートをするための ISO ファームウェアイメージを作成しています。SSD のモデルだけでなく、SSD の容量にあわせて適切なファームウェアを選択する必要があります (例: 60GB または 256GB)。適当な ISO ファームウェアイメージを焼いたら、PC を再起動して新しく作成した CD/DVD ブートディスクで起動してください (USB スティックからでも動作するかもしれません)。
ISO イメージには Linux カーネルと initrd が含まれています。それらを /boot
パーティションに展開して GRUB や Syslinux で起動してファームウェアをアップデートしてください。
ファームウェアのアップデートが列挙された一つのページは存在しませんが (サイトがわかりづらい)、以下が関連するリンクです:
- SanDisk Extreme SSD の ファームウェアのリリースノート と 手動ファームウェアアップデートのバージョン R211。
- SanDisk Ultra SSD の ファームウェアのリリースノート と 手動ファームウェアアップデートのバージョン 365A13F0。
参照
- SSD に Arch をインストールすることについての Reddit における討論
- Re: Varying Leafsize and Nodesize in Btrfs
- Re: SSD alignment and Btrfs sector size
- Erase Block (Alignment) Misinformation?
- Is alignment to erase block size needed for modern SSD's?
- Btrfs support for efficient SSD operation (data blocks alignment)
- SSD, Erase Block Size & LVM: PV on raw device, Alignment