Як працює зондування?


12

Я шукав спосіб оновити шину scsi (або будь-яку іншу шину для цього), яка дозволила б моєму ядру (2.6.18-194-el5 на CentOS 5.5) знати про розділи на диску, і я не міг я не знайду способу. partprobe зробив це миттєво. Як?

Оскільки це важливо, ось що я робив:

Я хотів отримати певну практику в конкретних розділах, таких як зміна розміру, резервне копіювання MBR та відновлення його тощо. Я створив розділ на 20 ГБ на / dev / sdb, створив резервну копію MBR:

dd, якщо = / dev / sdb = sdb.mbr bs = 512 count = 1

потім я зайшов у fdisk, видалив розділ, написав його та вийшов.

ls / dev / sdb *

показали, що перегородки не було, і

fdisk -l / dev / sdb '

збігався, тому я подумав, що я хороший.

Потім я повернув DD:

dd, якщо = sdb.mbr of = / dev / sdb bs = 512 count = 1

Звичайно, я нічого тоді не робив

ls / dev / sdb *

не вказав жодних розділів, але

fdisk -l

показав розділ, імовірно, тому, що він читає перші 512 байти на диску і не покладається на ядро. Я знав, що мені доведеться оновити шину, тому зайшов у / sys / class / scsi_host / host1, і зробив

ехо "- - -"> сканування

і робити

ls / dev / sdb

не показав нічого нового, тож я перейшов до / sys / bus / scsi / пристроїв, і для кожного з перерахованих пристроїв я зробив

echo 1> переглядати

і це не спрацювало.

Потім я провів більше досліджень проблеми і натрапив на "partprobe", який поставляється з розірваним. Я запустив його, і це спрацювало миттєво.

Якщо я не отримаю ймовірної відповіді тут, я, мабуть, збираюся просто дістати джерело і переглянути його, але я вважаю, що за мною тут є чарівники, тож я подумав, що звернусь до вас усіх.

Відповіді:


12

Partprobe називає BLKRRPARTioctl, який зафіксовано у, err include/linux/fs.h, та поза цим джерелом ядра (м'ясо знаходиться rescan_partitions()):

#define BLKRRPART  _IO(0x12,95) /* re-read partition table */

Найпростіший спосіб дізнатися це - запустити strace -e raw=ioctl -e open,ioctl partprobe /dev/sdb.

Я думаю, що те, що ви спробували, /sys/*/*scanговорить ядру перевірити, чи не відбулася зміна диска. Це не допоможе, якщо накопичувач не змінився (або його перенесли в такий спосіб, що ядро ​​не виявляє?), Але структура розділу на ньому змінилася.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.