Вопрос: Перечитать таблицу разделов без перезагрузки?


Иногда при изменении размера или в противном случае с разделами на диске cfdisk скажет:

Wrote partition table, but re-read table failed. Reboot to update table.

(Это также происходит с другими инструментами секционирования, поэтому я думаю, что это проблема Linux, а не проблема cfdisk.) Почему это и почему это происходит иногда, и что я могу сделать, чтобы избежать этого?

Примечание. Предположите, что ни один из разделов, которые я редактирую, не открывается, не монтируется и не используется иным образом.


Обновить:

cfdisk использует ioctl(fd, BLKRRPART, NULL) чтобы Linux перечитал таблицу разделов. Два других инструмента, рекомендованных до сих пор (hdparm -z  DEVICE, sfdisk -R  DEVICE) делает то же самое. partprobe  DEVICE команда, с другой стороны, похоже, использует новый ioctl, называемый BLKPG, что может быть лучше; Я не знаю. (Он также возвращается к BLKRRPART, если BLKPG не работает.)

Кажется, что BLKPG «изменил этот раздел, вот новый размер», и это выглядело так: partprobe называется индивидуально для всех разделов на переданном устройстве, поэтому он должен работать, если отдельные разделы не используются. Однако у меня не было возможности попробовать.


64
2017-07-05 12:10


Источник


man sfdisk говорит: Since version 2.26 sfdisk no longer provides the -R or --re-read option to force the kernel to reread the partition table. Use blockdev --rereadpt instead. - Tom Hale


Ответы:


ИМХО самый надежный / лучший ответ

partprobe /dev/sdX

63
2017-07-05 12:44



Я только что расширил dev под Ubuntu Server, этот dev является аппаратным рейдом. После расширения базового рейда с помощью raidcontroller я демонтировал файловую систему и попытался «partprobe / dev / sda» - это не сработало. «fdisk -l» все еще показывал старый размер. Затем я побежал «hdparm -z / dev / sda», и это сделало трюк. Затем я смогу смонтировать и изменить размер моей файловой системы без перезагрузки. Я знаю, что я не добавляю ничего, кроме YMMV. - Mwuanno
я на centos 6.5; ядро 2.6.32. все следующие команды не сделали перечитаемый раздел ядра: - partprobe / dev / sda (warnikg: kernel не удалось перечитать) - Max
@Max, я также заметил, что иногда даже partprobe печатает ошибку, что она не работает. Иногда возможна только перезагрузка. Много раз это, похоже, работает для меня, хотя. - Matt
Это не сработало для меня, потому что были некоторые каталоги, все еще смонтированные с -bind. Сам раздел был размонтирован, но привязки, указывающие на этот раздел, все еще были. Странно, что umount работал, а partprobe - нет, но после того, как вы также установили привязку, я также мог бы разбить диск. - Ethan Leroy
Это сработало для меня на CentOS 6 после того, kpartx а также udevadm trigger в течение 10 минут. Спасибо! - Mike Andrews


Перечитывание информации таблицы разделов не всегда работает, но попробуйте

hdparm -z /dev/sda

или

sfdisk -R /dev/sda

Если он работает, значения в / proc / partition будут меняться.


17
2017-07-05 12:13



hdparm работал для меня. - Prof. Falken
параметр sfdisk -R не существует. - Matt
Необходимо отметить, что hdparm команда будет работать только в том случае, если разделы не установлены. - hayavuk
... действительно, похоже sfdisk -R был удален где-то между util-linux 2.24.2 и 2.26.1 - Charles Duffy
man sfdisk говорит: Since version 2.26 sfdisk no longer provides the -R or --re-read option to force the kernel to reread the partition table. Use blockdev --rereadpt instead. - Tom Hale


На Centos7:

В соответствии с https://access.redhat.com/solutions/199573

Ты должен попытаться :

partx -u <partition>

Это сработало для меня.


9
2017-09-15 09:33



Это единственное, что работает для меня. Большое спасибо, что поделились!! Наверху дня, сэр! - NotGaeL


Примечание. Предположим, что ни один из разделов, которые я редактирую   открываются, монтируются или используются иным образом.

Учитывая это предположение, таблица разделов Можно быть успешно перепродано, и проблема не возникнет. Если вы получаете эту ошибку, это потому, что таблица разделов является в настоящее время используется, и, следовательно, нельзя повторно отсканировать, не создавая несоответствий.


7
2017-07-05 12:32



Некоторые разделы могут быть использованы, но ни один из них не является тем, что я фактически меняю, хотя они могут находиться в одной таблице разделов. - Teddy
Ядро не настолько умное. Если какой-либо раздел в таблице используется, ядро ​​не сканирует. Неправильное поведение в другом направлении может быть катастрофическим, поэтому оно безопасно. Если вы хотите использовать разделы по желанию, используйте LVM. - womble♦


Он не зависит от раздела, который вы редактируете.

Предположим, у вас есть только один жесткий диск (/dev/sda) и двух разделов (/dev/sda1, /dev/sda2), и вы установили только один раздел (/dev/sda1). Если вы удалите или измените что-либо о другом разделе, который даже не установлен (/dev/sda2), вы получите сообщение об ошибке, вызванное перечитанием таблицы разделов, и ядро ​​будет использовать старую таблицу.

Но если у вас есть два жестких диска (/dev/sda, /dev/sdb), и ни один из разделов (/dev/sdb) используются. Затем вы можете добавлять / удалять / изменять размер / редактировать разделы /dev/sdb и они будут перечитаны без каких-либо проблем. Но даже если один раздел / dev / sdb был установлен во время изменения. Затем ядро ​​будет продолжать использовать старую таблицу.


6
2017-07-05 16:39





я на centos 6.5 x64; ядро 2.6.32. и я тестирую трюк fdisk для изменения размера.

/dev/sda1 /boot
/dev/sda2 /

Все следующие команды не сделать перечитаемый ядром раздел:

  • partprobe / dev / sda   (предупреждение: ядро ​​не перечитывалось ....)
  • hdparm -z / dev / sda (Ошибка BLKRRPART: занято устройство или ресурс)
  • blockdev -rereadpt / dev / sda (Ошибка BLKRRPART: занято устройство или ресурс)
  • sfdisk -R / dev / sda (Ошибка BLKRRPART: занято устройство или ресурс)

Мне все еще нужна перезагрузка, чтобы она работала


5
2018-05-29 08:07



ни один из них не работал для меня (proxmox VM, centos 7, xfs partition, no lvm). Ответ @uus действительно работал, хотя: serverfault.com/a/722386/102252 - NotGaeL
Все вышеприведенные команды тоже не работали для меня. - Fadi Asbih
Я думаю, что у ядра 2.6.32 есть проблема, я использовал их раньше на других машинах, он работал отлично, даже при добавлении разделов с более высокими номерами между старыми разделами. т. е. sdb1 sdb2 sdb3 - удалить sdb2, затем sdb1 sdb4 sdb5 sdb3. В дополнение к выше, partx, kpartx, blockdev также не работал. - sdkks


У меня (первоначальный вопросник) возникла ситуация несколько дней назад, когда ни один из других ответов (включая partprobe /dev/sdX, в настоящее время принятый и самый высокий голос). Какие сделал однако работа была следующей:

blockdev --rereadpt /dev/sdX

(Я не знаю, почему это сработало, а другие - нет, но я рад, что это сработало, поскольку оно спасло меня от перезагрузки на занятом сервере.)


4
2017-08-28 19:15





Вы также можете попробовать:

echo 1 > /sys/block/sdX/device/rescan

(Но не будет работать, см. Комментарий ниже)


0
2017-12-29 19:11



Это не перечитывает таблицу разделов. Он просто обновляет информацию геометрии, режим кэширования и т. Д. Выдается SCSI IDENTIFY_DRIVE. - Dmitri Chubarov


kpartx -a <partition> может запускаться два раза на вновь созданный раздел .... вместо перезагрузки системы.


0
2018-03-03 19:08



Два раз? Вы также запускаете "sync; sync; sync«? Я чувствую запах суеверия ... - Teddy
Я думаю, что это суеверие исходило из того факта, что вы проверяете, синхронизируется ли ваша синхронизация, выполняя вторую синхронизацию. За исключением того, что второй является только ценным для оператора, чтобы подтвердить, что он немедленно возвращает запрос, что указывает на завершение первой синхронизации, как и ожидалось. несколько блогов и учебников позже, и .... - TechZilla


Не забудьте проверить, работает ли служба udev. Это особенно полезно, когда partprobe, hdparm, blockdev и различные другие команды, похоже, не имеют никакого отношения к тому, какие файлы устройств доступны в каталоге / dev /.


0
2017-12-19 21:12