Архів мітки: mount

Монтування спільної директорії в VirtualBox

Тимчасове припинення публікацій в моєму блозі пов’язане з тим, що на новому робочому місці я користуюсь Window 7. Я не роблю з цього великої трагедії, але час від часу сумую за Linux. Особливо не вистачає консолі та віртуальних робочих столів.

Проте необхідність у використанні Лінукс не зникла. Так для одного проекту, мені потрібно мати тестову віртуальну машину з Лінукс. Встановити її у VirtualBox дуже просто, а от щоб налагодити доступ до спільних каталогів треба додати кілька команд.

Першим кроком створюємо спільну директорію у параметрах віртуальної машини. Нехай її ім’я буде Common. Тепер монтуємо цю директорію від рута для перевірки:

# mount -t vboxsf Common /mnt/share

Якщо все вірно, то у директорію /mnt/share гостьової Лінукс буде змонтована спільна директорія з назвою Common.

Тепер залишається налагодити автоматичне монтування цієї спільної директорії при завантаженні Лінукс. Простіше за все, це зробити через додавання рядка у файл /etc/fstab:

Common /mnt/share vboxsf uid=1000,gid=1000 0 0

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

Відновлення програмного RAID в Лінукс. Початок.

Коли я остаточно переконався, що головний вінчестер не працює (переставив його з SATA1 на SATA5 конектор, а потім для перевірки підключив інший прилад hdd), то зрозумів, що треба купувати новий.

Стара модель була WD5000AAKS, тому нову я теж взяв такого ж розміру 500 Гб. Навіть виробника Western Digital залишив. Відрізнялась у назві лише одна літера: WD5000AAKX. До тепер у мене не було нарікань на жорсткі диски WD. Подарую їм нагоду себе реабілітувати.

Структуру RAID, що залишилась на 3-х дисках я не дуже пам’ятав. Там точно було декілька розділів, причому один RAID-0 для swap, пара RAID-1 для /boot та кореневого каталогу та великий RAID-5 для зберігання основних робочих даних.

Ситуацію ускладнювало те, що на поламаному вінчестері було дві системи: Linux та Window XP. Від віндовс я відмовитись не можу, тому що люблю грати у комп’ютерні ігри, тому її на новий вінчестер я встановив у першу чергу.

Інсталятор Windows XP показав мені як були розбиті 3 робочі жорсткі диски:

957 Мб / 1914 Мб / 19077 Мб / 262264 Мб / 21030 Мб

Сумарно там було біля 305 Гб (диски на 320 Гб), тому для “вінди” я зробив два розділи на 100 та 70 Гб відповідно. Для відновлення RAID залишилось 306929 Мб. Сподіваюсь цього вистачить.

Щоб почати лагодити RAID треба отримати доступ до системи Лінукс, а зробити це можна лише використавши так званий Rescue диск. В мене його не було, тому довелось качати з офіційного дзеркала Debian.org “живий” ISO-образ. За цією адресою http://ftp.debian.org.ua/debian-cd/6.0.1-live/amd64/iso-hybrid/  я знайшов debian-live-6.0.1-amd64-gnome-desktop.iso

Записав образ на DVD я зміг завантажити свій комп’ютер. Був приємно вражений тим, що одразу мав графічне середовище, деякі програми та саме головне доступ до Інтернет та браузер.

Першим кроком я запустив термінал та перейшов у режим користувача root.

user@debian:~$ sudo -s
root@debian:/home/user#

Від рута вивів на екран таблицю розділів жорстких дисків:

root@debian:/home/user# /sbin/fdisk -l

Disk /dev/sdb: 320.1 GB, 320072933376 bytes
255 heads, 63 sectors/track, 38913 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000821a8

 Device Boot   Start     End      Blocks   Id  System
/dev/sdb1   *      1     122      979933+  fd  Linux raid autodetect
/dev/sdb2        123   38913   311588707+   5  Extended
/dev/sdb5        123     366     1959898+  fd  Linux raid autodetect
/dev/sdb6        367    2798    19535008+  fd  Linux raid autodetect
/dev/sdb7       2799   36232   268558573+  fd  Linux raid autodetect
/dev/sdb8      36233   38913    21535101   83  Linux

Disk /dev/sda: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xd732d732

 Device Boot   Start      End      Blocks   Id  System
/dev/sda1  *       1    12748   102398278+   7  HPFS/NTFS
/dev/sda2      12749    60800   385977690    f  W95 Ext'd (LBA)
/dev/sda5      12749    21672    71681998+   e  W95 FAT16 (LBA)

Тут показую лише розподіл /dev/sdb, тому що /dev/sdc та /dev/sdd розбиті аналогічно.

