Добавить жесткий диск в FreeBSD за 5 минут

Часто обращаю внимание на то, что простые вопросы чаще всего мало освещены в интернете. Наверное, это потому, что все гуру уверены, что никто никогда не задаст таких глупых вопросов, ведь это знает каждый. Но моя практика показала, что именно такие мелкие простые вопросы самые частые не только у новичков, а и у серьезных администраторов, которым просто не приходилось иметь с этим дела. Даже серьезные администраторы не делают это каждый день, а, чтобы не забыть, ведут некую шпаргалку для себя, никому в этом не признаваясь. Давайте все исправим. Сейчас Вы узнаете, как за 5 минут добавить жесткий диск в FreeBSD. Итак. Сначала будет преведена полная инструкция для понимания процесса, а в конце будет краткий список действий, которое будет содержать лишь список команд в качестве шпаргалки.

Подробная инструкция с пояснениями

Выбор имени жесткого диска

Для начала нужно определить имя устройства, которое мы только что добавили. В этом нам поможет следующая команда:

geom disk list

01 - geom disk list

Или же вот такая команда:

camcontrol devlist

02 - camcontrol devlist

В реальной системе эти команды покажут более полезную информацию, а именно: названия устройств и их серийные номера.

До установки нового устройства мы знали, что наша система установлена на ada0, значит по логике вещей наш новый диск ada1. Это вы можете определить по названию нового устройства, его серийному номеру или же объему.

Теперь проверим, имеется ли разметка на нашем новом диске

gpart show ada1

03 - gpart show ada1

Диск не имеет никакой разметки.

Удаление существующей разметки

Если диск уже использовался и есть необходимость удалить с него разметку, просто выполните:

gpart destroy -F ada1

Создание разметки GPT

Для начала мы должны создать разметку диска. Крайне рекомендую забыть о MBR и перейти на новую, более удобную и функциональную — GPT.

Создаем разметку GPT на диске, затем проверяем, что вышло:

gpart create -s gpt /dev/ada1
gpart show ada1

04 - gpart create gpt

Теперь у нас диск имеет разметку GPT. Из вывода можно увидеть, что абсолютно весь диск, начиная с LBA 34 и заканчивая LBA 8388541 пуст. LBA 0−33 — зарезервированы системой под таблицу разделов.

Допустим, нам необходимо создать два раздела на этом диске:

  • swap — раздел подкачки
  • data — раздел типа ufs для хранения каких либо, необходимых нам, данных.

Создание разделов (слайсов)

Если установка производится на современные жесткие диски, у которых размер сектора = 4 кб, то при создании разделов (партиций) необходимо использовать выравнивание. Можно поступить двумя способами: 1) если указываем параметры раздела в блоках, то номер блока вводить кратным 8, например: -b 40; 2) если указываем размер раздела в байтах, либо не указываем вообще начало и размер, использовать параметр -a 4k, который подгонит начало и конец раздела под секторы, размером 4 кб. Так как мы в данном примере производим тестовую установку на виртуальный жесткий диск, то этого можно не делать. В любом случае перед созданием разделов нужно точно знать размер сектора вашего накопителя, иначе это выльется жуткими тормозами в работе.

Теперь создадим разделы. Для этого существует команда gpart add с различными параметрами. Первый параметр -t — указывает на тип создаваемой файловой системы. В нашем случае будет использовано два типа: freebsd-swap и freebsd-ufs. Далее идут два необязательных параметра: -b — указывает на номер LBA, начиная с которого необходимо создать раздел. Если не указать данный параметр, то раздел будет создан автоматически с первого свободного LBA. -s — указывает на размер раздела в LBA. Размер одного блока LBA = 512 байт. Желательно указывать в количестве блоков LBA, но можно и в кило/мега/гига/… байтах (суффикс k/M/G). Если не указать данный параметр, то раздел будет создан до максимально возможного LBA в пределах пустой области. Также в качестве параметра можно указать метку раздела, например: -l swap1 — в этом случае будет создана метка /dev/gpt/swap1, по которой можно более удобно обращаться к разделу. Последним обязательным параметром идет путь к диску. В нашем случае: /dev/ada1.

Давайте создадим два раздела, а затем посмотрим, что у нас получилось. Первый раздел будем создавать без указания начального LBA, но с указанием размера 1 Гб (2097152 блоков). Второй раздел создадим без указания начального LBA и без указания размера — таким образом он будет создан на всем свободном пространстве.

gpart add -t freebsd-swap -s 2097152 /dev/ada1
gpart add -t freebsd-ufs /dev/ada1
gpart show ada1

