GNU/Linux >> Znalost Linux >  >> Linux

Trim s Lvm a Dm-crypt?

Zkoušel jsem nastavit TRIM s LVM a dm-crypt na ubuntu 13.04 podle tohoto návodu:

http://blog.neutrino.es/2013/howto-properly-activate-trim-for-your-ssd-on-linux-fstrim-lvm-and-dmcrypt/

Viz poznámky o mé konfiguraci a postupu testování níže.

Otázky

  1. Existuje spolehlivý test, zda TRIM funguje správně?

  2. Je můj testovací postup nesprávný nebo můj TRIM nefunguje?

  3. Pokud to nefunguje:co je špatně s mým nastavením?

  4. Jak mohu odladit TRIM pro své nastavení a zajistit, aby TRIM fungoval?

Konfigurace

Zde je moje konfigurace:

cat /etc/crypttab

sda3_crypt UUID=[...] none luks,discard
 

a

cat /etc/lvm/lvm.conf

# [...]
devices  {
      # [ ... ]
      issue_discards = 1
      # [ ... ]
   }
# [...]
 

SSD je Samsung 840 Pro.

Zde je můj testovací postup

Pro otestování nastavení jsem právě provedl sudo fstrim -v / což mělo za následek

/: [...] bytes were trimmed

Toto znovu vedlo k /: 0 bytes were trimmed což zdánlivě dává smysl a naznačuje, že TRIM zřejmě funguje.

Pak jsem však provedl tento test:

dd if=/dev/urandom of=tempfile count=100 bs=512k oflag=direct

sudo hdparm --fibmap tempfile                                 

tempfile:
 filesystem blocksize 4096, begins at LBA 0; assuming 512 byte sectors.
 byte_offset  begin_LBA    end_LBA    sectors
           0    5520384    5521407       1024
      524288    5528576    5529599       1024
     1048576    5523456    5525503       2048
     2097152    5607424    5619711      12288
     8388608    5570560    5603327      32768
    25165824    5963776    5980159      16384
    33554432    6012928    6029311      16384
    41943040    6275072    6291455      16384
    50331648    6635520    6639615       4096
 

sync

sudo hdparm --read-sector 5520384 /dev/sda /dev/sda: reading sector 5520384: succeeded 7746 4e11 bf42 0c93 25d3 2825 19fd 8eda bd93 8ec6 9942 bb98 ed55 87eb 53e1 01d5 c61a 3f52 19a1 0ae5 0798 c6e2 39d9 771a b89f 3fc5 e786 9b1d 3452 d5d7 9479 a80d 114a 7528 a79f f475 57dc aeaf 25f4 998c 3dd5 b44d 23bf 77f3 0ad9 8688 6518 28ee 81db 1473 08b5 befe 8f2e 5b86 c84e c7d2 1bdd 1065 6a23 fd0f 2951 d879 e823 021b fa84 b9c1 eadd 9154 c9f4 2ebe cd70 64ec 75a8 4d93 c8fa 3174 7277 1ffb e858 5eca 7586 8b2e 9dbc ab12 40ab eb17 8187 e67d 5e0d 0005 5867 b924 5cfd 6723 9e4a 6f5f 99a4 a3b0 eeac 454a 83b6 c528 1106 6682 ca77 4edf 2180 bf0c b175 fabb 3d4b 37e2 b834 9e3e 82f2 2fdd 2c6a c6ca 873f e71e f979 160f 5778 356f 2aea 6176 46b6 72b9 f76e ee51 979c 326b 1436 7cfe f677 bfcd 4c3c 9e11 4747 45c1 4bb2 4137 03a1 e4c8 e9dd 43b4 a3b4 ce1b d218 4161 bf64 727b 75d8 dcc2 e14c ebec 2126 25da 0300 12bd 6b1a 28b3 824f 3911 c960 527d 97cd de1b 9f08 9a8e dcdc e65f 1875 58ca be65 82bf e844 50b8 cc1b 7466 58b8 e708 bd3d c01f 64fb 9317 a77a e43b 671f e1fb e328 93a9 c9c7 291c 56e0 c6c1 f011 b94d 9dc7 71e6 c8b1 5720 b8c9 b1a6 14f1 7299 9122 912b 312a 0f2f a31a 8bf9 9f8c 54e6 96f3 60b8 04a7 7dc9 3caa db0a a837 e5d7 2752 b477 c22d 7598 44e1 84e9 25d4 5db5 9f19 f73b 85a0 c656 373a ec34 55fb e1fc 124e 4674 1ba8 1a84 6aa4 7cb5 455e f416 adc6 a125 c4d4 8323 4eee 2493 2920 4e38 524c 1981

