🌜 Как перезагрузить таблицу разделов в Linux без перезагрузки системы?

by itisgood

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

В большинстве случаев таблица разделов успешно изменялась после разделения диска в виртуальных средах (таких как VMWare, Virtualbox и т. д.).

Но это не происходит на физических серверах, тогда какое решение сообщить ОС об изменениях таблицы разделов?

Есть решение.

Тем не менее, мы не можем давать вам гарантию, что оно будет работать на 100%, но оно будет работать в большинстве случаев.

Я могу сказать другими словами. Это будет работать на 99% согласно моему опыту и знаниям.

Эти методы заставляют ядро перезагружать таблицу разделов и повторно заполнять ее идентификаторы в /dev.

Если вы ищете утилиты для разделов диска, вы можете попробовать одну из них.

Утилиты дискового разделения – это fdisk и parted.

Если вы хотите прочитать соответствующие статьи о разделах диска, вы можете перейти к следующим статьям.

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

The partition table has been altered.
Syncing disks.

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

The partition table has been altered.
Calling ioctl() to re-read partition table.
Re-reading the partition table failed.: Device or resource busy
 
The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8).

Я протестировал приведенные ниже команды в системе Arch Linux, и они работали нормально, кроме команды partx.

Потому что я не вижу никаких логов журнале dmesg после запуска команды partx.

Однако он работал нормально, как и ожидалось в системах RHEL 7.

Я бы посоветовал вам выполнить любую из приведенных ниже команд после добавления раздела в систему Linux, чтобы проинформировать ОС об изменениях таблицы разделов.

Это можно сделать с помощью следующих четырех методов.

  • partprobe: partprobe – это программа, которая информирует ядро операционной системы об изменениях таблицы разделов, запрашивая у операционной системы перечитывание таблицы разделов.
  • blockdev: Утилита blockdev позволяет вызывать ioctl для блочных устройств из командной строки.
  • hdparm: hdparm предоставляет интерфейс командной строки для различных интерфейсов ядра, поддерживаемых подсистемой «libata» Linux SATA / PATA / SAS и более старой подсистемой драйверов IDE.
  • partx: partx сообщает ядру о наличии и нумерации разделов на диске.

Как перезагрузить таблицу разделов в Linux с помощью команды partprobe

partprobe – это программа, которая информирует ядро операционной системы об изменениях таблицы разделов, запрашивая у системы, чтобы она перечитала таблицу разделов.

Это стандартная и нативная команда для выполнения этой задачи.

В этом примере я собираюсь использовать /dev/sdb. Помните, что вам нужно ввести имя вашего устройства вместо нашего.

$ sudo partprobe /dev/sdb

dmesg используется для проверки или управления кольцевым буфером ядра.

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

Да, я вижу изменения, потому что в dmesg есть новый лог для устройства SDB.

$ dmesg | grep sdb
[    3.143163] sd 3:0:0:0: [sdb] 20971520 512-byte logical blocks: (10.7 GB/10.0 GiB)
[    3.143186] sd 3:0:0:0: [sdb] Write Protect is off
[    3.143192] sd 3:0:0:0: [sdb] Mode Sense: 00 3a 00 00
[    3.143276] sd 3:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[    3.145620] sd 3:0:0:0: [sdb] Attached SCSI disk
[  188.810583]  sdb: sdb1 sdb2 sdb3 sdb4 < sdb5 >
[  219.112109]  sdb: sdb1 sdb2 sdb3 sdb4 < sdb5 >

Как перезагрузить таблицу разделов в Linux с помощью команды blockdev

Утилита blockdev позволяет вызывать ioctl блочных устройств из командной строки.

Мы можем использовать команду blockdev для выполнения этой задачи.

$ sudo blockdev --rereadpt -v /dev/sdb

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

Да, я вижу изменения, потому что в dmesg снова появился новый лог для устройства sdb.

$ dmesg | grep sdb
[    3.143163] sd 3:0:0:0: [sdb] 20971520 512-byte logical blocks: (10.7 GB/10.0 GiB)
[    3.143186] sd 3:0:0:0: [sdb] Write Protect is off
[    3.143192] sd 3:0:0:0: [sdb] Mode Sense: 00 3a 00 00
[    3.143276] sd 3:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[    3.145620] sd 3:0:0:0: [sdb] Attached SCSI disk
[  188.810583]  sdb: sdb1 sdb2 sdb3 sdb4 < sdb5 >
[  219.112109]  sdb: sdb1 sdb2 sdb3 sdb4 < sdb5 >
[  422.506376]  sdb: sdb1 sdb2 sdb3 sdb4 < sdb5 >

Как перезагрузить таблицу разделов в Linux с помощью команды hdparm

hdparm предоставляет интерфейс командной строки для различных интерфейсов ядра, поддерживаемых подсистемой «libata» Linux SATA / PATA / SAS и более старой подсистемой драйверов IDE.

В качестве альтернативы, мы можем использовать команду hdparm для выполнения этой задачи.

$ sudo hdparm -z /dev/sdb

/dev/sdb:
 re-reading partition table

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

Да, я вижу изменения, потому что в dmesg снова появился новый лог для устройства sdb.

$ dmesg | grep sdb
[    3.143163] sd 3:0:0:0: [sdb] 20971520 512-byte logical blocks: (10.7 GB/10.0 GiB)
[    3.143186] sd 3:0:0:0: [sdb] Write Protect is off
[    3.143192] sd 3:0:0:0: [sdb] Mode Sense: 00 3a 00 00
[    3.143276] sd 3:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[    3.145620] sd 3:0:0:0: [sdb] Attached SCSI disk
[  188.810583]  sdb: sdb1 sdb2 sdb3 sdb4 < sdb5 >
[  219.112109]  sdb: sdb1 sdb2 sdb3 sdb4 < sdb5 >
[  422.506376]  sdb: sdb1 sdb2 sdb3 sdb4 < sdb5 >
[  504.328312]  sdb: sdb1 sdb2 sdb3 sdb4 < sdb5 >

Как перезагрузить таблицу разделов в Linux с помощью команды partx

partx сообщает ядру о наличии и нумерации разделов на диске.

Команда partx является частью пакета util-linux и доступна из архива ядра Linux.

В качестве альтернативы, мы можем использовать команду partx для выполнения этой задачи.

$ sudo partx -a /dev/sdb
или
$ sudo partx -u /dev/sdb
partx: /dev/sdb: error adding partitions 1-5

Вы можете дважды подтвердить это, выполнив следующую команду.

Если таблица разделов успешно перезагружена и видна ядру, вы можете увидеть эти новые разделы в этом месте.

$ cat /proc/partitions
major minor  #blocks  name

   8        0   31457280 sda
   8        1   31455232 sda1
   8       16   10485760 sdb
   8       17    1048576 sdb1
   8       18     512000 sdb2
   8       19     512000 sdb3
   8       20          1 sdb4
   8       21    1048576 sdb5
   8       32   10485760 sdc

Эту же информацию можно найти с помощью следующей команды ls.

$ ls -l /dev/sdb*
brw-rw---- 1 root disk 8, 16 Mar  8 07:23 /dev/sdb
brw-rw---- 1 root disk 8, 17 Mar  8 07:23 /dev/sdb1
brw-rw---- 1 root disk 8, 18 Mar  8 07:23 /dev/sdb2
brw-rw---- 1 root disk 8, 19 Mar  8 07:23 /dev/sdb3
brw-rw---- 1 root disk 8, 20 Mar  8 07:23 /dev/sdb4
brw-rw---- 1 root disk 8, 21 Mar  8 07:23 /dev/sdb5

Эту же информацию можно найти с помощью следующей команды partx.

$ sudo partx -l /dev/sdb
# 1:      2048-  2099199 (  2097152 sectors,   1073 MB)
# 2:   2099200-  3123199 (  1024000 sectors,    524 MB)
# 3:   3123200-  4147199 (  1024000 sectors,    524 MB)
# 4:   4147200- 20971519 ( 16824320 sectors,   8614 MB)
# 5:   4149248-  6246399 (  2097152 sectors,   1073 MB)

 

You may also like

Leave a Comment