Gjournaling 小型网络上的通用服务器

Gjournaling 小型网络上的通用服务器

我有一个通用(邮件、网络、文件等)服务器,运行在一个小型混合(Windows/FreeBSD)网络上。我对原来的磁盘布局不满意,而且由于磁盘已经过时了,我打算重新安装整个机器,并修复所有小问题。

我一直在使用日记在其他机器上,我对此很满意。我知道如何设置新分区,以便它们包含日志和数据,并且知道如何在新建的分区上为现有分区创建日志。在开始使用这台机器之前,我还有几个关于 gjournal 的问题:

  1. 如何在 FreeBSD 安装期间创建包含日志和数据的分区,如果我必须为每个分区创建一个单独的日志分区,我将达到 8 个分区字母的限制。

  2. 我知道在日志记录时异步挂载文件系统是安全的,但人们在日志记录时是否也会异步挂载根文件系统,或者这是不明智的?

  3. 是否可以一次性记录整个切片?这样就无需大幅增加根分区、/var 和其他几个小分区的大小,从而有足够的空间来存储日志数据。

答案1

经过一番折腾,我终于找到了一种方法来实现我想要的,但忘了在这里更新我的问题。将来(10 月初)我将更换整个机器并切换到 ZFS。同时,我将在这里发布我的解决方案,以便其他人可以使用它。

解决方案是从 FreeBSD 内部创建要安装的文件系统。我无法从修复磁盘加载 gJournal 内核模块,因此我将基本安装安装到 USB 棒上。在擦除我要安装的整个磁盘后,我从 USB 棒启动了机器。

第一步是使用“ gjournal load”加载 gJournal 内核模块,然后将我要安装的磁盘标记为 ( /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)

现在棘手的部分已经结束,我们只需将操作系统安装到我们新创建的日志文件系统中,我只是使用了安装盘。由于我们已经创建了文件系统,因此无法使用 CD 安装程序。相反,只需从 USB 安装中安装 CD,然后将新创建的根文件系统安装到某处(我将/tmp/newinstall在此处用作安装点)。然后将您在其中创建的所有其他分区安装/tmp/newinstall/var/usr以及您分区的其他任何分区。接下来将环境变量 DESTDIR 设置为这个新路径(export DESTDIR=/tmp/newinstall)。

现在将目录更改为您安装安装 CD 的位置,在 CD 上您将找到一个以您下载的 FreeBSD 版本命名的文件夹,在此文件夹中有几个文件夹,每个文件夹包含一个install.sh文件,运行每个脚本(您必须将内核 GENERIC 指定为内核目录中安装脚本的参数)。

完成此操作后,不要忘记复制/移动/tmp/newinstall/boot/GENERIC/tmp/newinstall/boot/kernel,否则您会发现系统找不到要启动的内核。最后但并非最不重要的是,编辑/tmp/newinstall/boot/loader.conf并添加在启动时加载 gjournal 支持的行geom_journal_load="YES",如果您编译包含 gJournal 支持的自定义内核,则可以(并且必须)删除此行(此操作所需的选项是options UFS_GJOURNALoptions GEOM_JOURNAL)。

最后要做的就是创建一个/tmp/newinstall/etc/fstab文件,在启动时挂载所需的分区。您可以指定/dev/ad0.journala设备或/dev/label/rootfs您提供的其他标签。有关该文件的语法和选项的详细信息,请参阅fstab(5)的手册页。请记住,使用日志记录,现在可以“安全地”[1] 异步挂载文件系统。还请注意,虽然日志记录设备不需要,但fsck您仍应填写fsckfstab 文件中的列。如果不这样做,您的系统将无法启动。系统会识别日志记录磁盘并在自动 fsck 检查中以不同的方式处理它们,而是对日志记录系统运行适当的检查。

[1] - 安全意味着您的文件系统不会因日志记录时的崩溃而损坏。崩溃时尚未写入磁盘的数据仍可能会丢失,例如,如果这些数据被操作系统或磁盘缓冲。数据可能会保留在这些缓冲区中相当长一段时间。

答案2

仅建议 1. - 使用 gpt 表,它最多支持 26 个分区

对于 3. - 你可以一次 gjournal 整个磁盘(数据来自此处)

PS. 无论如何,您都应该从 VirtualBox 等虚拟机上尝试这一切。

PPS. 也许你应该尝试一下 ZFS?

相关内容