Salut,
Suite à migration de ma partition système vers un SSD (Intel 320 Series), j’ai voulu bien entendu activer la fonction TRIM en ajoutant l’option discard dans /etc/fstab.
Le truc qui m’a mis la puce à l’oreille c’est que l’option discard ne veut pas apparaître dans la liste des drapeaux quand je fais un mount :
$ mount
[...]
/dev/disk/by-uuid/23f9f7a6-4b84-11e1-9585-00248c13477c on / type ext4 (rw,noatime,errors=remount-ro,user_xattr,acl,barrier=1,data=writeback)
Même un remount n’y change rien : (mais on voit que le remount fonctionne car l’option noatime est remplacée par relatime)
[code]# mount -o remount,discard /dev/sda1 /
mount
[…]
/dev/disk/by-uuid/23f9f7a6-4b84-11e1-9585-00248c13477c on / type ext4 (rw,relatime,errors=remount-ro,user_xattr,acl,barrier=1,data=writeback)
mount -o remount,noatime,discard /dev/sda1 /
mount
[…]
/dev/disk/by-uuid/23f9f7a6-4b84-11e1-9585-00248c13477c on / type ext4 (rw,noatime,errors=remount-ro,user_xattr,acl,barrier=1,data=writeback)[/code]
Du coup je vérifie :
ATTENTION NE RECOPIEZ PAS CES COMMANDES BÊTEMENT, LE NUMÉRO DE BLOC (4890608) EST SPÉCIFIQUE À UN FICHIER SUR MA MACHINE, IL FAUT RÉUTILISER LE begin_LBA
[code]# dd if=/dev/urandom of=tempfile bs=512 count=2
2+0 enregistrements lus
2+0 enregistrements écrits
1024 octets (1,0 kB) copiés, 0,00068992 s, 1,5 MB/s
hdparm --fibmap tempfile
tempfile:
filesystem blocksize 4096, begins at LBA 4096; assuming 512 byte sectors.
byte_offset begin_LBA end_LBA sectors
0 4890608 4890615 8
hdparm --read-sector 4890608 /dev/sda
/dev/sda:
reading sector 4890608: succeeded
771f 3e7f b96c 0125 7789 ba79 bcfc 3653 <== c’est bien le début du fichier (vérifié avec éditeur hexa)
[…]
rm tempfile
sync
echo 3 > /proc/sys/vm/drop_caches
sleep 60
hdparm --read-sector 4890608 /dev/sda
/dev/sda:
reading sector 4890608: succeeded
771f 3e7f b96c 0125 7789 ba79 bcfc 3653
[…][/code]
Clairement le TRIM n’a pas fonctionné automatiquement, mais il marche très bien quand il est demandé manuellement :
ATTENTION NE RECOPIEZ PAS CES COMMANDES BÊTEMENT, LE NUMÉRO DE BLOC (4890608) EST SPÉCIFIQUE À UN FICHIER SUR MA MACHINE, IL FAUT RÉUTILISER LE begin_LBA
[size=150]VOUS AVEZ INTÉRÊT À VÉRIFIER QUE LE BLOC N’A PAS ÉTÉ RÉALLOUÉ DEPUIS LE rm SINON VOUS ALLEZ EFFACER DES DONNÉES AU HASARD !
L’OPTION –please-destroy-my-drive DE hdparm PORTE BIEN SON NOM ![/size]
[code]# hdparm --please-destroy-my-drive --trim-sector-ranges 4890608:1 /dev/sda
/dev/sda:
trimming 1 sectors from 1 ranges
succeeded
hdparm --read-sector 4890608 /dev/sda
/dev/sda:
reading sector 4890608: succeeded
0000 0000 0000 0000 0000 0000 0000 0000
[…][/code]
Et pourtant tout semble en ordre au niveau de la config…
# hdparm -I /dev/sda | grep TRIM
* Data Set Management TRIM supported (limit 8 blocks)
* Deterministic read ZEROs after TRIM
[code]$ cat /etc/fstab
[…]
/dev/sda1
UUID=23f9f7a6-4b84-11e1-9585-00248c13477c / ext4 defaults,noatime,discard,user_xattr,acl,barrier=1,data=writeback,errors=remount-ro 0 1[/code]
$ cat /etc/default/grub
[...]
GRUB_CMDLINE_LINUX_DEFAULT="rootflags=defaults,noatime,discard,user_xattr,acl,barrier=1,data=writeback quiet"
# tune2fs -l /dev/sda1 | grep 'Default mount'
Default mount options: journal_data_writeback discard
$ dmesg
[ 0.000000] Linux version 3.2.0-1-amd64 (Debian 3.2.1-2) (ben@decadent.org.uk) (gcc version 4.6.2 (Debian 4.6.2-12) ) #1 SMP Tue Jan 24 05:01:45 UTC 2012
[ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-3.2.0-1-amd64 root=UUID=23f9f7a6-4b84-11e1-9585-00248c13477c ro ipv6.disable=1 acpi_enforce_resources=lax rootflags=defaults,noatime,discard,user_xattr,acl,barrier=1,data=writeback quiet
[...]
[ 1.756667] ata1.00: ATA-8: INTEL SSDSA2CW160G3, 4PC10362, max UDMA/133
[ 1.756670] ata1.00: 312581808 sectors, multi 1: LBA48 NCQ (depth 31/32)
[ 1.757590] ata1.00: configured for UDMA/133
[ 1.757783] scsi 0:0:0:0: Direct-Access ATA INTEL SSDSA2CW16 4PC1 PQ: 0 ANSI: 5
[...]
[ 1.780125] sd 0:0:0:0: [sda] 312581808 512-byte logical blocks: (160 GB/149 GiB)
[ 1.780189] sd 0:0:0:0: [sda] Write Protect is off
[ 1.780192] sd 0:0:0:0: [sda] Mode Sense: 00 3a 00 00
[ 1.780213] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[ 1.780813] sda: sda1
[ 1.781180] sd 0:0:0:0: [sda] Attached SCSI disk
[...]
[ 2.080553] EXT4-fs (sda1): mounted filesystem with writeback data mode. Opts: discard,user_xattr,acl,barrier=1,data=writeback
[...]
[ 3.654081] EXT4-fs (sda1): re-mounted. Opts: (null)
[ 3.730878] EXT4-fs (sda1): re-mounted. Opts: discard,user_xattr,acl,barrier=1,data=writeback,errors=remount-ro
Note 1 : Le firmware est à jour (c’est la première chose que j’ai vérifiée car il y avait un bug critique sur les anciens firmwares, rien à voir avec TRIM d’ailleurs).
Note 2 : Au départ j’avais juste le discard dans /etc/fstab, puis j’ai rajouté rootflags dans /etc/default/grub, et enfin en désespoir de cause je l’ai rajouté dans les options du filesystem (tune2fs -o discard /dev/sda1). Sans changement aucun.
Le truc qui m’intrigue tout de même c’est que discard fait partie des options par défaut du filesystem, mais l’avant dernier re-mounted dans le dmesg indique qu’il a remonté le FS sans cette option. Bizarre…
Note 3 : Quand je démarre sur un LiveCD et que je fais un mount -o noatime,discard /dev/sda1 /mnt le discard est bien pris en compte dans les drapeaux, et fonctionne automatiquement.
Note 4 : Quand je démarre en mode recovery (la deuxième entrée dans GRUB) je n’ai pas de discard dans les drapeaux, ça exclut dont mon utilisation dans /etc/default/grub de GRUB_CMDLINE_LINUX_DEFAULT plutôt que GRUB_CMDLINE_LINUX.
Note 5 : La commande fstrim / ne marche pas non plus.
Quelqu’un a une piste ? Moi je sèche…