Как определить размер считывания аппаратного блока для моего жесткого диска?

47

Я пытаюсь определить оптимальный размер для большой копии с моего жесткого диска, используя dd. Я пытаюсь выяснить, какой размер блока лучше всего использовать, и я бы предположил, что это размер аппаратного блока для этого диска.

пламя
источник
Связано с
ошибкой
1
@Sepero предоставил единственный реальный ответ.
Sjas

Ответы:

44

Команда lsblk отлично подходит для этого:

lsblk -o NAME,PHY-SeC

Результаты:

NAME   PHY-SEC 
sda        512 
├─sda1     512 
├─sda2     512 
└─sda5     512 
Томас Братт
источник
3
Различает ли он логический размер и физический размер?
CMCDragonkai
2
Не предоставит фактический физический размер.
Sjas
7
У меня работает, PHY-SEC показывает правильный физический, а LOG-SEC показывает логический размер.
согер
31

Linux выставляет размер физического сектора в файлах /sys/block/sdX/queue/physical_block_size. Хотя, чтобы получить лучшую производительность, вам, вероятно, следует провести небольшое тестирование с различными размерами и размерами. Я мог бы не найти в ясный ответ в том , что , используя именно физический размер блока будет получить результат оптимального (хотя я предполагаю , что это не может быть плохим выбором).

hlovdal
источник
2
У меня есть система Debian Lenny (ядро 2.6.26), которая предоставляет только hw_sector_size в этом месте, и более новая система Ubuntu Karmic (ядро 2.6.31), которая обеспечивает и то, и другое. так что это в некоторой степени зависит от используемого ядра.
шарлатан-кихот
Не предоставит фактический физический размер.
Sjas
@sjas Не могли бы вы расширить? Откуда ты это знаешь?
Хашим
1
@Hashim Я протестировал несколько старых жестких дисков, которые у меня были, где у некоторых был 512b, а у некоторых размер сектора 4k. superuser.com/a/426015/145072 - это решение, которое действительно работает. все, кроме того hdparm, вероятно, будет лгать вам.
sjas
28
$ sudo hdparm -I /dev/sda | grep -i physical
Physical Sector size:                  4096 bytes

http://wayback.archive.org/web/20150921015457/https://nxadm.wordpress.com/2010/04/30/4096-physical-block-size-drives/

Sepero
источник
3
Это должен быть принятый ответ, поскольку он является единственным, обеспечивающим реальную физическую ценность.
Sjas
4
hdparm -I /dev/sda | grep Sectorлучше, так как он покажет как физические, так и логические размеры одновременно, для удобства сравнения.
Sjas
7

Мой не предназначен для полного ответа, но я надеюсь, что это также помогает.

Вот кое-что из http://mark.koli.ch/2009/05/howto-whole-disk-backups-with-dd-gzip-and-p7zip.html


3 - Определите подходящий размер блока

Для более быстрого резервного копирования это может помочь определить оптимальный размер блока дискового устройства, которое вы собираетесь сделать резервную копию. Предполагая, что вы собираетесь сделать резервную копию / dev / sda, вот как вы можете использовать команду fdisk для определения наилучшего размера блока:

rescuecd#/> /sbin/fdisk -l /dev/sda | grep Units

Units = cylinders of 16065 * 512 = 8225280 bytes

Обратите внимание, что на выводе fdisk указано «цилиндры 16065 * 512». Это означает, что на диске 512 байт на блок. Вы можете значительно повысить скорость резервного копирования, увеличив размер блока кратным 2-4. В этом случае оптимальный размер блока может быть 1 КБ (512 * 2) или 2 КБ (512 * 4). Кстати, жадность и использование блока размером 5k (512 * 10) или чего-то чрезмерного не поможет; в конечном итоге система станет узким местом на самом устройстве, и вы не сможете выжать какую-либо дополнительную производительность из процесса резервного копирования. (выделение добавлено)


Я подозреваю, что разница в производительности между почти оптимальным и оптимальным размером блока для данной конфигурации незначительна, если набор данных не огромен. Действительно, пользователь FixUnix (сообщение от 2007 года) утверждал, что его оптимальные времена были только на 5% быстрее, чем неоптимальные. Может быть, вы можете выжать немного больше эффективности, используя кратный размер «кластера» или размер блока файловой системы.

Конечно, если вы переместитесь слишком далеко по обе стороны от оптимального размера блока, у вас возникнут проблемы.

Суть в том, что вы, скорее всего, получите только около 5% производительности (то есть 3 минуты в час) при абсолютном оптимальном размере блока, поэтому подумайте, стоит ли вам потратить время и усилия на дальнейшие исследования. Пока вы держитесь подальше от экстремальных ценностей, вы не должны страдать.

Марк С
источник
1
какая-то причина для использования echo "p" | /sbin/fdisk /dev/sda...вместо /sbin/fdisk -l /dev/sda...? второй будет чище и не будет пытаться внести какие-либо изменения.
шарлатан-кихот
Вам лучше всего спросить Марка Колича (связано). Он создавал резервную копию, а я только процитировал раздел его статьи.
Марк С
1
@MarkC Связанная статья использует /sbin/fdisk -l /dev/sda | grep Units. Возможно, он изменился за последние два года. В любом случае я обновил ваш ответ.
Боб
2
ИМО это самый полезный ответ в основном из-за последнего выделенного жирным шрифтом абзаца. Linux очень усердно работает над оптимизацией доступа к диску, поэтому, пока вы используете соответствующий планировщик ввода-вывода и настройки грязного буфера для вашего диска, размер блока 8192 байта должен подойти для любой ситуации.
согер
4

Каждая передача диска генерирует прерывание, которое должен обрабатывать процессор. Типичный диск 50 Мбит / с захочет генерировать 100000 из них каждую секунду при размере блока 512 байт. Обычный процессор будет обрабатывать 10 тысяч из них, поэтому больший (2 ^ x) размер блока будет более удобен (4 КБ как размер блока ФС по умолчанию в большинстве случаев). системы до 64К размера ISA DMA) было бы более практичным ...

Заб
источник
Не могли бы вы уточнить?
Sjas
1
@Sjas То, что он или она говорит, очевидно, что каждый сектор передается отдельно со связанным «прерыванием», которое должен обработать процессор. Больший размер блока означает меньшее количество прерываний (и, следовательно, меньшее количество используемых циклов ЦП) для одного и того же объема данных.
Марк С
1

Кроме того, вы можете просмотреть выходные данные, lshwчтобы проверить другие результаты (а также потому, что я, кажется, hdparmнедоступен в моем дистрибутиве). Это может помочь сузить его:

sudo lshw | awk 'BEGIN {IGNORECASE=1;} /SCSI/,!//{print}'
Эллиптический вид
источник