美文网首页
使用dm-cache,将SSD用作HDD的Cache

使用dm-cache,将SSD用作HDD的Cache

作者: 昆仑草莽 | 来源:发表于2019-03-25 15:49 被阅读0次

在安装服务器的时候,为了方便服务器文件的扩展,会使用逻辑卷(LVM)的方法安装系统,便于后期的文件系统扩展。SSD盘作为cache来增加读写速度,要使用dm-cache,将SSD用作HDD盘的Cache,也可以理解为内存。本文使用256KB(262144B)作为cache block的大小
首先查看可用于cache的实际大小:
1.metadata的大小为
4MB+(16B * nr_blocks) 计算方法
nr_blocks是cache设备的block的数量。

root@xxxx:~$ sudo blockdev --getsize64 /dev/sdb  ###我的ssd卡为sdb   #fdisk  -l 查询
239444426752

2.计算metadata占用的空间
1中得到的是字节数,将其转换为block数,并计算metadata所需分配的空间大小。
4MB+(16B * nr_blocks) 套用方法
4194304 + (16 * 239444426752 / 262144)
=18808832
18808832 / 512
=36736
因此要给metadata分配36736个block。注意,如果计算结果不是整数,应该向上取整。
3.建立ssd-metadata dm设备并清空

root@xxxx:~$ dmsetup create ssd-metadata --table '0 36736 linear /dev/sdb 0'

root@xxxx:~$ sudo dd if=/dev/zero of=/dev/mapper/ssd-metadata

4.计算剩余的块数分配给ssd-cache
239444426752 / 512
=467664896
467664896 - 36736
=467628160
5.建立ssd-cache

root@xxxx:~$ dmsetup create ssd-cache --table '0 467628160 linear /dev/sdb 36736'

6.获得origin设备的扇区数

root@xxxx:~$ blockdev --getsz /dev/sdb
 467664896

7.建立origin设备(256kB)

root@xxxx:~$ dmsetup create hdd-origin --table '0 467664896 cache /dev/mapper/ssd-metadata /dev/mapper/ssd-cache /dev/sdb 512 1 writeback default 0'

8.验证

root@xxxx:~$ sudo ls -l /dev/mapper/hdd-origin
lrwxrwxrwx 1 root root 7 April  10 18:16 /dev/mapper/hdd-origin -> ../dm-2
root@xxxx:~$ sudo dmsetup status /dev/mapper/hdd-origin
0 467664896 cache 8 817/***** 512 0/****** 0 43 0 0 0 0 0 1 writeback 2 migration_threshold 2048 smq 0 rw –

9.挂载

root@xxxx:~$ mkdir /mnt/cache #此处可能会产生错误,可以忽略不计
root@xxxx:~$ mount /dev/mapper/hdd-origin /mnt/cache

配置自启动
把以下两个文件放到/etc/init下。

root@xxxx:~$ sudo vim /etc/init/ssd-cache-wait.conf
# Start monitoring with inotifywait (will block) after the filesystem is
# mounted, when the filesystem is unmounted, teardown the dm devices.

start on mounted MOUNTPOINT=/mnt/cache

script
    inotifywait -e unmount $MOUNTPOINT
    dmsetup suspend hdd-origin
    dmsetup remove hdd-origin
    dmsetup remove ssd-cache
    dmsetup remove ssd-metadata
end script
root@xxxx:~$sudo  vim /etc/init/ ssd-cache.conf
# This would be handy, but it assumes the source device is already
# available, which in this case it isn't.
#start on mounting MOUNTPOINT=/mnt/cache
# Run after /proc and /dev are finalized
start on virtual-filesystems

task
script
    # Setup the /dev/mapper/hdd-origin entity so that mountall will automount it after reading fstab
    dmsetup create ssd-metadata --table '0 36736 linear /dev/nvme0n1p1 0'
    dmsetup create ssd-cache --table '0 467664896 linear /dev/nvme0n1p1 36736'
    dmsetup create hdd-origin --table '0 467628160 cache /dev/mapper/ssd-metadata /dev/mapper/ssd-cache /dev/sda2 512 1 writeback default 0'
    dmsetup resume hdd-origin
end script

到此,设置完成。
停用Cache

root@xxxx:~$ sudo  umount /dev/mapper/hdd-origin
root@xxxx:~$ sudo dmsetup table hdd-origin
0 467664896 cache 252:0 252:1 8:2 512 1 writeback default 0
root@xxxx:~$ sudo dmsetup status hdd-origin
0 467664896 cache 8 817/2624 512 7/409559 104 46 1 0 0 7 0 1 writeback 2 migration_threshold 2048 smq 0 rw - 
root@xxxx:~$ sudo dmsetup suspend hdd-origin
root@xxxx:~$ sudo dmsetup reload hdd-origin --table '0 467664896 cache 252:0 252:1 8:2 512 0 cleaner 0'
root@xxxx:~$ sudo dmsetup resume hdd-origin
root@xxxx:~$ sudo dmsetup wait hdd-origin
<wait for dirty data blocks to be written out>
root@xxxx:~$ dmsetup remove hdd-origin
 root@xxxx:~$ remove ssd-cache
root@xxxx:~$ dmsetup remove ssd-metadata

完成后可以使用以下命令来检测文件系统

root@xxxx:~$ sudo fsck /dev/sdb

相关文章

网友评论

      本文标题:使用dm-cache,将SSD用作HDD的Cache

      本文链接:https://www.haomeiwen.com/subject/hgzvvqtx.html