You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Ubuntu系统下USB卸载耗时过长问题及脏页相关内核参数配置咨询

Ubuntu系统下USB卸载耗时过长问题及脏页相关内核参数配置咨询

嗨,我来帮你解决这个USB卸载慢的烦恼~

首先得搞明白为啥写入6GB后卸载要等这么久:Linux系统为了提升写入性能,会先把数据暂时存在内存的「脏页」里,等到合适的时机再批量写入磁盘。但当你要卸载USB时,系统必须把所有还没写入的脏页都同步到设备上,这时候如果脏页太多,自然就会耗时很久。你现在用watch grep -e Dirty: -e Writeback: /proc/meminfo观察回写的方式是对的,但咱们可以通过调整内核参数,从根源上减少这种等待。

下面就给你详细解释那四个脏页参数,以及适合USB设备的配置建议:

一、先搞懂四个参数的作用

这四个参数分为两组,每组里的_ratio(比例)和_bytes(字节数)是互斥的——设置其中一个,另一个就会自动失效,所以选一种方式配置就行(比例更适合内存容量变化的场景):

  • vm.dirty_background_ratio / vm.dirty_background_bytes
    这是「后台自动回写」的触发阈值。当内存中的脏页占总内存的比例(或字节数)达到这个值时,系统会悄悄启动后台进程,慢慢把脏页写入磁盘,不会阻塞你的正常操作。

  • vm.dirty_ratio / vm.dirty_bytes
    这是「强制同步」的阈值。当脏页占比(或字节数)达到这个值时,你的写入进程会被暂时阻塞,直到系统把部分脏页写回磁盘后才继续——这就是有时候你写大文件时突然卡顿的原因。

二、适合USB设备的配置建议

因为USB设备的IO速度通常比内置硬盘慢,咱们需要让系统更早开始回写脏页,避免积累太多到卸载时才处理。推荐的配置如下(以比例为例,你可以根据自己的内存容量调整):

  • vm.dirty_background_ratio=5:当脏页占总内存的5%时,后台就开始偷偷写数据到USB
  • vm.dirty_ratio=10:当脏页占比达到10%时,强制暂停写入进程,优先同步脏页

如果你的内存是16GB,5%就是800MB左右,这样系统会更早启动回写,不会让脏页积累到6GB这么多,卸载时自然就快了。

三、配置生效的方法

1. 临时生效(重启后失效)

直接在终端执行以下命令:

sudo sysctl vm.dirty_background_ratio=5
sudo sysctl vm.dirty_ratio=10

2. 永久生效(重启后依然有效)

编辑/etc/sysctl.d/99-custom-dirty.conf文件(用这个文件是为了不破坏默认配置):

sudo nano /etc/sysctl.d/99-custom-dirty.conf

添加以下内容:

vm.dirty_background_ratio=5
vm.dirty_ratio=10

保存退出后,执行以下命令让配置立即生效:

sudo sysctl --system

额外小技巧

如果有时候你临时写了大文件,不想等参数生效,也可以在卸载前手动执行sync命令,它会强制把所有脏页同步到磁盘,执行完再卸载USB就几乎不用等啦~

备注:内容来源于stack exchange,提问作者bibble235

火山引擎 最新活动