В FreeBSD партицией (partition) называется то, к чему во многих других системах обращаются как к разделу. Партиции в FreeBSD создаются и изменяются утилитой disklabel(8) и именуется ad0s1a, ad0s1e и так далее. В то же время слайс (slice) FreeBSD по сути напоминает расширенный DOS раздел, на котором можно создавать логические диски (партиции FreeBSD). Обычно при стандартной установке системы FreeBSD создается один слайс FreeBSD, который средствами утилиты disklabel(8) логически размечается на партиции.
vinum(8) при первой инициализации займет 265 блоков по 512 байт (132,5 Кбайт) на каждой партиции, которую вы ему укажете при создании программного RAID-1. При этом информация, записанная в этих блоках, будет утрачена. Для того, чтобы сохранить данные, необходимо изменить логическую разметку диска таким образом, чтобы 265 блоков, необходимых vinum(8) пришлись на область диска, в которой заведомо нет полезных вам данных. Такой областью является swap-партиция. Кроме того, необходимо объединить все остальные партиции в одну, а логическую разметку поручить vinum(8). Это позволит вам сэкономить на каждую следующую партицию по 132,5 Кбайт свободного места на диске, и, что наиболее важно, сохранить информацию.
создайте новый каталог vinum где-нибудь в корневой директории новой системы.
# mkdir /usr/local/cdsystem/root/vinum
здесь вы будете хранить все файлы, необходимые для запуска vinum(8).
перейдите в только что созданный каталог и сделайте резервную копию таблицы партиций первого жесткого диска. Это позволит в случае неудачи с vinum(8) быстро вернуть разметку диска на партиции в первоначальное состояние, с большой степенью вероятности, что информация, находящаяся на этих партициях, не пострадает. Кроме того, созданный таким образом файл послужит шаблоном для создания новой, измененной для использования vinum(8) таблицы партиций.
# cd /usr/local/cdsystem/root/vinum
# disklabel ad0s1 > ad0s1
продублируйте только что созданный файл - его необходимо отредактировать.
# cp ad0s1 ad0s1.vinum
откройте новый файл в любом, удобном вам, текстовом редакторе и отредактируйте, следуя дальнейшим инструкциям
# vi ad0s1.vinum
с
этого момента необходимо действовать очень внимательно и осторожно. От этого
зависит судьба всей информации, записанной на диск.
Таблица, расположенная в самом низу - это и есть таблица партиций. Вы будете работать с первыми тремя столбцами - size (размер, в блоках), offset (смещение) и fstype (тип файловой системы). Отредактируйте эту таблицу следующим образом:
измените размер swap партиции (b), уменьшив его на 265. Эти 265 блоков vinum(8) будет использовать для своих служебных нужд
#
size
offset
fstype
[fsize bsize bps/cpg]
a:
1048576
0
4.2BSD
2048
16384
89
# (Cyl. 0 - 65*)
b:
2096887
1048576
swap
# (Cyl. 65*- 195*)
c:
78156162
0
unused
0
0
# (Cyl. 0 - 4864*)
e:
1048576
3145728
4.2BSD
2048
16384
89
# (Cyl. 195*- 261*)
f:
524288
4194304
4.2BSD
2048
16384
94
# (Cyl. 261*- 293*)
g:
41943040
4718592
4.2BSD
2048
16384
89
# (Cyl. 293*- 2904*)
измените смещение партиции e, уменьшив его на 265
#
size
offset
fstype
[fsize bsize bps/cpg]
a:
1048576
0
4.2BSD
2048
16384
89
# (Cyl. 0 - 65*)
b:
2096887
1048576
swap
# (Cyl. 65*- 195*)
c:
78156162
0
unused
0
0
# (Cyl. 0 - 4864*)
e:
1048576
3145463
4.2BSD
2048
16384
89
# (Cyl. 195*- 261*)
f:
524288
4194304
4.2BSD
2048
16384
94
# (Cyl. 261*- 293*)
g:
41943040
4718592
4.2BSD
2048
16384
89
# (Cyl. 293*- 2904*)
измените размер партиции e. Чуть позже вы удалите партиции f и g и создадите вместо них одну партицию e, размером, равным сумме размеров всех трех партиций e,f и g + 265. То есть новый размер партиции е = старый размер е + размер f + размер g + 265.
#
size
offset
fstype
[fsize bsize bps/cpg]
a:
1048576
0
4.2BSD
2048
16384
89
# (Cyl. 0 - 65*)
b:
2096887
1048576
swap
# (Cyl. 65*- 195*)
c:
78156162
0
unused
0
0
# (Cyl. 0 - 4864*)
e:
43516169
3145463
4.2BSD
2048
16384
89
# (Cyl. 195*- 261*)
f:
524288
4194304
4.2BSD
2048
16384
94
# (Cyl. 261*- 293*)
g:
41943040
4718592
4.2BSD
2048
16384
89
# (Cyl. 293*- 2904*)
измените тип файловой системы партиции е на "vinum"
#
size
offset
fstype
[fsize bsize bps/cpg]
a:
1048576
0
4.2BSD
2048
16384
89
# (Cyl. 0 - 65*)
b:
2096887
1048576
swap
# (Cyl. 65*- 195*)
c:
78156162
0
unused
0
0
# (Cyl. 0 - 4864*)
e:
43516169
3145463
vinum
2048
16384
89
# (Cyl. 195*- 261*)
f:
524288
4194304
4.2BSD
2048
16384
94
# (Cyl. 261*- 293*)
g:
41943040
4718592
4.2BSD
2048
16384
89
# (Cyl. 293*- 2904*)
удалите партиции f и g
#
size
offset
fstype
[fsize bsize bps/cpg]
a:
1048576
0
4.2BSD
2048
16384
89
# (Cyl. 0 - 65*)
b:
2096887
1048576
swap
# (Cyl. 65*- 195*)
c:
78156162
0
unused
0
0
# (Cyl. 0 - 4864*)
e:
43516169
3145463
vinum
2048
16384
89
# (Cyl. 195*- 261*)
Таблица партиций для первого жесткого диска готова. Даже если ваш второй жесткий диск физически не идентичен первому, то нет необходимости повторять все предыдущие действия по изменению таблицы партиций во второй раз.
теперь настало время для изменения таблицы партиций второго жесткого диска. Для этого выполните следующие действия:
продублируйте файлы ad0s1 и ad0s1.vinum. С небольшими изменениями, описанными ниже, их можно использовать для второго жесткого диска
# cp ad0s1 ad2s1 # cp ad0s1.vinum ad2s1.vinum
отредактируйте файлы ad2s1 и ad2s1.vinum в любом, удобном для вас текстовом редакторе. Таблицы партиций будут практически идентичными, изменится только название устройства
# vi ad2s1
замените в первой строке
# /dev/ad0s1c: на # /dev/ad2s1c:
замените в третьей строке
disk: ad0s1 на disk: ad2s1
проделайте то же самое с файлом ad2s1.vinum
если диски разные, у них будет разным количество цилиндров и секторов. В этом случае, для того, чтобы получить эту информацию для второго жесткого диска, выполните следующие действия:
Эта команда выводит данные о количестве секторов и цилиндров вашего диска. Ее вывод в вашем случае может сильно отличаться от приведенного выше, однако структура вывода сохранится такой же в любом случае.
отредактируйте файлы ad2s1 и ad2s1.vinum
измените количество цилиндров на значение из вывода предыдущей команды
cylinders:5004
измените количество секторов в соответствии с выводом предыдущей команды
sectors/unit:80405262
измените размер партиции c в соответствии с выводом disklabel(8)
c:
80405262
0
unused
0
0
# (Cyl. 0 - 4864*)
На данном этапе вы готовы к изменению таблиц партиций дисков для реализации программного RAID-1 с помощью vinum(8).
vinum(8) не имеет конфигурационных файлов. Для создания нового тома необходимо воспользоваться командой vinum create <аргументы>,
где аргументы - что именно надо создать (например, volume), и параметры того,
что надо создать. Нет необходимости общаться с vinum(8) из командной строки. Вместо
этого можно создать файл, в котором будет указана вся конфигурация программного RAID. Этот файл будет использован только один раз - при первой инициализации vinum(8). В дальнейшем он вам не понадобится.
# cd /usr/local/cdsystem/root/vinum
# touch raid.create
отредактируйте raid.create. В данном примере он должен содержать следующее:
drive first device /dev/ad0s1e
drive second device /dev/ad2s1e
volume var
plex name var.p0 org concat volume var
sd name var.p0.s0 drive first plex var.p0 len var_len driveoffset var_offset
plex name var.p1 org concat volume var
sd name var.p1.s0 drive second plex var.p1 len var_len driveoffset var_offset
volume tmp
plex name tmp.p0 org concat volume tmp
sd name tmp.p0.s0 drive first plex tmp.p0 len tmp_len driveoffset tmp_offset
plex name tmp.p1 org concat volume tmp
sd name tmp.p1.s0 drive second plex tmp.p1 len tmp_len driveoffset tmp_offset
volume local
plex name local.p0 org concat volume local
sd name local.p0.s0 drive first plex local.p0 len local_len driveoffset local_offset
plex name local.p1 org concat volume local
sd name local.p1.s0 drive second plex local.p1 len local_len driveoffset local_offset
Здесь:
var_len - размер партиции var, взятый из файла ad0s1
e:
1048576
3145728
4.2BSD
2048
16384
89
# (Cyl. 195*- 261*)
var_offset - смещение партиции var, равное смещению партиции e из файла ad0s1, минус размер swap партиции, минус смещение swap партиции плюс 265 блоков.
Проще посчитать это так: первая партиция после swap-партиции будет иметь смещение
в 265 блоков. Все остальные партиции будут иметь смещение, равное их смещению
в файле ad0s1 минус смещение первой после swap партиции плюс 265 блоков.
В данном примере в результате получится файл следующего содержания :
drive first device /dev/ad0s1e
drive second device /dev/ad2s1e
volume var
plex name var.p0 org concat volume var
sd name var.p0.s0 drive first plex var.p0 len 1048576b driveoffset 265b
plex name var.p1 org concat volume var
sd name var.p1.s0 drive second plex var.p1 len 1048576b driveoffset 265b
volume tmp
plex name tmp.p0 org concat volume tmp
sd name tmp.p0.s0 drive first plex tmp.p0 len 524288b driveoffset 1048841b
plex name tmp.p1 org concat volume tmp
sd name tmp.p1.s0 drive second plex tmp.p1 len 524288b driveoffset 1048841b
volume local
plex name local.p0 org concat volume local
sd name local.p0.s0 drive first plex local.p0 len 41943040b driveoffset 1573129b
plex name local.p1 org concat volume local
sd name local.p1.s0 drive second plex local.p1 len 41943040b driveoffset 1573129b
subdisk: vinum(8) позволяет каждый диск (drive) логически разметить на поддиски (subdisk), аналогично тому, как утилита disklabel(8) логически размечает slice FreeBSD.
plex: несколько поддисков (subdisk) можно объединить в один логический элемент - плекс (plex) и обращаться к нему как к одному устройству, независимо от того, на одном ли поддиске (subdisk) и на одном ли физическом диске находятся данные одного такого объединенного элемента. vinum(8) поддерживает concatenated plexes - режим, при котором один и более поддисков (subdisk) объединяются в единый логический объект, доступ к которому происходит последовательно (т.е. только при заполнении первого поддиска (subdisk) происходит запись на второй и т.д., что не дает выигрыша в скорости ни записи, ни чтения) и striped plexes - режим, похожий на предыдущий, но доступ к нему происходит "полосами", или "блоками" определенной величины (при достижении границы "полосы" на одном физическом диске, обращение идет на второй физический диск, что может повысить пиковую скорость чтения/записи в 2 раза). Такой режим также имеет название RAID-0.
volume: виртуальный объект, представляющий собой совокупность одного или нескольких плексов (plex), обращение к которым происходит как к единому целому. Если задействовано 2 и более плексов (plex), между ними происходит зеркалирование.
таким образом, в только что созданном файле находятся команды vinum(8), при выполнении которых будет создано 3 тома (volume), каждый из которых состоит из двух плексов (plex), между которыми и будет происходить зеркалирование. Каждый плекс (plex) представляет собой объединение одного-единственного поддиска (subdisk). Всего поддисков (subdisk) 6 - по три на каждом из двух дисков (drive), представляющих собой в конечном счете партиции.
Для того, чтобы система знала, что некоторые ее разделы зеркалируются,
ей необходимо об этом сообщить в конфигурационных файлах. Перейдите в каталог
/etc/ будущей системы и отредактируйте несколько конфигурационных файлов.
отредактируйте файл /usr/local/cdsystem/etc/fstab
# cd /usr/local/cdsystem/etc/
# vi fstab
в данном примере изначально он выглядит так:
/dev/ad0s1a
/
ufs
rw
1
1
/dev/ad0s1b
none
swap
sw
0
0
/dev/ad0s1e
/var
ufs
rw
2
2
/dev/ad0s1f
/tmp
ufs
rw
2
2
/dev/ad0s1g
/usr/local
ufs
rw
2
2
proc
/proc
procfs
rw
0
0
измените его таким образом:
удалите упоминание о корне (ad0s1a), если оно у вас есть. Корень будет монтироваться с CDROM, причем информация о том, с какого именно устройства, уже содержится в самом ядре.
добавьте swap со второго винчестера. Этот шаг не обязателен, однако, без него, место отведенное под swap-партицию на втором жестком диске, не будет использоваться.
/dev/ad0s1b
none
swap
sw
0
0
/dev/ad2s1b
none
swap
sw
0
0
измените устройства для партиций на "vinum"
/dev/vinum/var
/var
ufs
rw
2
2
/dev/vinum/tmp
/tmp
ufs
rw
2
2
/dev/vinum/local
/usr/local
ufs
rw
2
2
В результате внесенных поправок, файл fstab будет содержать:
с этой строкой при каждой загрузке системы в память будет загружаться модуль vinum.ko, в обязанности которого и входит поддержка программного RAID.
Самый трудный этап позади, и теперь вы готовы к запуску vinum(8) . Проверьте
еще раз, все ли правильно вы сделали, от этого будет зависеть успех дальнейших
ваших действий. Убедившись, что все в порядке, перейдите к разделу Запись новой системы на диск.