我正在努力解决 LVM 问题。我有一个附加到现有 LV 的写入缓存。我一直在轮询 LV 以及 writecache
lvs -o+writecache_total_blocks,writecache_free_blocks
但无论我等待多久,空闲块永远不会达到总块数,几乎就像缓存在写入后没有完全清空一样。它只达到了总块数的大约一半,然后就坐在那里。
这是预期的行为,还是我的缓存在写入后没有正确刷新?
答案1
如果您使用lvconvert --type writecache
(而不是--type cache
),则缓存写回在低/高水位线系统中工作:当缓存使用率达到高水位线时回写开始(一些快速谷歌搜索表明这可能是 50%),并在达到高水位线时停止低水位线(默认可能是 45%)。您的体验似乎符合预期的默认行为。
如果您希望缓存在写回时完全变空,您可能需要将低水位线设置为 0%。这将是--cachesettings 'low_watermark=0'
创建缓存时的选项。或者您可能想要设置--cachesettings 'cleaner=1'
逐渐刷新缓存中的所有数据,就像从 LV 中删除缓存时如何执行lvconvert --splitcache
或将执行此操作一样。lvconvert --uncache
还有其他可调设置;有关更多详细信息,请参见lvmcache(7)
手册页。
如果您没有设置任何--cachesettings
选项,写入缓存将使用内核内置默认值工作。任何自定义的缓存设置都可以通过以下方式验证lvs -o +cache_settings
:如果缓存使用内核默认值,则该CacheSettings
列将为空。