05 - gpart add

Размер можно указывать в байтах, а не блоках. Это значительно удобней. Единственный минус — система не всегда может корректно рассчитать количество блоков. Возможны случаи, когда на диске останется пустовать некоторое количество блоков при указании размера раздела в байтах.

Создание файловой системы (форматирование)

Разделы типа swap форматировать нет необходимости. А вот разделы типа ufs перед использованием должны быть отформатированы. Правильнее сказать: на них должна быть создана файловая система.

Для того, чтобы создать файловую систему на втором разделе, достаточно выполнить следующую команду:

newfs -U /dev/ada1p2

06 - newfs

В данном случае использовался параметр -U — он говорит о том, что в данной файловой системе должен использоваться механизм Soft Updates. Вы можете не использовать этот параметр, чтобы не включать данный механизм.

Монтирование

Следующим шагом будет монтирование разделов. Для начала, чтобы не забыть, добавим наши новые разделы в /etc/fstab. Мой файл после редактирования выглядит вот так:

07 - etc fstab

Я добавил две строки: первая монтирует swap, вторая монтирует новый раздел в каталог /mnt. На деле у вас должен быть какой-то более значимый каталог. Каталог /mnt служит для временно монтированных устройств.

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

mount -a

08 - mount a

Как видно из вывода, раздел /dev/ada1p2 смонтирован. Теперь посмотрим, что произошло с разделом SWAP. Выполним команду:

swapinfo

09 - swapinfo 1

Как видно, новый раздел SWAP не смонтирован. Чтобы смонтировался SWAP, необходимо его включить специальной командой:

swapon /dev/ada1p1

10 - swapon

Точно так же при помощи команды swapoff нужно отключать раздел SWAP перед тем, как произвести над ним какие-то действия.

На этом все действия по добавлению нового жесткого диска в систему завершены.

Краткая инструкция

Дано: жесткий диск /dev/ada1

Цель: удалить существующую разметку, создать новую разметку GPT, создать два раздела: подкачка и данные и подключить их к рабочей системе.

После каждого действия выполняйте gpart show, чтобы наблюдать за результатом. Последовательность действий:

  1. Удалить существующую разметку:
    gpart destroy -F ada1
  2. Создать новую разметку:
    gpart create -s gpt /dev/ada1
  3. Создать два раздела: подкачка и данные:
    gpart add -t freebsd-swap -s 2097152 /dev/ada1
    gpart add -t freebsd-ufs /dev/ada1
  4. Создать файловую систему UFSv2 на втором разделе:
    newfs -U /dev/ada1p2
  5. Добавить в файл /etc/fstab строки для автомонтирования при загрузке:
    /dev/ada1p1     none      swap     sw      0       0
    /dev/ada1p2     /mnt      ufs      rw      2       2
  6. Смонтировать новый раздел (команда монтирует все разделы из файла /etc/fstab):
    mount -a
  7. Включить в работу новый раздел swap командой:
    swapon /dev/ada1p1

На этом настройка завершена.



Если эта статья помогла Вам, пожалуйста, окажите финансовую поддержку моему блогу.

