Я предлагаю использовать другой метод тестирования. hdparm
является немного странным, поскольку это дает адреса устройства, а не адреса файловой системы, и это не говорит, какого устройства те адреса касаются (например, это разрешает разделы, но не devicemapper цели, и т.д.). Намного легче использовать что-то, что придерживается адресов файловой системы, тот способ, которым это последовательно (возможно, за исключением нетрадиционных файловых систем как zfs/btrfs).
Создайте тестовый файл: (не случайный нарочно)
# yes | dd iflag=fullblock bs=1M count=1 of=trim.test
Получите адрес, длину и blocksize: (точная команда зависит от filefrag
версия)
# 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
Получите устройство и точку монтирования:
# df trim.test
/dev/mapper/something 32896880 11722824 20838512 37% /mount/point
С настроенным, у Вас есть файл trim.test
заполненный yes
- шаблон на /dev/mapper/something
в адресе 34048
с длиной 256
блоки 4096
байты.
Чтение, который от устройства непосредственно должен произвести yes
- шаблон:
# 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
Если ОБРЕЗКА включена, этот шаблон должен измениться при удалении файла. Обратите внимание, что кэши должны быть отброшены также, иначе dd
не перечитает данные из диска.
# 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
На большей части SSD, который привел бы к нулевому шаблону:
00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00100000
Если шифрование будет включено, то Вы будете видеть случайный шаблон вместо этого:
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..&... ~"..!|.,|
Поэтому физически обрезанный, crypto чтения слоя обнуляют и дешифруют, они обнуляют к "случайным" данным.
Если yes
- шаблон сохраняется, скорее всего, никакая обрезка не была сделана.
Да, reg<0xxxx 0xxxxx>
означает reg<длина смещения>
.
смещение
является базовым адресом устройства, а длина определит диапазон адресов данного устройства.
No tiene que ser solo dos números en general
Además, como se explica en :https://elinux.org/Device_Tree_Usage#How_Addressing_Works, no tiene que ser solo dos números cada uno.
Por ejemplo, en dispositivos de 64 bits, a menudo tenemos:
#address-cells = <2>;
#size-cells = <2>;
lo que implica que la dirección y el desplazamiento son del tipo:
reg = <0x1 0x2 0x3 0x4>
que representa una región con:
#address-cells = <2>;
)#size-cells = <2>;
)Esto se debe a que cada número en el árbol de dispositivos tiene un ancho de 32 -bits por definición, por lo que necesitamos dos para cada valor de 64 bits.
Угловые скобки (<> )обозначают «32 -битный массив целых чисел без знака», и я полагаю, что их часто называют «ячейками». В случае со свойством reg
первое значение — это (адрес смещения ), а второе — длина регистра (с ). Обратите внимание, что также возможно иметь несколько диапазонов, т.е.
reg = <addr1 addr1_length addr2 addr2_length ... addrN addrN_length>
Источники: