问题:Thunar 声称它已将我的文件写入拇指驱动器,然后我花了 15 分钟等待驱动器卸载。
我知道这与写入缓存有关。我希望有一种方法可以让它做我想做的事情,即让文件管理器向我显示剩余写入时间的准确进度条(带有取消复制的选项!)
我不清楚的是:
- Ubuntu 是否检测某些驱动器为可移动的并应用最佳写入缓存设置?
- 如果是,我该如何强制它驱动我?
总的来说,即授人以渔:
- 如何调整驱动器的写入缓存?理想的写入缓存应该是小的写回缓存,以最快的速度写入磁盘。实际上,缓存本身不需要很小,只要允许少量脏页即可。
- 每次使用 USB 驱动器时如何应用此设置?
全面披露:我使用的是 Mint 17.2 Xfce
答案1
控制在写入磁盘之前允许累积多少脏页的设置由虚拟内存子系统控制。
对于具有大量 RAM 的系统,通常需要进行调整。很遗憾,这些设置是系统范围的。(呃,Linus。)
使用以下方法查看当前设置:
sudo sysctl -a | grep vm.dirty
在我的机器上:
vm.dirty_background_bytes = 0
vm.dirty_background_ratio = 5
vm.dirty_bytes = 0
vm.dirty_expire_centisecs = 3000
vm.dirty_ratio = 10
vm.dirty_writeback_centisecs = 500
看一眼这些设置的文档。在我的计算机上,vm.dirty_ratio
设置为 10(即 RAM 的 10%)。这意味着磁盘缓存将吞噬10% x 64GB = 6.4GB
数据,然后再将其写入磁盘。
我将尝试通过将以下内容写入我的来调整这些设置/etc/sysctl.conf
:
vm.dirty_bytes = 67108864
vm.dirty_background_bytes = 1048576
vm.dirty_expire_centisecs = 30
vm.dirty_writeback_centisecs = 30
当我了解更多信息后,我会更新这个答案,但我认为这些积极的设置对我的 SSD 来说很好,因为它有自己的大型驱动器写入缓存。
答案2
我不确定我是否能回答你想听到的问题。有一个“oldschool”选项可以禁用该缓冲区 - 您可以使用 fstab同步属性。
这将让你摆脱现代设备欺骗你“你的快速计算机已经完成”但实际上并没有完成的方式。现实仍然是“它完成了就完成了”,同步将让您的计算机向您显示何时真正完成。
如果您确实对“进度条”(或 shell 中的等待时间)感到厌烦,并且想要调整缓冲区大小和行为,您可以通过编辑 sysfs/block 选项来实现。比较https://unix.stackexchange.com/questions/30286/can-i-configure-my-linux-system-for-more-aggressive-file-system-caching 为此。可用选项列表可能因您(或内核)使用的 ioscheduler 而异。
现在的问题是:如何将其应用于 USB 记忆棒。
据我所知,Linux Mint udisks 处理 USB 棒自动挂载,并且没有优雅的方法来教 udisks 合理的默认值。你可以尝试udisks-glue来帮你。
如果你只想详细调整有限数量的 USB 设备,你可以编写一个 udev 规则来设置所需的挂载或 sysfs 选项。我总是查看https://wiki.archlinux.org/index.php/Udev#Writing_udev_rules每当我摆弄 udev 时。
希望有帮助
答案3
用户 Nachtexpress 关于同步的建议是正确的。至于如何动态实现这一点,请按照 Debian Wiki 上针对此服务的说明使用/配置 Autofs(链接:https://wiki.debian.org/AutoFs)。
您会注意到,您可以按照以下语法和行在配置文件中设置 USB 驱动器的同步选项:
/var/autofs/removable /etc/auto.removable --timeout=2,sync,nodev,nosuid
以上只是一个示例,您可以根据您的特定需求进行配置;请转到 wiki 链接获取有关如何执行此操作的完整说明。
我认为 debian wiki 适合 ubumtu 用户,因为这个发行版源自它。
希望这可以帮助。