Использование gpat на примере установки Freebsd на 1 Тб винчестер

Установка FreeBSD на терабайтный диск с которым не работал sysinstall

Решение проблемы с неправильной геометрией диска при попытке поставить FreeBSD на жёсткий диск,
на который не получалось поставить систему штатной утилитой sysinstall.
При переносе системы на терабайтник и написании статьи использовались материалы по следующим ссылкам:
http://m8d.de/news/freebsd-on-gpt.php
http://www.lissyara.su/?id=1704

Возникла у меня как-то необходимость заменить в домашнем сервере, который работает
под управлением ОС FreeBSD 7.1 Release, жёсткий диск Samsung SP0411N (40GB,
IDE) на Seagate ST31000333AS (1TB, SATAII). Материнская плата, установленная на сервере —
Asus P5V800-MX (чипсет VIA), поддерживает HDD IDE, SATA и SATAII.
Не долго думая, отключил старый винт, подсоединил новый, вставил в привод DVD
с FreeBSD, запустил установку и… столкнулся с сообщением об ошибке от утилиты fdisk, которой показалось, что
диск имеет неправильную геометрию.
Для меня так и осталось загадкой, что же не понравилось этой утилите в моём новом HDD. Судя по хэндбуку,
ОС должна нормально работать с разделами до 2TB.
Позадавав вопросы на разнообразных форумах, решил попробовать использовать GPT.

Итак, к делу:

1. Подготовка

Загружаюсь со старого диска, на который установлена FreeBSD 7.1 Release при подключенном
новом терабайтнике. У меня в ядре уже была включена поддержка GPT, но
перед работой проверьте в конфигурации ядра наличие строчки

options GEOM_GPT

терабайтник у меня определился как ad4 (а как определился Ваш, можно посмотреть в файле /var/run/dmesg.boot).

2. Создаю схему разметки GPT

Зашёл под рутом и дал команду

gpart create -s GPT ad4

Этой командой я создал схему разметки GPT на провайдере, а провайдером в данном случае выступает ad4,
то есть мой новый диск.
Теперь я дам команду gpart show, которая покажет информацию о GPT в системе,
в моём случае покажет, что диск свободен, начинается с 34 и имеет размером какое-то
страшное число логических блоков, которое тут же и в Гб указывается. В процессе
разметки диска я буду эту команду постоянно использовать, так что будьте готовы.

3. Создаю разделы

Теперь создам загрузочный раздел:

gpart add -b 34 -s 16 -t freebsd-boot ad4

эта команда создала раздел, начиная с логического блока 34, размером в 16 логических блоков, имеющий тип
freebsd-boot и размещающийся на ad4, только ad4 в документации теперь называется не «провайдер», а уже Geom.

Создаем остальные разделы:

gpart add -b 50 -s 2097152 -t freebsd-ufs ad4

этой командой я создал раздел для корневой файловой системы размером в 1 Гб, то есть
раздел начинается с логического блока 50 и занимает 2097152 логических блока. Число,
с которого должен начинаться следующий раздел берём из вывода команды gpart show
(просто смотрим там, с какого блока начинается свободное место), а сколько блоков надо
на один Гб, я выяснил, разделив количество блоков на количество Гб на диске
(эти данные тоже можно посмотреть в выводе команды gpart show).

gpart add -b 2097202 -s 8388608 -t freebsd-swap ad4

это 4 Гб под swap (объём свопа я задал, умножив количество имеющейся у меня в сервере оперативки на 2).

gpart add -b 10485810 -s 8388608 -t freebsd-ufs ad4

это 4 Гб под /tmp — с большим запасом. Я запасливый.

gpart add -b 18874418 -s 20971520 -t freebsd-ufs ad4

это 10 Гб под /var на случай разрастания логов.

gpart add -b 39845938 -s 1913679197 -t freebsd-ufs ad4

и всё остальное под /usr.

После этих манипуляций вывод команды gpart show у меня стал такой:

=> 34 1953525101 ad4 GPT (932G)
34 16 1 freebsd-boot (8.0K)
50 2097152 2 freebsd-ufs (1.0G)
2097202 8388608 3 freebsd-swap (4.0G)
10485810 8388608 4 freebsd-ufs (4.0G)
18874418 20971520 5 freebsd-ufs (10G)
39845938 1913679197 6 freebsd-ufs (913G)

То есть я получил такое размещение разделов на диске:

Раздел Тип Размер Файловая система
ad4p1 freebsd-boot 8KB —
ad4p2 freebsd-ufs 1GB /
ad4p3 freebsd-swap 4GB /swap
ad4p4 freebsd-ufs 4GB /tmp
ad4p5 freebsd-ufs 10GB /var
ad4p6 freebsd-ufs 913GB /usr

4. Делаю диск загрузочным

gpart bootcode -b /dist/boot/pmbr ad4

Теперь запишу в загрузочный код загрузчик FreeBSD:

cp /boot/gptboot /tmp
dd if=/dev/zero bs=641 count=1 >> /tmp/gptboot

И запишу загрузочный код в загрузочный сектор:

dd if=/tmp/gptboot of=/dev/ad4p1 bs=512

5. Инициализирую разделы

Дальше созданные разделы необходимо подготовить для работы, то
есть проинициализировать.
Итак, команды:

newfs -O2 /dev/ad4p2 (12)
newfs -O2 -U /dev/ad4p4 (13)
newfs -O2 -U /dev/ad4p5 (14)
newfs -O2 -U /dev/ad4p6 (15)

P.S. Хочу отметить, что вместо команды gpart можно было попробовать воспользоваться командой gpt.

6. Переношу систему на новый жёсткий диск

В качестве подготовки к переносу создал каталоги /mnt/root, /mnt/var и
/mnt/usr:

mkdir /mnt/root; mkdir /mnt/var; mkdir /mnt/usr (16)

смонтировал туда новые разделы:

mount /dev/ad4p2 /mnt/root
mount /dev/ad4p5 /mnt/var
mount /dev/ad4p6 /mnt/usr

И непосредственно перенос системы:

cd /; pax -p eme -X -rw . /mnt/root (20)
cd /var; pax -p eme -X -rw . /mnt/var (21)
cd /usr; pax -p eme -X -rw . /mnt/usr (22)

Теперь редактирую файл /etc/fstab (на новом диске названия разделов не те, что
на старом, так что система при загрузке с терабайтника попытается смонтировать те разделы, которые были на старом диске.

У меня получился вот такой файл:

# Device Mountpoint FStype Options Dump Pass#
/dev/ad4p3 none swap sw 0 0
/dev/ad4p2 / ufs rw 1 1
/dev/ad4p4 /tmp ufs rw 2 2
/dev/ad4p6 /usr ufs rw 2 2
/dev/ad4p5 /var ufs rw 2 2
/dev/acd0 /cdrom cd9660 ro,noauto 0 0

Выключаю сервер командой shutdown -p now и отключаю старый диск.

7. Заключение

После включения у меня всё заработало как надо, кроме mysql, потому что его сокет лежал в /tmp,
а во время переноса на директорию /tmp изменились права. Починил командой
chmod 1777 /tmp

Взято с Opennet.ru .

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Подтвердите, что Вы не бот — выберите человечка с поднятой рукой:

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.