Для початку я вирішив перевірити, а чи все гаразд з трьома “робочими” вінчестерами. Адже в деградуючому режимі вони повинні відновити RAID. Але отримав:

# cat /proc/mdstat
cat: /proc/mdstat: No such file or directory

Почитавши інтернет зрозумів, що відповідні модулі ядра не завантажені. Це й не дивно, адже Live DVD не має підтримувати RAID. Тому виконав команду:

# modprobe raid1

І вуаля:

# cat /proc/mdstat
Personalities : [raid1]
unused devices: <none>

Але мені потрібні ще інші режими RAID, тому:

# modprobe raid0
# modprobe raid5
# cat /proc/mdstat
Personalities : [raid1] [raid0] [raid6] [raid5] [raid4]
unused devices: <none>

Визначивши, що в Live Debian немає навіть команди mdadm, я вирішив її доставити. Треба зазначити, що попре свій “живий” режим, інсталятор apt-get працює наче це звичайна система. Це реально круто!

# whereis mdadm
mdadm:
root@debian:/home/user# apt-get install mdadm
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
mdadm
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 464 kB of archives.
After this operation, 1,167 kB of additional disk space will be used.
Get:1 http://cdn.debian.net/debian/ squeeze/main mdadm amd64
 3.1.4-1+8efb9d1 [464 kB]
Fetched 464 kB in 1s (343 kB/s)
Preconfiguring packages ...
Selecting previously deselected package mdadm.
(Reading database ... 117590 files and directories currently
 installed.)
Unpacking mdadm (from .../mdadm_3.1.4-1+8efb9d1_amd64.deb) ...
Processing triggers for man-db ...
Setting up mdadm (3.1.4-1+8efb9d1) ...
Generating array device nodes... done.
Generating mdadm.conf... done.
I: update-initramfs is disabled (live system is running on
 read-only media).
Starting MD monitoring service: mdadm --monitor.
Assembling MD array md1...failed (not enough devices).
Assembling MD array md0...done (initialising [1/2)]).
Assembling MD array md2...done (initialising [1/2)]).
Assembling MD array md3...done (initialising [2/3)]).
Generating udev events for MD arrays...done.

При налагоджені, вона мене щось запитала, я відповів те що було вказано за умовчанням. І через декілька секунд … О! Що я бачу! Невже система помітила мій RAID?

# cat /proc/mdstat
Personalities : [raid1] [raid0] [raid6] [raid5] [raid4]
md3 : active raid5 sdb7[1] sdd7[3] sdc7[2]
537116928 blocks level 5, 64k chunk, algorithm 2 [3/2] [_UU]
[=>...................]  recovery =  6.0% (16285312/268558464)
 finish=51.6min speed=81340K/sec

md2 : active raid1 sdb6[1] sdd6[3] sdc6[2](S)
19534912 blocks [2/1] [_U]
resync=DELAYED

md0 : active raid1 sdb1[1] sdc1[0] sdd1[2](S)
979840 blocks [2/2] [UU]

md1 : inactive sdb5[1](S)
1959808 blocks

unused devices: <none>

Наче так. Більше того, система автоматично почала його перебудовувати. Я забув сказати, що в мене був RAID-5 та RAID-1 зі запасом, тобто вони мали розділи у резерві (є такий термін як “spare”).

Очевидно, що конфігурування mdadm призвело до формування і конфігураційного файлу /etc/mdadm/mdadm.conf. В мене він виявився такого змісту:

# mdadm.conf
#
# Please refer to mdadm.conf(5) for information about this file.
#
# by default, scan all partitions (/proc/partitions) for MD
# superblocks.
# alternatively, specify devices to scan, using wildcards if desired.
DEVICE partitions

# auto-create devices with Debian standard permissions
CREATE owner=root group=disk mode=0660 auto=yes

# automatically tag new arrays as belonging to the local system
HOMEHOST <system>

# instruct the monitoring daemon where to send mail alerts
MAILADDR root

# definitions of existing MD arrays
ARRAY /dev/md1 UUID=c77a68cb:56309d8e:84c426df:55d8644d
ARRAY /dev/md0 UUID=0707ba7a:8a57b581:999f1de2:f9c3448a
spares=2
ARRAY /dev/md2 UUID=8bc941a1:d84faa98:008d3785:384a6334
spares=2
ARRAY /dev/md3 UUID=f82eca2a:4dadcb8a:84c426df:55d8644d
spares=1

# This file was auto-generated on Fri, 25 Mar 2011 17:45:27 +0000
# by mkconf 3.1.4-1+8efb9d1

Пристрій RAID-1 /dev/md0 виглядає справним, слід його перевірити.

# cd /mnt/
# mkdir test
# mount /dev/md0 test
# ls test
config-2.6.26-2-amd64           lost+found
grub                   System.map-2.6.26-2-amd64
initrd.img-2.6.26-2-amd64      vmlinuz-2.6.26-2-amd64
initrd.img-2.6.26-2-amd64.bak

Це явно розділ /boot. Саме він буде використовуваться під час завантаження комп’ютера. Є один момент, який слід пам’ятати, коли використовуєш програмний RAID у Лінукс. Важливо розуміти, що система не може завантажитись з RAID розділу! Завантажує ядро системи BIOS (базова система вводу та виводу), а вона не має підтримки програмних RAID пристроїв. Якще комп’ютер тоді завантажуеться?

Для завантаження програмних RAID використовується прямий доступ до одного з томів RAID пристрою /boot. Розділ /boot – завжди є пристроєм типу RAID-1, і за програмною реалізацією кожен з його розділів (у моєму випадку це /dev/sdb1, /dev/sdc1 чи /dev/sdd1) це звичайний розділ ext3 (чи іншої прийнятної файлової системи). Тобто до ініціалізації модуля підтримки RAID пристроїв у ядрі BIOS обирає розділ /boot з головного диску пристрою RAID. Коли ядро буде завантажено, воно відмонтує /boot розділ і перемонтує його вже у вигляді RAID-1 – /dev/md0.

Теорії досить. Продовжуємо процес відновлення. Підключення інших розділів виявило, що /dev/md2 – це коріневій каталог, а /dev/md3 – це /home та /spool – основний RAID пристрій зберігання робочих даних.

Треба почекати, доки система відсинхронізує диски масивів RAID і можна приступати до модифікації MBR з використанням завантажувача Grub. Реалізація програмного RAID у Лінукс досить надійна, і можна не чекачи доки закінчиться синхронізація та відбудова, але інтенсивне використання дисків на запис значно уповільнить цей процес. Слідкувати за відбудовою RAID можна переглядаючи файл /proc/mdstat

До речі, є така корисна утиліта, яка дозволяє переглядати файл через рівні проміжки часу. Тоді процес спостереження стає динамічним. Називається вона watch. Наступний прикад буде показувати в терміналі процес перебудови RAID масиву з інтервалом у 5 секунд:

# watch --interval=5 cat /proc/mdstat

Про відновлення простою /dev/md3 свідчить такий вміст /proc/mdstat:

# cat /proc/mdstat
Personalities : [raid1] [raid0] [raid6] [raid5] [raid4]

md3 : active raid5 sdb7[1] sdd7[0] sdc7[2]
537116928 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU]

md2 : active raid1 sdb6[1] sdd6[2] sdc6[3](S)
19534912 blocks [2/1] [_U]
[===================>.]  recovery = 99.3% (19407680/19534912)
 finish=0.0min speed=92519K/sec

md0 : active raid1 sdb1[1] sdc1[0] sdd1[2](S)
979840 blocks [2/2] [UU]

md1 : inactive sdb5[1](S)
1959808 blocks

unused devices: <none>

 

Для відновлення MBR та завантажувача Grub монтуємо кореневий розділ у /mnt/test, а потім ще і /boot розділ.

# mount /dev/md2 /mnt/test/
# mount /dev/md0 /mnt/test/boot/

Тепер слід встановити завантажувач Grub, але при зміненому коріневому розділі. Робимо це такими командами:

# chroot /mnt/test/
# grub
Probing devices to guess BIOS drives. This may take a long time.
GNU GRUB  version 0.97  (640K lower / 3072K upper memory)
[ Minimal BASH-like line editing is supported.   For
the   first   word,  TAB  lists  possible  command
completions.  Anywhere else TAB lists the possible
completions of a device/filename. ]
grub>

Ви побачили консоль програми Grub.

grub> root(hd0,0)
root(hd0,0)
Error 27: Unrecognized command
grub> root (hd0,0)
root (hd0,0)
Error 21: Selected disk does not exist
grub>

Перший раз я забув вставити пробіл між командою та опціями, а других раз помилився, тому що взяв параметри з прикладу в інтернеті, а не ті що потрібні на моїй системі. Щукаємо на якому пристрої знаходиться образ для Grub, він має назву stage2:

grub> find /boot/grub/stage2
find /boot/grub/stage2

Error 15: File not found

Наче роблю все як написано у інтернеті, а воно не працює. Хм, може щось не так з chroot-ом. Почитав ще трохи і зрозумів, що перед chroot треба також перекинути файлові системи /proc, /sys та /dev.

