|
www.lissyara.su
—> статьи
—> FreeBSD
—> настройка
—> Удаленное разбиение HDD
Выделение дискового пространства на удаленно доступном сервере.
Автор: bisyarin.
О чем пойдет речь?
Хочу поделиться опытом полученным при решении одной, довольно тривиальной, на первый взгляд, задачи.
Условия задачи просты:
Имеем доступный только по сети сервер, т.е. физического доступа, в случае какой-либо моей ошибки, к нему не предвидится. На этом сервере есть винчестер разбитый всего на один слайс не занимающий всего доступного пространства. То есть на диске есть неутилизированное место и нужно подготовить это место к использованию.
Замечание: здесь нет подробных описаний работы с утилитами, так как это прекрасно описано в других источниках.
Тестируем в VMware
Решив в начале потренироваться на кошках, устанавливаю на виртуальную машину VMware операционную систему FreeBSD 6.2. Размер виртуального диска я взял 2 гигабайта. При установке был создан один слайс размером 1 гигабайт. Остальное место послужит испытательным полигоном:
Необходимо добавить еще один слайс объемом 1 гигабайт, добавить в него один BSD-раздел, на этом BSD-разделе создать UFS2 файловую систему и прописать монтирование BSD-раздела в /etc/fstab. После этого, для уверенности, перезагрузимся и посмотрим загружается ли FreeBSD вообще и монтируется ли файловая система при загрузке.
Разбиваем диск
Используем sysinstall
Итак, первая мысль приходящая в голову, это сделать все с помощью утилиты sysinstall, ведь она и слайс сделает с BSD-разделом и файловую систему создаст. Sysinstall -— и дело с концом.
Создаем слайс с помощью sysinstall
Перед работой с дисками в sysinstall следует сказать:
# sysctl kern.geom.debugflags=16
| Это включит "foot shooting" в GEOM (см. geom(4)), без этого sysinstall не сможет изменить таблицу разделов на работающей системе:
а с этим сможет:
Но тут-то как раз и засада. Дело в том, что добавляя второй слайс, sysinstall, судя по выводу fdisk, назначает их оба активными:
The data for partition 1 is:
sysid 165 (0xa5),(FreeBSD/NetBSD/386BSD)
start 63, size 2096577 (1023 Meg), flag 80 (active)
beg: cyl 0/ head 1/ sector 1;
end: cyl 1023/ head 15/ sector 63
The data for partition 2 is:
sysid 165 (0xa5),(FreeBSD/NetBSD/386BSD)
start 2096640, size 2097648 (1024 Meg), flag 80 (active)
beg: cyl 1023/ head 255/ sector 63;
end: cyl 1023/ head 15/ sector 63
| Из-за этого мы получаем сообщение об испорченной таблице разделов при загрузке:
или не получаем ICMP-ответа от сервера, если он доступен только по сети.
Оказывается это поведение уже описано в нескольких PR, например, в этом.
Обойти эту проблему можно, если, в том же sysinstall, сразу же после добавления нового слайса явно указать активный раздел.
Создаем BSD-раздел с помощью sysinstall
Отлично, слайс добавили, хотя немного и поплясали с бубном. Следующая часть решения задачи состоит в добавления нового BSD-раздела.
Здесь стоит сразу же сказать о еще одной проблеме sysinstall. Эта утилита при добавлении слайса или BSD-раздела, не создает
соответствующих устройств в devfs. А чтобы что-нибудь сделать с только что созданным устройством, например, создать BSD-раздел на слайсе, этот слайс должен быть виден системой. Я пока не нашел другого решения этой проблемы кроме перезагрузки. PR об этом.
Перед перезагрузкой можно временно добавить в /etc/sysctl.conf строку устанавливающую kern.geom.debugflags в 16, чтобы не выставлять эту sysctl-переменную каждый раз после перезагрузки.
Перезагружаемся и проверяем наличие нового слайса в /dev. Добавляем новый BSD-раздел. Перед записью данных на диск, Toggle Newfs со спокойной душой можно поставить в "N", так как файловая система все равно не может быть создана, потому что новый BSD-раздел будет доступен только после перезагрузки. игнорируем ошибки о невозможности смонтировать этот раздел и в итоге получаем примерно такое:
И если сейчас выйти из sysinstall и перегрузить сервер, то повторится тоже самое что и при добавлении слайса. И все из-за тех же двух активный разделов. Решение аналогично. Нужно, после добавления нового BSD-раздела с помощью меню label, сразу же зайти в меню fdisk и выставить нужный активный раздел.
Перезагружаемся :-). Проверяем наличие нового BSD-раздела в /dev.
Создаем ФС с помощью sysinstall
Теперь нужно создать файловую систему на новом разделе. Заходим в сисинсталовский disklabel editor. Встаем на наш новый раздел, назначаем mount point и не забудем воспользоваться Toggle Newfs. После записи данных на диск, снова идем в редактор слайсов и назначаем активный раздел. mount показывает, что новый раздел смонтирован:
/dev/ad0s1a on / (ufs, local)
devfs on /dev (devfs, local)
/dev/ad0s1e on /tmp (ufs, local, soft-updates)
/dev/ad0s1f on /usr (ufs, local, soft-updates)
/dev/ad0s1d on /var (ufs, local, soft-updates)
/dev/ad0s2d on /newspace (ufs, local, soft-updates)
| Не забудем убрать из /etc/sysctl.conf то, что временно добавляли.
На этом, большая часть задачи решена. Хотя мне, после всего этого, перехотелось использовать sysinstall на живом сервере и я решил попробовать связку fdisk+bsdlabel+newfs.
Используем fdisk+bsdlabel+newfs.
Создаем слайс с помощью fdisk
Чтобы добавить новый слайс воспользуемся утилитой fdisk:
fdisk встречает нас такой речью:
******* Working on device /dev/ad0 *******
parameters extracted from in-core disklabel are:
cylinders=4161 heads=16 sectors/track=63 (1008 blks/cyl)
| Используем данные о цилиндрах, головках и секторах для выяснения размера диска:
4161*16*63 = 4194288 (секторов)
Это число нам понадобится для вычисления размера второго слайса.
Далее fdisk говорит, что
The data for partition 1 is:
sysid 165 (0xa5),(FreeBSD/NetBSD/386BSD)
start 63, size 2096577 (1023 Meg), flag 80 (active)
| Значит следующий слайс будет начинаться с 2096577+63=2096640-го сектора. И размер его будет составлять 4194288-2096640=2097648 (секторов).
Когда fdisk спросит про редактирование второго раздела мы укажем только что вычисленные данные.
Проверяем присутствие нового слайса:
# fdisk
-- SKIPPED --
sysid 165 (0xa5),(FreeBSD/NetBSD/386BSD)
start 63, size 2096577 (1023 Meg), flag 80 (active)
beg: cyl 0/ head 1/ sector 1;
end: cyl 1023/ head 15/ sector 63
The data for partition 2 is:
sysid 165 (0xa5),(FreeBSD/NetBSD/386BSD)
start 2096640, size 2097648 (1024 Meg), flag 0
beg: cyl 32/ head 0/ sector 1;
end: cyl 64/ head 15/ sector 63
-- SKIPPED --
|
# ls -l /dev/ad0s2
crw-r----- 1 root operator 0, 95 Sep 15 19:15 /dev/ad0s2
| Создаем BSD-раздел с помощью bsdlabel
Пишем стандартную метку BSD (на весь раздел):
После этого метка будет иметь такой вид:
# size offset fstype [fsize bsize bps/cpg]
a: 2097632 16 unused 0 0
c: 2097648 0 unused 0 0 # "raw" part, don't edit
| Открываем метку на редактирование:
В открывшемся текстовом редакторе редактируем первую строку с разделом "a". Поскольку на разделе "a" обычно корневая система, на "b" swap, а "с" используется для доступа ко всему слайсу, то изменим букву раздела с "a" на "d". Также нужно прописать "4.2BSD" в поле fstype. Сохранив изменения и выйдя из редактора, должно получится следующее:
# size offset fstype [fsize bsize bps/cpg]
c: 2097648 0 unused 0 0 # "raw" part, don't edit
d: 2097632 16 4.2BSD 0 0 0
| Проверим наличие BSD-раздела:
# ls -l /dev/ad0s2d
crw-r----- 1 root operator 0, 97 Sep 15 19:15 /dev/ad0s2d
| Создаем ФС с помощью newfs
На созданном BSD-разделе создаем файловую систему UFS2 с Soft Updates:
Что ж, сапог оказался в бою надежнее, и я на живом сервере предпочту воспользоваться этой связкой для разбивки диска, а не sysinstall.
Редактируем /etc/fstab
Заранее создав точку монтирования, прописываем новый BSD-раздел в /etc/fstab:
/dev/ad0s2d /newspace ufs rw 2 2
| Проверка перед перезагрузкой
Перед перезагрузкой лучше всего убедится, что с новой файловой системой все в порядке:
# fsck /dev/ad0s2d
** /dev/ad0s2d (NO WRITE)
** Last Mounted on /newspace
** Phase 1 - Check Blocks and Sizes
** Phase 2 - Check Pathnames
** Phase 3 - Check Connectivity
** Phase 4 - Check Reference Counts
** Phase 5 - Check Cyl groups
2 files, 2 used, 506609 free (25 frags, 63323 blocks, 0.0% fragmentation)
| После чего, перезагружаемся и проверяем корректность всего, чего натворили.
Перед работой с живым сервером
Перед началом работы с реальной машиной я предпочел перезагрузить ее. Это дало точное знание того, что если она не загрузится после моих действий с диском, то в этом я сам и виноват.
Также очень хорошей идеей будет сохранить информацию о дисках где-то в безопасном месте, например, на своей рабочей машине. При чем, информацию о ВСЕХ дисках в системе, даже если мы их трогать не собираемся.
Получаем информацию о слайсах:
Получаем информацию о BSD-разделах:
Потом, положив полученный вывод в файл, можно восстановить BSD-разделы командой:
bsdlabel -R /dev/ad0s1 file
| Теперь, в случае чего, у нас будет достаточно информации для восстановления. Остается только пожелать того, чтобы по прямому
назначению эту информацию применять не пришлось.
Вместо титров
Рад видеть дочитавшего до этого места читателя и буду рад в двойне если информация предоставленная здесь оказалась кому-нибудь хоть чем-то полезной.
СпасиБо.
размещено: 2007-09-17,
последнее обновление: 2007-09-17,
автор: bisyarin
|
|
Комментарии пользователей [16 шт.]