Назад | Перейти на главную страницу

blockdev сообщает о другом размере блока, если он установлен

У меня есть пролиант, работающий под управлением 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.