root@debian:/# mount --bind /proc /mnt/test/proc
root@debian:/# mount --bind /sys /mnt/test/sys
root@debian:/# mount --bind /dev/ /mnt/test/dev/
root@debian:/# chroot /mnt/test/
debian:/#

Знову запускаємо grub:

grub> root (hd1,0)
root (hd1,0)
Filesystem type is ext2fs, partition type 0xfd
grub> setup (hd1)
setup (hd1)
Checking if "/boot/grub/stage1" exists... no
Checking if "/grub/stage1" exists... yes
Checking if "/grub/stage2" exists... yes
Checking if "/grub/e2fs_stage1_5" exists... yes
Running "embed /grub/e2fs_stage1_5 (hd1)"...  17 sectors are
 embedded.
succeeded
Running "install /grub/stage1 (hd1) (hd1)1+17 p (hd1,0)/grub/stage2
 /grub/menu.lst"... succeeded
Done.

Команда “root (hd1,0)” вказує де знаходиться розділ для завантаження (в нас це 2-й диск та перший розділ на ньому /boot), а команда “setup (hd1)” встановлює MBR з посиланням на Grub завантажувач на диск 2. Нумерація пристроїв та розділів у Grub починається від нуля, тому (hd0) – перший диск, а (hd1,0) – перший розділ на другому диску.

Цей приклад виявив, що я не правильно шукав образ. Треба було так:

grub> find /grub/stage2
find /grub/stage2
(hd1,0)
(hd2,0)

Що показала ця команда? Вона знайшла придатні для завантаження розділи на 2-му та 3-му диску. Але ж в мене 4 диска? Щоб остаточно зрозуміти що відбувається давайте згадаємо що за диски є у нашому розпоряджені. Номер 1 – це новий диск, там не може бути розділу для завантаження, адже це там зараз тільки Window XP. Диски 2, 3 та 4 – це працюючий RAID. Так чому ж завантаження можливе лише з дисків 2 та 3?

Дивимось як саме описаний RAID пристрій /dev/md0:

md0 : active raid1 sdb1[1] sdc1[0] sdd1[2](S)
979840 blocks [2/2] [UU]

Все вірно, 4-й диск (його розділ /dev/sdd1) знаходиться у “запасному” стані (spare), фактично на ньому не має робочих даних. Вони з’являться тільки після виходу з ладу одного з активних розділів: /dev/sdb1 чи /dev/sdc1.

Добре, як пам’ятаєте, ми встановили на другий диск у MBR завантажувач Grub, але треба спочатку це перевірити.

Я перегрузив комп’ютер, вибрав по клавіші F8 (меню вибору пристрою для завантаження для материнських плат Asus) другий жорсткий диск і побачив своє старе меню Grub! Завантажитись одразу не вийшо. Спробував відредагувати параметри на місці. Вийшло лише вказавши:

root (hd0,0)

Чому саме такі – не розумію. Адже за логікою перший диск в мене – це новий з віндою. На всякий випадок додав grub і на 3-й та 4-й диск масиву RAID. Протестував завантаження. Для 3-го диску допоміг теж root (hd0,0), а для 4-го – чомусь root (hd2,0). Тут я не впевнений, але можливо при виборі пристрою для завантаження самі він стає першим номером для Grub. Тобто в стандартному наборі з 4-з дисків маємо такі номери:

  1. /dev/sda (hd0)
  2. /dev/sdb (hd1)
  3. /dev/sdc (hd2)
  4. /dev/sdd (hd3)

Але коли обираємо пристрій для завантаження, наприклад, /dev/sdc – то саме він стає першим, а інші шикуються у чергу за ним:

  1. /dev/sdc (hd0) – обрали його при завантаженні комп’ютеру
  2. /dev/sda (hd1)
  3. /dev/sdb (hd2)
  4. /dev/sdd (hd3)

Принаймні, це пояснює чому 2-й та 3-й диски завантажились з  “root (hd0,0)”, а четвертий – лише з “root (hd2,0)”. Подивіться, що за порядок дисків утворюється при виборі 4-го диску для завантаження:

  1. /dev/sdd (hd0) – але як пам’ятаєте, його розділ /boot не існує, бо він “запасний” у /dev/md0
  2. /dev/sda (hd1) – це вінда, завантаження не можливе
  3. /dev/sdb (hd2) – тут все гаразд, тому і завантажились
  4. /dev/sdc (hd3) – тут теж можна завантажитись

Отже свою стару систему я успішно завантажив. Всі данні намісці, але вона заводиться тільки після копняка (ручна правка grub і вибір диску для завантаження) і новий диск не містить розділів програмного RAID Лінукс.

Треба довести справу до кінця.