Добавить жесткий диск в FreeBSD за 5 минут: 15 комментариев

  1. Добрый день! Можете помочь с PC-BSD 10.3 Joule? От FreeBSD он отличается наличием интерфейса и конечно же бОльшим количеством багов. В остальном это тот же FreeBSD.
    У меня проблема с подключением жесткого диска фирмы WD, как впрочем и других разделов остальных жестких дисков. На компьютере помимо PC-BSD стоит Linux и Windows XP, а также раздел под NTFS для хранения файлов. Все диски и разделы система видит, но подключить ни один из них не может ни из под иксов ни с консоли.
    Так WD-диск видит как:

    da0: Fixed Direct Access SPC-4 SCSI device
    da0: Serial Number 575831314533333938323238
    da0: 40.000MB/s transfers
    da0: 953837MB (1953458176 512 byte sectors)
    da0: quirks=0x2
    ipfw2 (+ipv6) initialized, divert loadable, nat loadable, default to accept, logging disabled
    При подключении получаем ошибку:

    [alex@FreeBSD-Home] /usr/home/alex# ntfs-3g /dev/da0 /mnt
    NTFS signature is missing.
    Failed to mount ‘/dev/da0’: Invalid argument
    The device ‘/dev/da0’ doesn’t seem to have a valid NTFS.
    Maybe the wrong device is used? Or the whole disk instead of a
    partition (e.g. /dev/sda, not /dev/sda1)? Or the other way around?

    При подключении внутреннего диска получаем также:

    [alex@FreeBSD-Home] /usr/home/alex# ntfs-3g /dev/ada1 /mnt
    NTFS signature is missing.
    Failed to mount ‘/dev/ada1’: Invalid argument
    The device ‘/dev/ada1’ doesn’t seem to have a valid NTFS.
    Maybe the wrong device is used? Or the whole disk instead of a
    partition (e.g. /dev/sda, not /dev/sda1)? Or the other way around?

    1. Добрый день.
      Из Ваших попыток могу сделать вывод, что Вы хотите примонтировать NTFS раздел?
      Если так, то Вы должны монтировать раздел, а не сам физический диск. То есть, например, не da0, а da0p1

      На самом деле, Вы полчаете исчерпывающий ответ выполнения команды:

      Failed to mount ‘/dev/da0’: Invalid argument
      The device ‘/dev/da0’ doesn’t seem to have a valid NTFS.
      Maybe the wrong device is used? Or the whole disk instead of a
      partition (e.g. /dev/sda, not /dev/sda1)? Or the other way around?

      В статье рассматривается совершенно другая тема.

  2. Добрый день. Не комментарий, вопрос: загрузочная флешка FreeBSD (ufs), нужно примонтировать хард с FreeBSD (zfs). Ошибка при монтировании: invalid argument. В чем проблема? Спасибо.

    1. Добрый день.
      Вы не привели пример команды, которой пытаетесь примонтировать раздел.
      Никаких проблем с монтированием не должно быть. Монтируется как любой другой диск/слайс:

      mount -t zfs имя_пула /путь/куда_монтировать
      

      Если так не получается, тогда монтируйте при помощи zfs mount имя_пула, как описано в хэндбуке: https://www.freebsd.org/doc/ru_RU.KOI8-R/books/handbook/filesystems-zfs.html

      1. Добрый день. Денис. Монтирую этой командой:

        mount -t zfs /dev/ada0 /mnt

        Ответ: no such file or directoryХотя в устройствах определен хард, как ada0ada0p1ada0p2ada0p3

        1. Извините:Ответ: no such file or directoryХотя в устройствах определен хард, как

          ada0

          ada0p1

          ada0p2

          ada0p3

          1. Монтировать можно только разделы. ada0 — это жесткий диск, а apa0p1 и т.д. — это разделы.
            Судя по всему, у Вас не ZFS, а простая UFS, т.к. в ZFS нет понятия дисков и разделов — там присутствует понятие пулов (и логических элементов внутри них: файловых систем, снепшотов, клонов, томов). ZFS это виртуальная (абстрактная) файловая система. ZFS пул — это виртуальный «диск», который состоит из разделов физических дисков. При работе с ZFS взаимодействие идет уже не на уровне физических устройств, а на уровне абстрактных пулов.

          1. Я загружаюсь с флешки (ufs). Как мне примонтировать хард (zfs), а именно раздел ada0p3 Спасибо

            1. В ZFS нет разделов. Там совершенно другой принцип. Мне не получится Вам объяснить это, пока Вы не прочитаете о том, что такое ZFS и как это работает. Я выше пытался, видимо, не получилось.
              В ZFS есть пулы, которые физически состоят из дисков, разделов, файлов — из чего угодно, из любых физических носителей. Внешне Вы не видите эти физические диски/разделы и т.д. Внешне Вы видите только ZFS пулы — это абстрактные (виртуальные) диски, если можно так выразиться. Если в обычных файловых системах Вы привыкли к том, что есть физический диск, на котором есть разделы с файловой системой и Вы не задумываетесь над тем, из чего состоит физически жесткий диск, то в ZFS вместо дисков есть пулы, которые содержат файловые системы и т.д. Не диски, а пулы, не разделы, а файловые системы. И Вы не задумываетесь, из чего состоят пулы точно так же, как и не задумываетесь о том, что внутри жестких дисков в привычных файловых системах.
              Еще раз. В ZFS нет понятия жесткий диск и нет понятия раздел. Это всё сокрыто внутри виртуального пула.

              Посмотрите все пулы, которые есть в системе, командой: zpool list — она покажет именно пулы. У Вас может быть один пул. Если хотите посмотреть, какие физические устройтсва входят в этот пул, выполните zpool status -v.
              Затем посмотрите файловые системы, если они имеются, командой zfs list
              Наконец, можете смонтировать необходимые файловые системы, выполнив команду: zfs mount пул/фсистема

              Но лучшим вариантом будет разобраться с тем, что такое ZFS, прежде чем с ней работать. Тем более, как я понимаю, в аварийном режиме.

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