Назад | Перейти на главную страницу

Gjournaling универсальный сервер в небольшой сети

У меня есть сервер общего назначения (почтовый, веб, файловый и т. Д.), Работающий в небольшой смешанной (Windows / FreeBSD) сети. Я не доволен тем, как я изначально выложил диск, и, поскольку он в любом случае устарел, я намерен просто переустановить всю машину и исправить все мелкие неудобства, пока я на нем.

Я использовал журнал на других машинах и я им доволен. Я знаю, как настроить новые разделы, чтобы они содержали как журнал, так и данные, и я знаю, как создать журнал для существующего раздела на вновь созданном разделе. У меня еще осталось несколько вопросов о gjournal, прежде чем я начну работать с машиной:

  1. Как мне создать разделы, содержащие как журнал, так и данные во время установки FreeBSD, если мне нужно создать отдельный раздел журнала для каждого раздела, я достигну ограничения в 8 букв раздела.

  2. Я знаю, что монтировать асинхронную файловую систему при ведении журнала безопасно, но монтируют ли люди также и корневую файловую систему асинхронно во время ведения журнала, или это неразумно?

  3. Можно ли вести дневник сразу целиком? Это избавит от необходимости значительного увеличения размера моего корня, / var и нескольких других небольших разделов, чтобы на самом деле было достаточно места для хранения данных журнала.

Некоторое время назад я наконец нашел способ выполнить то, что хочу, но забыл обновить свой вопрос здесь. В будущем (начало октября) заменю всю машину и действительно перейду на ZFS. А пока я опубликую здесь свое решение, чтобы другие люди могли его использовать.

Решение состоит в том, чтобы установить файловую систему из FreeBSD. Мне не удалось загрузить модуль ядра gJournal с диска fixit, поэтому я установил базовую установку на USB-накопитель. После очистки всего диска, на который я собирался установить, я загрузил машину с USB-накопителя.

Первым шагом была загрузка модуля ядра gJournal с "gjournal load"а затем пометить диск, на который я собирался установить (/dev/ad0) "gjournal label ad0". Теперь вы должны увидеть /dev/ad0.journal вход внутрь /dev. Следующим шагом будет запись загрузочного сектора на этот диск с помощью bsdlabel. В случае моей системы amd64 это было "bsdlabel -wBm amd64 ad0.journal", подробные сведения о вашей системе см. в bsdlabel(8) страница руководства. Я приступил к редактированию меток с помощью bsdlabel, как вы обычно меняете расположение диска, но используя /dev/ad0.journal где вы обычно используете /dev/ad0. В итоге я указал следующую схему в bsdlabel -e ad0.journal:

# size offset fstype [fsize bsize bps/cpg]
a: 256M    16 4.2BSD   2048 16384
b:   2G     *   swap
c:    *     * unused
d:   2G     * 4.2BSD   2048 16384
e: 512M     * 4.2BSD   2048 16384
f:   6G     * 4.2BSD   2048 16384
g:    *     * 4.2BSD   2048 16384

Конкретные размеры, которые вам нужны, конечно, будут отличаться. После указания этих разделов /dev/ должен показать различные /dev/ad0.journala через /dev/ad0.journalg записи. Теперь мы можем отформатировать новые файловые системы, используя newfs(8). Я использовал UFS2 с ярлыками, чтобы я мог ссылаться на /dev/label/<label> в /etc/fstab вместо дискового устройства. Я выполнил команду newfs -O 2 -J -L rootfs /dev/ad0.journala, -O 2 использует UFS2, -J включает ведение журнала для определенного раздела и -L rootfs имена /dev/ad0.journala к /dev/label/rootfs. Не забывайте, что вы можете отключить ведение журнала, например, на /tmp раздел, в этом случае не передавайте -J флаг для этих разделов. Несмотря на то, что они находятся на журналируемом диске, GEOM будет вести журнал только для систем UFS, которые сигнализируют, являются ли записываемые данные метаданными или нет, что происходит только для файловых систем, созданных с помощью -J или для которых вы включаете ведение журнала вручную через tunefs(8).

Теперь сложная часть закончена, и нам просто нужно установить ОС в нашу только что созданную журналируемую файловую систему, я просто использовал установочный диск. Поскольку мы уже создали нашу файловую систему, программу установки с компакт-диска использовать нельзя. Вместо этого просто смонтируйте компакт-диск из установки USB, затем смонтируйте где-нибудь вновь созданную корневую файловую систему (я буду использовать /tmp/newinstall как точку монтирования здесь). Затем смонтируйте все остальные разделы, которые вы создали внутри /tmp/newinstall так как /var, /usr и все, что вы разделили. Затем установите для переменной среды DESTDIR этот новый путь (export DESTDIR=/tmp/newinstall).

Теперь перейдите в каталог, в который вы смонтировали установочный компакт-диск, на компакт-диске вы найдете папку, названную в честь загруженной вами версии FreeBSD, внутри этой папки есть несколько папок, каждая из которых содержит install.sh файл, запустите каждый из этих сценариев (вы должны указать ядро ​​GENERIC в качестве аргумента сценария установки в каталоге ядра).

После этого не забудьте скопировать / переместить /tmp/newinstall/boot/GENERIC к /tmp/newinstall/boot/kernel или вы обнаружите, что система не может найти ядро ​​для загрузки. Последнее, но не менее важное редактировать /tmp/newinstall/boot/loader.conf и добавьте строку geom_journal_load="YES" чтобы загрузить поддержку gjournal во время загрузки, вы можете (и должны) удалить эту строку, если вы компилируете собственное ядро ​​с включенной поддержкой gJournal (необходимые параметры для этого: options UFS_GJOURNAL и options GEOM_JOURNAL).

Последнее, что осталось сделать, - это создать /tmp/newinstall/etc/fstab файл, который монтирует необходимые разделы во время загрузки. Вы можете указать /dev/ad0.journala устройства или /dev/label/rootfs и другие предоставленные вами ярлыки. Подробную информацию о синтаксисе и параметрах файла можно прочитать в fstab(5)справочная страница. Имейте в виду, что с ведением журнала теперь «безопасно» [1] монтировать ваши файловые системы асинхронно. Также обратите внимание, что устройства с журналированием не нуждаются в fsck вы все равно должны заполнить fsck столбец в файле fstab. Если вы этого не сделаете, ваша система НЕ ЗАГРУЗИТСЯ. Система распознает журналируемые диски и по-разному обрабатывает их при автоматических проверках fsck, вместо этого выполняя соответствующие проверки для журналируемой системы.

[1] - Безопасный означает, что ваша файловая система не будет повреждена из-за сбоя при ведении журнала. Данные, которые не были записаны на диск во время сбоя, все равно могут быть потеряны, например, если они буферизуются ОС или диском. Данные могут оставаться в этих буферах довольно долгое время.

Просто предложение для 1. - используйте таблицу gpt, она поддерживает до 26 разделов

Для 3. - можно сразу записать весь диск (данные отсюда)

PS. И в любом случае вы должны попробовать все это на какой-нибудь виртуальной машине, например VirtualBox.

PPS. Может стоит попробовать ZFS?