Вопрос или проблема
У многих новых жестких дисков физический размер сектора составляет 4096. Возможно ли заставить систему использовать логический размер сектора того же размера, а не стандартный логический размер сектора 512?
Ускорит ли это массовые операции чтения и записи?
Где это можно настроить?
Размер 512 байт на самом деле не является стандартным размером сектора. Это зависит от вашего оборудования.
Вы можете отобразить, какие физические/логические размеры секторов ваш диск сообщает через псевдофайловую систему /sys
, например:
# cat /sys/block/sda/queue/physical_block_size
4096
# cat /sys/block/sda/queue/logical_block_size
512
В чем разница между этими двумя значениями?
physical_block_size
— минимальный размер блока, который диск может записать атомарно.logical_block_size
— это наименьший размер, который диск может записать (см. документацию ядра Linux).
Таким образом, если у вас диск 4k, имеет смысл, чтобы ваш стек хранения (файловая система и т.д.) использовал что-то равное или большее, чем физический размер сектора.
Эти значения также отображаются в последних версиях fdisk
, например:
# fdisk -l /dev/sda
[..]
Sector size (logical/physical): 512 bytes / 4096 bytes
В текущих дистрибутивах Linux программы (которым следует учитывать оптимальный размер сектора) такие как mkfs.xfs
по умолчанию выберут оптимальный размер сектора (например, 4096 байт).
Но вы также можете явно указать его с помощью опции, например:
# mkfs.xfs -f -s size=4096 /dev/sda
Или:
# mkfs.ext4 -F -b 4096 /dev/sda
В любом случае, большинство вариантов mkfs
также отобразят используемый размер блока во время выполнения.
Для существующей файловой системы размер блока можно определить с помощью команды, например:
# xfs_info /mnt
[..]
meta-data= sectsz=4096
data = bsize=4096
naming =version 2 bsize=4096
log =internal bsize=4096
= sectsz=4096
realtime =none extsz=4096
Или:
# tune2fs -l /dev/sda
Block size: 4096
Fragment size: 4096
Или:
# btrfs inspect-internal dump-super /dev/sda | grep size
csum_size 4
sys_array_size 97
sectorsize 4096
nodesize 16384
leafsize 16384
stripesize 4096
dev_item.sector_size 4096
При создании файловой системы на разделе, другой аспект, который нужно проверить, это выравнено ли начальное адресное пространство раздела с физическим размером блока. Например, посмотрите вывод fdisk -l
, преобразуйте начальные адреса в байты, разделите их на физический размер блока — остаток должен быть нулем, если разделы выровнены.
Нет, это невозможно, и это не имело бы значения, даже если было бы возможно. Ввод-вывод, как правило, выполняется в единицах по крайней мере 4096 байт, а чаще всего намного больше.
См. Stack Exchange: Изменение логического размера сектора на 4k
Используйте hdparm --set-sector-size 4096 /dev/sdX
НО ВНИМАНИЕ согласно руководству:
…Для дисков, которые поддерживают перенастройку логического размера сектора, этот флаг можно использовать для указания нового желаемого размера сектора в байтах. ОЧЕНЬ ОПАСНО. Это, вероятно, нарушит все данные на диске. Указанный размер должен быть одним из 512, 520, 528, 4096, 4160 или 4224. Очень немногие диски поддерживают значения, отличные от 512 и 4096.…
Да, это возможно, однако это приведет к тому, что диск заполнится намного быстрее, чем должен. Для файлов размером менее 512 Кб каждый файл будет занимать полный 4096 К (4 МБ), заполняя остаток сектора нулями из-за невозможности большинства файловых систем (таких как NTFS и подобных) позволить файлам делить сектора.
Лучшая опция для файловой системы — разрешить переменные размеры секторов, однако это увеличивает размер MFT (главной файловой таблицы) и увеличивает риск повреждения данных при уменьшении возможности легкого восстановления данных. Иными словами, границы будут не полностью известны программам для восстановления данных.
Так что, хотя логический размер сектора 4096K отлично подходит для больших файлов, для обычного повседневного использования ПК это просто куча нулей.
Теперь, с учетом сказанного, есть возможность хранения данных в самом MFT, когда дело касается данных меньших, чем логический размер сектора. Однако это значит, что ваш MFT становится огромным, и данные будут записаны дважды (на вашем жестком диске имеются две копии MFT). Также нужно будет указать максимальный размер MFT, что может вызвать проблемы, когда либо вы достигнете его максимума, либо использование диска превысит то, что будет свободно для использования MFT.
Все это основано на использовании файловой системы NTFS.
К счастью, NTFS позволяет использовать нативное сжатие файлов на уровне блоков для любого логического размера сектора 4 МБ или меньше. Это ограничение применяется из-за способа работы сжатия NTFS. Блоки по 4 МБ читаются и сжимаются независимо от логического размера сектора. Это, конечно, не может происходить для чего-либо большего, чем 4 МБ в размере сектора из-за пересечения границ и потери данных.
Так что, это немного проясняет ситуацию для вас?
Сектор:
1) Логический сектор: называется Нативным сектором.
Настройки производителя по умолчанию. Пользователь не может изменить.
До 2010 года: 512b/сектор
После 2010 года: 4k/сектор.
Некоторые производители предоставляют инструмент для изменения нативного сектора.
2) Физический сектор: называется Кластером (или единицей выделения - FAT windows) или Блоком (Linux/Unix)
Пользователь может изменять физический размер сектора 512b, 1k, 2k, 4k,... с помощью инструмента форматирования или разбиения. Физический сектор содержит один или несколько больше нативных секторов.
(пример1: если у вас HDD с 512b/нативным сектором: пользователь может установить 4K/физический сектор. это значит 1 кластер = 4 нативных сектора)
(пример2: если у вас HDD с 4K/нативным сектором: пользователь может установить 4K/физический сектор. это значит 1 кластер = 1 нативный сектор)
3) Файловая система работает только с физическим сектором (или блоком или кластером).
.
Ответ или решение
Оптимизация логического размера сектора для современных жестких дисков с физическим размером сектора 4096 байт является важной задачей для повышения эффективности работы системы. Рассмотрим теоретические основы, практические примеры и применение этих знаний.
Теория
-
Физический и логический размеры сектора. Физический сектор (или блок) — это минимальный размер блока данных, который жесткий диск может записать за один раз. В современных HDD стандартный физический сектор имеет размер 4096 байт. Логический сектор — это наименьший размер блока, который файловая система может адресовать для операций чтения и записи.
-
Причины изменения размера сектора. С течением времени размер физического сектора увеличился до 4096 байт, так как это позволяет более эффективно использовать поверхность диска, снижает износ, а также увеличивает емкость накопителя без увеличения физического пространства. Однако многие операционные системы и файловые системы до сих пор настроены на работу с логическими секторами размером 512 байт, что может привести к дополнительной нагрузке на систему из-за множества мелких операций записи и чтения.
-
Проблема разницы размеров. Когда логический размер сектора меньше физического, одна операция записи может приводить к необходимости переписывать целый физический блок, что создает излишние операции ввода-вывода и снижает производительность.
Примеры и конфигурация
-
Отображение текущих размеров секторов. Чтобы узнать, какие физические и логические размеры секторов поддерживает ваш диск, можно воспользоваться командой в Linux:
cat /sys/block/sda/queue/physical_block_size cat /sys/block/sda/queue/logical_block_size
Или использовать
fdisk
:fdisk -l /dev/sda
-
Конфигурация файловых систем. При создании новой файловой системы важно убедиться в соответствии размеров секторов. Например, создавать файловую систему с блоками размером 4096 байт можно с помощью:
mkfs.xfs -f -s size=4096 /dev/sda
или
mkfs.ext4 -F -b 4096 /dev/sda
-
Анализ существующей файловой системы. Чтобы проверить текущие настройки блоков на существующей файловой системе, используются такие команды как
xfs_info
,tune2fs
, илиbtrfs inspect-internal
.
Применение и последствия
-
Оптимизация производительности. Переход на логические сектора размером 4096 байт, совпадающие с физическими, может значительно увеличить скорость работы при крупных операциях ввода-вывода. Однако, для повседневной работы, особенно с мелкими файлами, это может привести к неэффективному использованию дискового пространства из-за неизбежных потерь (внутренней фрагментации).
-
Риски и предостережения. Смена логического размера сектора на 4096 байт с помощью утилит, таких как
hdparm
, является рискованной операцией, способной привести к потере данных. Очень немногие диски поддерживают такую смену, и чаще всего эти изменения могут "запутать" систему, особенно если файловая система изначально настроена на меньший размер. -
Аргументы за и против. Следует учитывать, что переход на более крупные логические сектора следует проводить с осторожностью и пониманием того, что это может быть полезно в определенных сценариях, например, на серверах, где мы обрабатываем большие файлы, но не всегда уместно в повседневном использовании обычного компьютера.
Заключение
Оптимизация логического размера сектора на современных HDD с физическим размером 4096 байт требует взвешенного подхода, анализа текущих задач и условий эксплуатации. Хотя потенциальное ускорение операций ввода-вывода и предлагает значительные преимущества, риски и возможные потери места должны тщательно оцениваться. Правильная конфигурация и понимание работы вашей файловой системы помогут извлечь максимум из вашего оборудования, избегая при этом нежелательных последствий.