sudo rm tempfile

sync

sudo fstrim /

sync

sudo hdparm --read-sector 5520384 /dev/sda /dev/sda: reading sector 5520384: succeeded 7746 4e11 bf42 0c93 25d3 2825 19fd 8eda bd93 8ec6 9942 bb98 ed55 87eb 53e1 01d5 c61a 3f52 19a1 0ae5 0798 c6e2 39d9 771a b89f 3fc5 e786 9b1d 3452 d5d7 9479 a80d 114a 7528 a79f f475 57dc aeaf 25f4 998c 3dd5 b44d 23bf 77f3 0ad9 8688 6518 28ee 81db 1473 08b5 befe 8f2e 5b86 c84e c7d2 1bdd 1065 6a23 fd0f 2951 d879 e823 021b fa84 b9c1 eadd 9154 c9f4 2ebe cd70 64ec 75a8 4d93 c8fa 3174 7277 1ffb e858 5eca 7586 8b2e 9dbc ab12 40ab eb17 8187 e67d 5e0d 0005 5867 b924 5cfd 6723 9e4a 6f5f 99a4 a3b0 eeac 454a 83b6 c528 1106 6682 ca77 4edf 2180 bf0c b175 fabb 3d4b 37e2 b834 9e3e 82f2 2fdd 2c6a c6ca 873f e71e f979 160f 5778 356f 2aea 6176 46b6 72b9 f76e ee51 979c 326b 1436 7cfe f677 bfcd 4c3c 9e11 4747 45c1 4bb2 4137 03a1 e4c8 e9dd 43b4 a3b4 ce1b d218 4161 bf64 727b 75d8 dcc2 e14c ebec 2126 25da 0300 12bd 6b1a 28b3 824f 3911 c960 527d 97cd de1b 9f08 9a8e dcdc e65f 1875 58ca be65 82bf e844 50b8 cc1b 7466 58b8 e708 bd3d c01f 64fb 9317 a77a e43b 671f e1fb e328 93a9 c9c7 291c 56e0 c6c1 f011 b94d 9dc7 71e6 c8b1 5720 b8c9 b1a6 14f1 7299 9122 912b 312a 0f2f a31a 8bf9 9f8c 54e6 96f3 60b8 04a7 7dc9 3caa db0a a837 e5d7 2752 b477 c22d 7598 44e1 84e9 25d4 5db5 9f19 f73b 85a0 c656 373a ec34 55fb e1fc 124e 4674 1ba8 1a84 6aa4 7cb5 455e f416 adc6 a125 c4d4 8323 4eee 2493 2920 4e38 524c 1981

Zdá se, že to naznačuje, že TRIM nefunguje. Od

sudo hdparm -I /dev/sda | grep -i TRIM                        
       *    Data Set Management TRIM supported (limit 8 blocks)
       *    Deterministic read ZEROs after TRIM
 

Upravit

Související:Shell použití „:-“ a výhoda?

Zde je výstup sudo dmsetup table

lubuntu--vg-root: 0 465903616 linear 252:0 2048
lubuntu--vg-swap_1: 0 33308672 linear 252:0 465905664
sda3_crypt: 0 499222528 crypt aes-xts-plain64 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0 8:3 4096 1 allow_discards
 

Zde je můj /etc/fstab :

# <file system> <mount point>   <type>  <options>       <dump>  <pass>
/dev/mapper/lubuntu--vg-root /               ext4    errors=remount-ro 0       1
# /boot was on /dev/sda2 during installation
UUID=f700d855-96d0-495e-a480-81f52b965bda /boot           ext2    defaults        0       2
# /boot/efi was on /dev/sda1 during installation
UUID=2296-2E49  /boot/efi       vfat    defaults        0       1
/dev/mapper/lubuntu--vg-swap_1 none            swap    sw              0       0
# tmp
tmpfs /tmp tmpfs nodev,nosuid,noexec,mode=1777          0       0 
 

