The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Установка 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

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

   gpart bootcode -p /boot/gptboot -i 1 ad4

Другой вариант записи:
   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 на ранних версиях FreeBSD можно было воспользоваться 
командой gpt, однако во FreeBSD 8.0 команды 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

Ну и всё. Удачи!
 
28.04.2009 , Автор: penkovmm , Источник: http://www.opennet.me/soft/FreeBSD_...
Ключи: freebsd, gpt, partition, disk, install
Раздел:    Корень / Администратору / Система / FreeBSD специфика / Установка и апгрейд FreeBSD и приложений.

Обсуждение [ RSS ]
  • 1.1, Shinkei aka HepB (?), 21:56, 27/04/2009 [ответить]  
  • +/
    Неплохой ман по GPT. На самом деле станно, что система не поняла ТБ. Обычно fdisk, bsdlabel и иже с ними сливаются реально только на каких нибудь рейдах более 2ТБ.
     
  • 1.2, Alex Deiter (?), 23:33, 27/04/2009 [ответить]  
  • +/
    Проблемы с определением геометрии диска у fdisk действительно есть.
    Я даже когда патч писал. Что-то вроде:

    --- sbin/fdisk/fdisk.c.orig     Thu May 31 17:52:24 2005
    +++ sbin/fdisk/fdisk.c  Mon Dec 17 18:16:51 2005
    @@ -844,7 +847,19 @@
            error = ioctl(fd, DIOCGMEDIASIZE, &o);
            if (error == 0) {
                    disksecs = o / u;
    -               cyls = dos_cyls = o / (u * dos_heads * dos_sectors);
    +               cyls = dos_cyls = o / (u * heads * sectors);
    +               if (cyls > 1023 && heads > 16 && sectors > 63)
    +                       return (disksecs);
    +               if (cyls > 1023 || heads > 255 || sectors > 63) {
    +                       sectors = dos_sectors = 63;
    +                       heads = dos_heads = 16;
    +                       cyls = dos_cyls = o / (u * heads * sectors);
    +                       if (cyls > 1023) {
    +                               heads = dos_heads = 255;
    +                               cyls = dos_cyls = o / (u * heads * sectors);
    +                       }
    +                       dos_cylsecs = cylsecs = heads * sectors;
    +               }
            }

            return (disksecs);

    Но сейчас, когда есть gpart, format/bsdlabel не нужны.

     
     
  • 2.3, tor (??), 13:58, 28/04/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Попросите закомиттеть в  исходники патч. Не всегда есть под рукой диск с установленной системой а с сидирома проделать такие операции проблематично.
    >[оверквотинг удален]
    >+            
    >          
    >dos_cylsecs = cylsecs = heads * sectors;
    >+            
    >   }
    >        }
    >
    >        return (disksecs);
    >
    >Но сейчас, когда есть gpart, format/bsdlabel не нужны.

     

  • 1.4, dvg_lab (ok), 11:07, 29/04/2009 [ответить]  
  • +/
    интересно поддержка GPT в sysinstall когданить появится?
     
  • 1.5, Аноним (-), 01:45, 30/04/2009 [ответить]  
  • +/
    О господи, кто-то все еще использует CHS-адресацию вместо LBA?Какое ретроградство!
     
  • 1.6, Tri (?), 13:37, 26/05/2010 [ответить]  
  • +/
    Делал
    gpart bootcode -b /dist/boot/pmbr ad4
    gpart bootcode -p /boot/gptboot -i 1 ad4
    с винта не загружается - биос пишет что нет загружаемого устройства
    пробывал
    cp /boot/gptboot /tmp
    dd if=/dev/zero bs=641 count=1 >> /tmp/gptboot
    dd if=/tmp/gptboot of=/dev/ad4p1 bs=512
    в последней строке вылезло сообщение что /dev/ad4p1 invalid argument
    и так же не загружается с этого винта(
    Кто-нибудь сталкивался с подобным?
     
  • 1.7, LOMONOSOV (ok), 10:14, 20/10/2010 [ответить]  
  • +/
    Хороший MAN
    Спасибо
     
  • 1.8, nagual (ok), 00:49, 13/12/2011 [ответить]  
  • +/
    В этой строке либо ошибка
    gpart add -b 34 -s 16 -t freebsd-boot ad4
    либо размер блока может быть разным.
    В моём случае со старым сказёвым винтом:
    gpart add -b 34 -s 256 -t freebsd-boot ad4
     
  • 1.9, alex (??), 19:10, 15/09/2020 [ответить]  
  • +/
    только что угробил на ту тему день. :) короче - можнго и не gpt(у меня биос как раз не умел), достаточно вместо mbr/dos type указать bsd type для винта - и все работает. то есть во время разметки - в  описании самого винта - modify - и выбираем bsd. далее - безслайсовая структура, просто перечень разделов. все встало и загрузилось.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру