我有一个通用(邮件、网络、文件等)服务器,运行在一个小型混合(Windows/FreeBSD)网络上。我对原来的磁盘布局不满意,而且由于磁盘已经过时了,我打算重新安装整个机器,并修复所有小问题。
我一直在使用日记在其他机器上,我对此很满意。我知道如何设置新分区,以便它们包含日志和数据,并且知道如何在新建的分区上为现有分区创建日志。在开始使用这台机器之前,我还有几个关于 gjournal 的问题:
如何在 FreeBSD 安装期间创建包含日志和数据的分区,如果我必须为每个分区创建一个单独的日志分区,我将达到 8 个分区字母的限制。
我知道在日志记录时异步挂载文件系统是安全的,但人们在日志记录时是否也会异步挂载根文件系统,或者这是不明智的?
是否可以一次性记录整个切片?这样就无需大幅增加根分区、/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_GJOURNAL
和options GEOM_JOURNAL
)。
最后要做的就是创建一个/tmp/newinstall/etc/fstab
文件,在启动时挂载所需的分区。您可以指定/dev/ad0.journala
设备或/dev/label/rootfs
您提供的其他标签。有关该文件的语法和选项的详细信息,请参阅fstab(5)
的手册页。请记住,使用日志记录,现在可以“安全地”[1] 异步挂载文件系统。还请注意,虽然日志记录设备不需要,但fsck
您仍应填写fsck
fstab 文件中的列。如果不这样做,您的系统将无法启动。系统会识别日志记录磁盘并在自动 fsck 检查中以不同的方式处理它们,而是对日志记录系统运行适当的检查。
[1] - 安全意味着您的文件系统不会因日志记录时的崩溃而损坏。崩溃时尚未写入磁盘的数据仍可能会丢失,例如,如果这些数据被操作系统或磁盘缓冲。数据可能会保留在这些缓冲区中相当长一段时间。
答案2
仅建议 1. - 使用 gpt 表,它最多支持 26 个分区
对于 3. - 你可以一次 gjournal 整个磁盘(数据来自此处)
PS. 无论如何,您都应该从 VirtualBox 等虚拟机上尝试这一切。
PPS. 也许你应该尝试一下 ZFS?