Воскресенье, 21.12.2025, 12:33

Блог Владимира Степанова

Реклама
Статистика
Яндекс.Метрика
Онлайн всего: 1
Гостей: 1
Пользователей: 0
Меню
Категории раздела
FreeBSD OpenBSD [1]
Установка [4]
Настройка [21]
WWW [1]
Мелочи [1]
Файловая система [0]
Вход на сайт
Реклама
Поиск
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Главная » Статьи » Unix системы » Настройка

    Выделение дискового пространства на удаленно доступном сервере

    Выделение дискового пространства на удаленно доступном сервере.


    О чем пойдет речь?

    Хочу поделиться опытом полученным при решении одной, довольно тривиальной, на первый взгляд, задачи.

    Условия задачи просты:

    Имеем доступный только по сети сервер, т.е. физического доступа, в случае какой-либо моей ошибки, к нему не предвидится. На этом сервере есть винчестер разбитый всего на один слайс не занимающий всего доступного пространства. То есть на диске есть неутилизированное место и нужно подготовить это место к использованию.

    Замечание: здесь нет подробных описаний работы с утилитами, так как это прекрасно описано в других источниках.

    Тестируем в VMware

    Решив в начале потренироваться на кошках, устанавливаю на виртуальную машину VMware операционную систему FreeBSD 6.2. Размер виртуального диска я взял 2 гигабайта. При установке был создан один слайс размером 1 гигабайт. Остальное место послужит испытательным полигоном:

    remote_disk_space_allocating::one_slice



    Необходимо добавить еще один слайс объемом 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 не сможет изменить таблицу разделов на работающей системе:

    remote_disk_space_allocating::sysinstall_cant_write.



    а с этим сможет:

    remote_disk_space_allocating::sysinstall_can_write



    Но тут-то как раз и засада. Дело в том, что добавляя второй слайс, 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

    Из-за этого мы получаем сообщение об испорченной таблице разделов при загрузке:

    remote_disk_space_allocating::inv_part_tbl



    или не получаем 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-раздел будет доступен только после перезагрузки.  игнорируем ошибки о невозможности смонтировать этот раздел и в итоге получаем примерно такое:

    remote_disk_space_allocating::sysinstall_new_label



    И если сейчас выйти из 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 -u /dev/ad0 

    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 (на весь раздел):

     bsdlabel -w /dev/ad0s2 

    После этого метка будет иметь такой вид:

     # size offset fstype [fsize bsize bps/cpg]
    a: 2097632 16 unused 0 0
    c: 2097648 0 unused 0 0 # "raw" part, don't edit

    Открываем метку на редактирование:

     bsdlabel -e /dev/ad0s2 

    В открывшемся текстовом редакторе редактируем первую строку с разделом "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:

     newfs -U /dev/ad0s2d 

    Что ж, сапог оказался в бою надежнее, и я на живом сервере предпочту воспользоваться этой связкой для разбивки диска, а не 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)

    После чего, перезагружаемся и проверяем корректность всего, чего натворили.

    Перед работой с живым сервером

    Перед началом работы с реальной машиной я предпочел перезагрузить ее. Это дало точное знание того, что если она не загрузится после моих действий с диском, то в этом я сам и виноват.

    Также очень хорошей идеей будет сохранить информацию о дисках где-то в безопасном месте, например, на своей рабочей машине. При чем, информацию о ВСЕХ дисках в системе, даже если мы их трогать не собираемся.

    Получаем информацию о слайсах:

     fdisk ad0 

    Получаем информацию о BSD-разделах:

     bsdlabel /dev/ad0s1 

    Потом, положив полученный вывод в файл, можно восстановить BSD-разделы командой:

     bsdlabel -R /dev/ad0s1 file 

    Теперь, в случае чего, у нас будет достаточно информации для восстановления. Остается только пожелать того, чтобы по прямому
    назначению эту информацию применять не пришлось.

    Вместо титров

    Рад видеть дочитавшего до этого места читателя и буду рад в двойне если информация предоставленная здесь оказалась кому-нибудь хоть чем-то полезной.

    СпасиБо.



    размещено: 2007-09-17,
    последнее обновление: 2007-09-17,
    автор: bisyarin

    Категория: Настройка | Добавил: Raxxell5059 (22.12.2010)
    Просмотров: 1016 | Рейтинг: 0.0/0
    Всего комментариев: 0
    Добавлять комментарии могут только зарегистрированные пользователи.
    [ Регистрация | Вход ]