Upravit:

Nakonec jsem to nahlásil jako chybu na https://bugs.launchpad.net/ubuntu/+source/lvm2/+bug/1213631

Doufám, že tam někdo najde řešení nebo alespoň otestuje nastavení a ověří chybu.

Aktualizovat

Nyní to funguje, viz přijatá odpověď.

Přijatá odpověď:

Doporučuji použít jinou metodu testování. hdparm je trochu divné, protože dává adresy zařízení spíše než adresy souborového systému a neříká, ke kterému zařízení se tyto adresy vztahují (např. řeší oddíly, ale ne cíle mapovače zařízení atd.). Mnohem snazší použít něco, co se drží adres souborového systému, takže je to konzistentní (možná kromě netradičních souborových systémů jako zfs/btrfs).

Vytvořte testovací soubor:(záměrně ne náhodný)

# yes | dd iflag=fullblock bs=1M count=1 of=trim.test 
 

Získejte adresu, délku a velikost bloku:(přesný příkaz závisí na filefrag verze)

# filefrag -s -v trim.test
File size of trim.test is 1048576 (256 blocks, blocksize 4096)
 ext logical physical expected length flags
   0       0    34048             256 eof
trim.test: 1 extent found
 

Získejte zařízení a přípojný bod:

# df trim.test
/dev/mapper/something  32896880 11722824  20838512   37% /mount/point
 

S tímto nastavením máte soubor trim.test vyplněno yes -pattern na /dev/mapper/something na adrese 34048 o délce 256 bloky 4096 bajtů.

Přímé čtení ze zařízení by mělo způsobit yes -vzor:

# dd bs=4096 skip=34048 count=256 if=/dev/mapper/something | hexdump -C
00000000  79 0a 79 0a 79 0a 79 0a  79 0a 79 0a 79 0a 79 0a  |y.y.y.y.y.y.y.y.|
*
00100000
 

Pokud je povolena funkce TRIM, měl by se tento vzor změnit, když soubor odstraníte. Všimněte si, že mezipaměti musí být také zrušeny, jinak dd nebude znovu číst data z disku.

# rm trim.test
# sync
# fstrim -v /mount/point/ # when not using 'discard' mount option
# echo 1 > /proc/sys/vm/drop_caches
# dd bs=4096 skip=34048 count=256 if=/dev/mapper/something | hexdump -C
 

Na většině SSD by to mělo za následek nulový vzor:

00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00100000
 

Pokud se jedná o šifrování, uvidíte místo toho náhodný vzor:

00000000  1f c9 55 7d 07 15 00 d1  4a 1c 41 1a 43 84 15 c0  |..U}....J.A.C...|
00000010  24 35 37 fe 05 f7 43 93  1e f4 3c cc d8 83 44 ad  |$57...C...<...D.|
00000020  46 80 c2 26 13 06 dc 20  7e 22 e4 94 21 7c 8b 2c  |F..&... ~"..!|.,|
 

Je to proto, že fyzicky oříznutá krypto vrstva čte nuly a dešifruje tyto nuly na „náhodná“ data.

Související:Použít scp k přenosu souboru z místního adresáře X do vzdáleného adresáře Y?

Pokud yes -vzor přetrvává, pravděpodobně nebylo provedeno žádné oříznutí.


Linux
  1. LVM a klonování HD

  2. Najděte rozdíl pomocí mtime - a +

  3. dělení a subvol strategie s btrfs

  1. Extrahování a zobrazení dat pomocí awk

  2. Použití TRIM a DISCARD s SSD připojenými k řadiči RAID

  3. Nejlepší pořadí RAID, LVM a LUKS

  1. Spuštění skriptu s „. “ A se „zdrojem“?

  2. Příkazy LVM selžou s „Nepodařilo se načíst konfigurační soubor /etc/lvm/lvm.conf“

  3. LVM a multipathing – vzorové řetězce filtrů LVM