好的,这是一个在两个树莓派系统上出现的非常奇怪的问题,它们分别使用8GB的SD存储卡:
简单的例子: 当我将文件写入磁盘时,看起来文件已经被写入。 我可以编辑一个文件
所以我认为的情况是,Ubuntu将文件写入了Ubuntu的磁盘缓存,但没有将文件提交到磁盘。用户空间程序可以继续读取文件并使用它们,但缓存会从内存中返回目录列表和文件内容,而不是从磁盘中返回。因为在重新启动后,磁盘上没有任何新数据。
另一个例子:
创建一个大小为1GB的文件。 ll列出该文件。 df -h显示磁盘上的数据使用了1GB的空间。 但是在重新启动后,该文件消失了,df -h显示旧的可用空间。
有趣的事实:我知道SD卡的最大写入速度是9MB/秒,当我使用笔记本电脑将磁盘映像dd到SD卡时,我得到的速度就是这个。但是在树莓派上运行这个dd命令时,dd报告的写入速度是110MB/秒。这是不可能的。这就是为什么我认为操作系统只是写入内存而不是写入磁盘的原因。
第三个例子: 我有一个编辑名为interfaces的文件的脚本,然后以root身份将其复制到/etc/network/interfaces文件中,以更改设备的IP。然后脚本重新启动。
在重新启动后,设备仍然使用旧的IP地址... 奇怪...
第四个例子: 树莓派运行着一个Percona数据库。我有一个包含186条记录的表。我清空了这个表。用PHP代码和Webmin查看数据,表格是空的,就像应该的那样。但是在重新启动后,数据又回来了。真的... 186条记录。这让我感到很困惑。
我可能完全错了。有什么想法吗?
我一直在处理这个Ubuntu安装,并在每次重要软件更新后通过克隆磁盘映像进行定期备份。我注意到一些奇怪的事情(比如运行我的脚本后IP没有改变),但直到今天才意识到这个问题,似乎我所有克隆的磁盘映像都存在这个问题。它在某个时候肯定正常工作过,然后在树莓派上的Ubuntu出了问题...
问题是:我该怎么做才能让Ubuntu写入SD卡?
简单的例子: 当我将文件写入磁盘时,看起来文件已经被写入。 我可以编辑一个文件
vim test.dat
,输入文本并保存。
ll命令会列出该文件。
cat命令会显示文件的内容。
但是在重新启动后,文件就会消失。所以我认为的情况是,Ubuntu将文件写入了Ubuntu的磁盘缓存,但没有将文件提交到磁盘。用户空间程序可以继续读取文件并使用它们,但缓存会从内存中返回目录列表和文件内容,而不是从磁盘中返回。因为在重新启动后,磁盘上没有任何新数据。
另一个例子:
dd if=/dev/zero of=testfile.dat bs=1M count=1000
创建一个大小为1GB的文件。 ll列出该文件。 df -h显示磁盘上的数据使用了1GB的空间。 但是在重新启动后,该文件消失了,df -h显示旧的可用空间。
有趣的事实:我知道SD卡的最大写入速度是9MB/秒,当我使用笔记本电脑将磁盘映像dd到SD卡时,我得到的速度就是这个。但是在树莓派上运行这个dd命令时,dd报告的写入速度是110MB/秒。这是不可能的。这就是为什么我认为操作系统只是写入内存而不是写入磁盘的原因。
第三个例子: 我有一个编辑名为interfaces的文件的脚本,然后以root身份将其复制到/etc/network/interfaces文件中,以更改设备的IP。然后脚本重新启动。
#!/bin/bash
cp /var/project/scripts/interfaces /etc/network/interfaces
/sbin/reboot
在重新启动后,设备仍然使用旧的IP地址... 奇怪...
第四个例子: 树莓派运行着一个Percona数据库。我有一个包含186条记录的表。我清空了这个表。用PHP代码和Webmin查看数据,表格是空的,就像应该的那样。但是在重新启动后,数据又回来了。真的... 186条记录。这让我感到很困惑。
我可能完全错了。有什么想法吗?
我一直在处理这个Ubuntu安装,并在每次重要软件更新后通过克隆磁盘映像进行定期备份。我注意到一些奇怪的事情(比如运行我的脚本后IP没有改变),但直到今天才意识到这个问题,似乎我所有克隆的磁盘映像都存在这个问题。它在某个时候肯定正常工作过,然后在树莓派上的Ubuntu出了问题...
问题是:我该怎么做才能让Ubuntu写入SD卡?
apt-get
安装了一些东西,重启后是否会保留? - seanlano