![多个 Ubuntu 版本更新同一个 vnstat 数据库](https://linux22.com/image/1063818/%E5%A4%9A%E4%B8%AA%20Ubuntu%20%E7%89%88%E6%9C%AC%E6%9B%B4%E6%96%B0%E5%90%8C%E4%B8%80%E4%B8%AA%20vnstat%20%E6%95%B0%E6%8D%AE%E5%BA%93.png)
我一直在测试 Ubuntu 16.04 到 18.04 的升级。我上周升级了,今晚重启了 18.04。请注意conky
显示差距的方式vnstat
:
- “昨天”是空白的,但应该有8.76 GB。
- “周”显示 7 GB,但今晚启动 18.04 时应该是 32.33 GB + 2.52 GB。
- “月”显示 45.63 GB,但实际上约为 70 GB
原因是,当我克隆 16.04 来测试分区并升级到 18.04 时,16.04 和 18.04 具有未同步的单独数据库:Bash 脚本将 Ubuntu 克隆到新分区以测试 18.04 LTS 升级
如何让一个分区上的 Ubuntu 16.04 和另一个分区上的 Ubuntu 18.04 都更新同一个vnstat
数据库?我想将数据库存储在ntfs
已设置的第三个分区(文件系统)上,以共享 Windows Subsystem for Linux (WSL) 数据和 Ubuntu 数据。
奖励:假设我可以在 Windows 中收集每日 RX/TX/Total 统计数据,我该如何将它们填充到数据库中vnstat
?
编辑1:使用接受的答案 16.04 和 18.04 都vnstat
在 ntfs 格式分区中更新 16.04 版本数据文件/mnt/e/var/lib/vnstat/
。我不得不回滚 Ubuntu 18.04vnstat
版本 1.18 并将其固定到 Ubuntu 16.04 版本 1.13 又名 1.14-1。
下一步是获取 Windows 10西弗吉尼亚海岸“查看”数据并以某种方式显示它。之后西弗吉尼亚海岸在启动时运行vnstatd
守护进程并收集/更新网络带宽统计信息。
答案1
vnStat 1.3 - 1.18 版本使用相同的数据库结构,因此只要
- 两个安装共享相同的网络接口名称
- 在环境之间切换时需要重新启动
- 守护进程不会同时访问数据库文件
- 数据库文件所有者匹配
正如您遇到的双启动问题一样,假设网络接口名称匹配,这些限制应该不是问题。
需要将数据库目录移动到两个环境都可以访问的位置。在配置文件中,/etc/vnstat.conf
要查找的正确关键字是DatabaseDir
。对于有问题的 ntfs,您可能还需要禁用UseFileLocking
和以避免意外。禁用和CheckDiskSpace
也可能会有所帮助。请注意,在启动 vnStat 守护程序之前,挂载需要可用。CreateDirs
UpdateFileOwner
编辑配置文件需要重新启动或重新加载守护进程。复制数据库目录时最好保持守护进程停止。更改配置文件后,您还需要将更改同步到两个环境。
奖金
理论上,这是可能的。我认为应该可以让命令vnstat
在适用于 Linux 的 Windows 子系统中工作。一旦工作正常,就可以使用该--exportdb
功能将数据库内容转储到 ascii 文件中,然后将收集的数据添加到现有数字中(这可能并不完全简单),然后使用它--importdb
来导回更改并覆盖现有数据库。
可能更简单的替代方案是在两种环境中使用 vnStat 2.0。这将导致拥有一个包含数据的 sqlite 数据库,并且我假设有可用于操作现有数据的 Windows 工具。此选项需要的步骤较少,但仍需要处理 vnStat 在数据库中存储数据的方式。