як формат Solaris може записувати на диск без наявності vtoc?


2

Факти:

  • VTOC (або EFI) необхідний для доступу до фрагментів дискового пристрою
  • S2 фрагмент використовується для доступу до всього диску (включаючи VTOC на початку диска)
  • новий дисковий пристрій поставляється без VTOC
  • система: Solaris 10 OS, на архітектурі SPARC

Питання: Як це може бути, що цей формат здатний записати VTOC на диск, якщо він не має VTOC?

Питання докладно: Щоб створити VTOC, у форматі потрібно записати s2. Щоб написати s2, VTOC потрібно існувати. Спрощено: для створення VTOC VTOC має існувати. Як цю проблему з куркою та яйцями уникнути форматом?

ext # 1: якщо я мічу диск без маркування (c2t5006016041E076B0d8s2), трапляється таке:

[...]
11157:  open("/dev/rdsk/c2t5006016041E076B0d8s2", O_RDWR|O_NDELAY) = 3
[...]
11157/1:        write(1, " D i s k   n o t   l a b".., 33)      = 33
11157/1:        read(0, 0xFF2B9CD0, 1024)       (sleeping...)
11157/1:        read(0, " y\n", 1024)                           = 2
11157/1:        open("/dev/rdsk/c3t5006016141E076B0d8s0", O_RDONLY|O_NDELAY) = 4
11157/1:        ioctl(4, 0x0417, 0xFFBFED80)                    Err#22 EINVAL
11157/1:        close(4)                                        = 0
11157/1:        ioctl(3, 0x04C9, 0xFFBFF52C)                    = 0
11157/1:        ioctl(3, 0x0402, 0xFFBFF644)                    = 0
11157/1:        ioctl(3, 0x0418, 0xFFBFF670)                    = 0
11157/1:        ioctl(3, 0x04C9, 0xFFBFF5B4)                    = 0
11157/1:        ioctl(3, 0x04C9, 0xFFBFF5B4)                    = 0
11157/1:        ioctl(3, 0x04C9, 0xFFBFF5B4)                    = 0
11157/1:        ioctl(3, 0x04C9, 0xFFBFF5B4)                    = 0
11157/1:        ioctl(3, 0x04C9, 0xFFBFF5B4)                    = 0
11157/1:        write(1, "\n\n F O R M A T   M E N".., 15)      = 15
[...]

як називаються ті ioctl () дзвінки? Вони чисто виконують роботу, але що це за дзвінки насправді?

Відповіді:


5

ОС не використовує дзвінки читання / запису для читання або запису vtoc. Просто потрібно мати можливість успішно відкрити пристрій s2 (який є лише символьним посиланням на реальний пристрій), щоб знати, чи є там диск. Сподіваємось, немає необхідності, щоб фрагмент s2 існував на диску для успішного відкриття. Потім команда форматування використовує функції низького рівня, реалізовані в драйвері пристрою, для доступу та запису vtoc. Йоктоли, які ви спостерігали, - це саме ці дзвінки.

напр.

  • 0x0417 = DKIOCGEXTVTOC (отримати розширений vtoc)
  • 0x0402 = DKIOCSGEOM (задана геометрія)
  • 0x0418 = DKIOCSEXTVTOC (записуйте розширений vtoc на диск)

ви можете сказати мені, як ви отримали назву системних дзвінків?
асдмін

/usr/include/sys/dkio.h
jlliagre

4

На сирому рівні VTOC - це ще один блок на диску. Однак він завжди знаходиться в одному місці. формат (1й) і fmthard (1й) маніпулюють диск через накопичувач на комп'ютері ( /dev/rdsk/c...) і прямий доступ до секторів , які повинні міститися в VTOC - якщо один не існує, вони просто перезаписати існуючий вміст цього сектора.


Формат запису VTOC до s2, s2 працює лише за наявності VTOC. спрощено: VTOC можна записати лише за наявності VTOC. Ця відповідь не є відповіддю на моє запитання.
асдмін

1
@asdmin: формат записує VTOC у 2-й та 3-й сектори диска. За умовою, VTOC диски мають s2, який охоплює весь диск, який охоплює VTOC. Формат не потребує читання VTOC, оскільки він не записує на фрагмент, він записує на диск через драйвер сировини нижчого рівня.
user619714

s2 за замовчуванням, включаючи на неформатованому диску, відображає сектор 0 та наступні, які, очевидно, завжди є Сподіваємось, немає необхідності існувати vtoc, щоб написати vtoc.
jlliagre

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

3

формат (1М) не потребує фрагментів для роботи, він отримує доступ до пристрою з необробленим диском і мітить його. Після позначення диска фрагмент s2 - це один із способів адреси всього диска.

З іншого боку, fmthard не може записати VTOC на диск, який не має мітки. Спершу потрібно позначити його форматом (1М).

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


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