virt-alignment-scan(1) | Virtualization Support | virt-alignment-scan(1) |
virt-alignment-scan — перевірка вирівнювання розділів віртуальної машини
virt-alignment-scan [--параметри] -d назва_домену virt-alignment-scan [--параметри] -a диск.img [-a диск.img ...] virt-alignment-scan [--параметри]
Під час встановлення застарілих операційних систем засоби розподілу диска можуть розташувати розділ на секторі з помилковим вирівнюванням відносно системи зберігання даних (типово, перший розділ починається з сектора 63). Розділи з помилковим вирівнюванням можуть призвести до неоптимальної кількості запитів щодо виведення та введення даних від операційної системи.
Програма virt-alignment-scan виконує перевірку вирівнювання розділів у віртуальних машинах та образів дисків і повідомляє вам, якщо буде виявлено помилки вирівнювання.
У поточній версії не передбачено програми для виправлення помилок, пов’язаних з вирівнюванням. Ви можете лише перевстановити гостьову операційну систему. У цьому документі можна знайти короткі описи помилок та можливі шляхи усування цих помилок: http://media.netapp.com/documents/tr-3747.pdf
Щоб запустити цю програму безпосередньо для образу диска, скористайтеся параметром -a:
$ virt-alignment-scan -a winxp.img /dev/sda1 32256 512 bad (alignment < 4K) $ virt-alignment-scan -a fedora16.img /dev/sda1 1048576 1024K ok /dev/sda2 2097152 2048K ok /dev/sda3 526385152 2048K ok
Щоб запустити програму на гостьовій системі, відомій libvirt, скористайтеся параметром -d і, можливо, параметром -c:
# virt-alignment-scan -d RHEL5 /dev/sda1 32256 512 bad (alignment < 4K) /dev/sda2 106928640 512 bad (alignment < 4K) $ virt-alignment-scan -c qemu:///system -d Win7TwoDisks /dev/sda1 1048576 1024K ok /dev/sda2 105906176 1024K ok /dev/sdb1 65536 64K ok
Щоб виконати сканування всіх доменів libvirt, віддайте команду virt-alignment-scan без параметрів -a та -d.
# virt-alignment-scan F16x64:/dev/sda1 1048576 1024K ok F16x64:/dev/sda2 2097152 2048K ok F16x64:/dev/sda3 526385152 2048K ok
Дані буде виведено у форматі 4 або більшої кількості стовпчиків, відокремлених пробілами. Якщо ви маєте намір обробляти ці дані якоюсь програмою, до уваги слід брати лише перші 4 стовпчики. Ось ці стовпчики:
У пунктах списків всіх доменів libvirt (без вказаного параметра -a або -d) записи у цьому стовпчику матимуть префікс назви libvirt або UUID (якщо вказано --uuid). Приклад: "WinXP:/dev/sda1"
Код виходу програми залежить від того, чи буде знайдено розділи з помилковим вирівнюванням. Див. розділ "СТАН ВИХОДУ" нижче.
Якщо вам потрібен лише код виходу без виведення даних, скористайтеся параметром -q.
Формат образу диска визначається автоматично. Щоб перевизначити його і примусово використати певний формат, скористайтеся параметром --format=...
Якщо вказати блокові пристрої гостьових систем безпосередньо (-a), libvirt не буде використовуватися взагалі.
Приклад:
virt-alignment-scan --format=raw -a disk.img
примусове встановлення формату без обробки (без автоматичного визначення) для disk.img.
virt-cat --format=raw -a disk.img --format -a another.img file
примусове встановлення формату без обробки (без автоматичного визначення) для diskimg і повернення до автоматичного визначення для another.img.
Якщо ви користуєтеся ненадійними образами гостьових систем у необробленому форматі, вам слід скористатися цим параметром для визначення формату диска. Таким чином можна уникнути можливих проблем з захистом для сформованих зловмисниками гостьових систем (CVE-2010-3851).
Зауважте, що -P 0 означає автоматичне визначення, а -P 1 означає використання одного потоку виконання.
Цей параметр застосовується лише для побудови списку всіх доменів libvirt (якщо не вказано параметрів -a і -d).
Операційні системи, старіші за Windows 2008, та Linux до приблизно 2010 року розташовують перший сектор на першому розділі у секторі 63 і використовують розмір сектору у 512 байтів. Причини суто історичні. Драйвери мають повідомити дані щодо геометрії (циліндр / голівка / сектор або CHS) до BIOS. Ця геометрія є повністю непотрібною на сучасних дисках, але, так трапляється, що повідомлені драйвером дані вказують на те, що у доріжці 63 сектори. Тому операційна система розташовує перший розділ на початку другої «доріжки» у секторі 63.
Якщо гостьову операційну систему віртуалізовано, основна операційна система і гіпервізор можуть надавати перевагу доступу, вирівняному за одним з таких значень:
якщо основна операційна система використовує локальне сховище даних безпосередньо на розділах твердого диска, а на твердому диску розмір фізичних секторів дорівнює 512 байтам.
для локальних сховищ даних на нових твердих дисках із фізичними секторами у 4 кілобайти; для файлових сховищ даних на файлових системах із розміром блоку у 4 кілобайти; або для деяких типів мережевих сховищ даних.
для висококласних сховищ даних, з’єднаних із мережею. Оптимальний розмір блоку для апаратного забезпечення NetApp.
див. "ВИРІВНЮВАННЯ РОЗДІЛІВ НА ПОЗНАЧКИ 1 МБ" нижче.
Розділи, які не вирівняно належним чином щодо основного сховища даних, можуть спричиняти зайві помилки введення-виведення. Приклад:
розділ#63 ┌──────────────────────────┬ ─ ─ ─ ─ │ блок │ │гостьової файлової системи│ ─ ┬──────────────────┴──────┬───────────────────┴─────┬ ─ ─ │ блок основної системи │ блок основної системи │ │ │ │ ─ ┴─────────────────────────┴─────────────────────────┴ ─ ─
У цьому прикладі під час кожного читання блоку у 4 кілобайти гостьової системи має бути отримати доступ до двох блоків основної системи (отже, здійснено удвічі більший обмін даними введення-виведення). Якщо у гостьовій системі записується блок у 4 кілобайти, у основній системі має бути прочитано два блоки, старі і нові дані має бути поєднано, і має бути записано назад два блоки (учетверо більший обмін даними введення-виведення).
У нових версіях ядра Linux можна регулювати розміри фізичних і логічних блоків, а також мінімальний і рекомендований розмір блоку введення-виведення.
Для типового жорсткого диска з 512-байтовими секторами:
$ cat /sys/block/sda/queue/hw_sector_size 512 $ cat /sys/block/sda/queue/physical_block_size 512 $ cat /sys/block/sda/queue/logical_block_size 512 $ cat /sys/block/sda/queue/minimum_io_size 512 $ cat /sys/block/sda/queue/optimal_io_size 0
Для нових звичайних жорстких дисків з секторами у 4 кБ:
$ cat /sys/block/sda/queue/hw_sector_size 4096 $ cat /sys/block/sda/queue/physical_block_size 4096 $ cat /sys/block/sda/queue/logical_block_size 4096 $ cat /sys/block/sda/queue/minimum_io_size 4096 $ cat /sys/block/sda/queue/optimal_io_size 0
Для NetApp LUN:
$ cat /sys/block/sdc/queue/logical_block_size 512 $ cat /sys/block/sdc/queue/physical_block_size 512 $ cat /sys/block/sdc/queue/minimum_io_size 4096 $ cat /sys/block/sdc/queue/optimal_io_size 65536
NetApp дозволяє доступ до блоків у 512 байтів (хоча такий доступ буде дуже неефективним), надає перевагу мінімальному блоку введення-виведення у 4 кБ, але оптимальним розміром блоку введення-виведення є 64 кБ.
Щоб дізнатися більше про призначення цих чисел, ознайомтеся зі сторінкою http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Storage_Administration_Guide/newstorage-iolimits.html
[Дякуємо Matt Booth за надання даних щодо дисків з блоками у 4 кБ. Дякуємо Mike Snitzer за надання даних щодо NetApp та додаткову інформацію.]
Microsoft вибрано 1 МБ як типове вирівнювання для усіх розділів, починаючи з Windows 2008 Server. У Linux також почали використовувати таке вирівнювання.
Припускаючи у гостьовій системі сектори у 512 байтів, маємо перший розділ, що починається з сектора 2048 і наступні розділи (якщо такі є) будуть починатися з сектора, номер якого кратний до 2048.
Вирівнювання за 1 МБ є сумісним із усіма поточними варіантами вирівнювання (4 кБ, 64 кБ) і надає простір для подальшого зростання розмірів фізичних блоків.
virt-resize(1) може змінювати вирівнювання розділів деяких гостьових систем. У поточній версії програма здатна повністю вирівняти усі розділи усіх гостьових систем Windows і виправити завантажувач, де це потрібно. Для гостьових систем Linux програма може вирівняти другий і наступні розділи, щоб більшість доступів операційної системи, окрім часу завантаження, було вирівняно належним чином.
Іншим способом виправлення проблем, пов’язаних із вирівнюванням розділів, є перевстановлення ваших гостьових операційних систем. Якщо ви встановлюєте операційні системи з шаблонів, вам також варто переконатися, що із вирівнюванням розділів усе гаразд.
Для старіших версій Windows корисні відомості можна знайти у цьому документі NetApp: http://media.netapp.com/documents/tr-3747.pdf
Для Red Hat Enterprise Linux ≤ 5 слід використовувати скрипт Kickstart, який містить явний розділ %pre для створення вирівняних розділів диска за допомогою parted(8). Не використовуйте команду Kickstart "part". У наведеному вище документі NetApp міститься приклад.
Ця програма повертає:
успішне завершення, всі розділи вирівняно на ≥ 64 кБ для отримання найкращої швидкодії
під час сканування образу диска або гостьової системи сталася помилка
успішне завершення роботи, деякі розділи може бути вирівняно на < 64 кБ, що може призвести до погіршення швидкодії на високошвидкісних мережевих сховищах
успішне завершення роботи, деякі розділи може бути вирівняно на < 4 кБ, що може призвести до погіршення швидкодії у більшості гіпервізорів
guestfs(3), guestfish(1), virt-filesystems(1), virt-rescue(1), virt-resize(1), http://libguestfs.org/.
Richard W.M. Jones http://people.redhat.com/~rjones/
© Red Hat Inc., 2011
To get a list of bugs against libguestfs, use this link: https://bugzilla.redhat.com/buglist.cgi?component=libguestfs&product=Virtualization+Tools
To report a new bug against libguestfs, use this link: https://bugzilla.redhat.com/enter_bug.cgi?component=libguestfs&product=Virtualization+Tools
When reporting a bug, please supply:
2021-01-05 | libguestfs-1.44.0 |