![是否可以将外部 XFS 日志保存在 RAM 磁盘上?](https://linux22.com/image/207345/%E6%98%AF%E5%90%A6%E5%8F%AF%E4%BB%A5%E5%B0%86%E5%A4%96%E9%83%A8%20XFS%20%E6%97%A5%E5%BF%97%E4%BF%9D%E5%AD%98%E5%9C%A8%20RAM%20%E7%A3%81%E7%9B%98%E4%B8%8A%EF%BC%9F.png)
甲骨文建议让外部日志位于低延迟设备上。
XFS 日志的默认位置与数据位于同一块设备上。由于对日志的同步元数据写入必须在任何关联的数据写入开始之前成功完成,因此这种布局可能会导致数据库服务器上典型工作负载模式的磁盘争用。要解决此问题,您可以将日志放置在具有低延迟 I/O 路径的单独物理设备上。
延迟最低的设备是 RAM 磁盘。但是可以使用 RAM 磁盘吗?
我问是因为似乎有必要指定logdev
选项在创建 XFS 文件系统期间。如果我将 XFS 创建期间写入 logdev 的任何结构放在 RAM 磁盘上,则在重新启动后都会丢失。
我知道 RAM 磁盘无助于防止断电。但我的用例是通过 USB 连接的 SSD。我只是想要一些防止拉扯 USB 电缆的保护措施。
开箱即用似乎不起作用。
在/dev/ram0
.
# modprobe brd rd_size=102400 max_part=1 rd_nr=1
使用外部日志创建 XFS。
# mkfs.xfs -l logdev=/dev/ram0 /dev/sdc1
挂载文件系统。
# mkdir /media/xfs
# mount -t xfs -o logdev=/dev/ram0 /dev/sdc1 /media/xfs
卸载。
# umount /media/xfs
移除 RAM 磁盘。
# rmmod brd
重新创建 RAM 磁盘。
# modprobe brd rd_size=102400 max_part=1 rd_nr=1
重新挂载文件系统。
# mount -t xfs -o logdev=/dev/ram0 /dev/sdc1 /media/xfs
mount: /media/xfs: wrong fs type, bad option, bad superblock on /dev/sdc1, missing codepage or helper program, or other error.
但是当我修复文件系统时,我可以挂载它。
# xfs_repair -l /dev/ram0 /dev/sdc1
[...]
Phase 2 - using external log on /dev/ram0
- zero log...
totally zeroed log
[...]
Maximum metadata LSN (1:2880) is ahead of log (0:0).
Format log to cycle 4.
done
# mount -t xfs -o logdev=/dev/ram0 /dev/sdc1 /media/xfs
现在我想知道这样做是否是个好主意。
答案1
可以使用zram,假设只有一个zram设备,sda作为块设备
$ modprobe zram num_devices=1
$ echo 1G > /sys/block/zram0/disksize
$ mkfs.xfs /dev/sda -L scratch01 -l logdev=/dev/zram0 -f -K -s size=4096
$ mount -L scratch01 -o logdev=/dev/zram0 /mnt
$ df -h /mnt/
Filesystem Size Used Avail Use% Mounted on
/dev/sda 746G 5.3G 740G 1% /mnt