У меня есть пролиант, работающий под управлением Red Hat 7, с двумя дисками данных с рейдом 1 (аппаратный рейд).
Я создал файловую систему с помощью этой команды:
mkfs.xfs /dev/sdb
Размер блока по умолчанию для xfs - 4096.
Так blockdev --report
показать это:
RO RA SSZ BSZ 1er sect. Taille Périphérique
rw 8192 512 4096 0 600093712384 /dev/sdb
Все нормально.
Если я смонтирую привод, то blockdev --report
показать это:
RO RA SSZ BSZ 1er sect. Taille Périphérique
rw 8192 512 512 0 600093712384 /dev/sdb
Таким образом, после монтирования размер блока кажется 512 вместо 4096.
Я не могу понять почему. У меня есть база данных tu, помещенная на этот диск, и мне нужен размер блока 4096. Любая идея ? Размер блока 512 или 4096?
Когда раздел смонтирован, размер блока будет установлен в соответствии с размером блока раздела. В противном случае он будет отображать размер блока по умолчанию для фактического устройства.
Что больше всего сбивает с толку в вашем случае, так это то, что на нем нет разделов, что сделало бы ситуацию более очевидной.
Краткий ответ: во время монтирования XFS устанавливает «размер блока» блочного устройства равным «размеру сектора», показанному в выводе mkfs.xfs или xfs_info. Изменение размера сектора формата во время mkfs приведет к другому «размеру блока» блочного устройства при монтировании.
Более длинный ответ: XFS устанавливает размер блока блочного устройства во время монтирования равным его внутреннему размеру «сектора», который является наименьшей степенью детализации ввода-вывода, которую он будет выполнять. Он делает это сегодня через set_blocksize()
позвонить в xfs_setsize_buftarg()
.
В исходном вопросе выше файловая система имеет размер блока 4 КБ, но размер сектора 512 байт; это означает, что обновления метаданных по-прежнему могут выполняться в 512-байтовых IO, и, следовательно, XFS устанавливает «размер блока» блочного устройства равным 512.
Если вы используете -s sectsize
в mkfs.xfs, это изменит наименьшую единицу ввода-вывода до указанного вами размера, и XFS также установит для блочного устройства «размер блока» то же самое значение во время монтирования.
Примечание. Размер выбранного вами сектора не должен быть больше максимального атомарного ввода-вывода, который может выполнить диск, поскольку XFS ожидает, что запись размером с сектор будет либо полностью записана, либо завершится с ошибкой, без частичной записи между ними. Как правило, mkfs.xfs запрашивает у устройства соответствующий размер сектора и выбирает правильные значения по умолчанию.
Я понятия не имею Зачем это есть, но я сделал следующее:
$ mkfs -t xfs -f /dev/sdb
meta-data=/dev/sdb isize=512 agcount=21, agsize=268435455
blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=5370675200, imaxpct=5
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=521728, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
$ blockdev --report /dev/sdb
RO RA SSZ BSZ StartSec Size Device
rw 256 512 4096 0 21998285619200 /dev/sdb
$ mount /scratch/
$ blockdev --report /dev/sdb
RO RA SSZ BSZ StartSec Size Device
rw 256 512 512 0 21998285619200 /dev/sdb
Не удивительно. Такой же как ты. (BSZ
переходит на 512 при установке) Затем я попробовал -s
параметр:
$ mkfs -t xfs -f -s size=4096 /dev/sdb -L cta5.scratch
meta-data=/dev/sdb isize=512 agcount=21, agsize=268435455
blks
= sectsz=4096 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=5370675200, imaxpct=5
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=521728, version=2
= sectsz=4096 sunit=1 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
$ blockdev --report /dev/sdb
RO RA SSZ BSZ StartSec Size Device
rw 256 512 4096 0 21998285619200 /dev/sdb
$ mount /scratch/
$ blockdev --report /dev/sdb
RO RA SSZ BSZ StartSec Size Device
rw 256 512 4096 0 21998285619200 /dev/sdb
В sectsz
изменилось в mkfs
ответ на команду. И ура! Стоит на 4к БСЗ. Что бы это ни значило ...
Это файловая система RAID0 размером 10 × 2 ТБ. И моя ОС тоже является производной от RHEL7.
Вероятно, это связано с тем, что раздел был создан с небольшим размером сектора. попробуй это:
mkfs.xfs -s size=4096 -b size=4096 -f /dev/sdb1
(сначала убедитесь, что вы сделали резервную копию данных), а затем смонтируйте файл fs.