Linux安装在USB盘上,关机时数据会丢失吗?

Linux安装在USB盘上,关机时数据会丢失吗?

我正在观察该命令的使用情况sync,并且我读到该命令确保内存中的任何内容都写入磁盘。

当我考虑在可移动磁盘(USB)上安装 Ubuntu 时,我想知道是否有必要执行此命令。

我担心的是,当关闭计算机时,如果数据仍在写入,这些数据最终会因系统关闭而丢失。

sync关机或者重启系统前是否需要运行?

有人对此进行更详细的解释吗?

答案1

意外关机或系统崩溃时可能会丢失数据 - 此时操作系统无法将数据从内存刷新到磁盘。在正常关机或重启期间,操作系统仍处于控制状态,因此它会将数据写入磁盘。

换句话说,正常关机/重启是可以的。还有一种情况称为halt状态 - 机器仍在运行,但操作系统已完成关机过程并放弃对硬件的控制。在这种情况下,关闭机器也是可以的。不正常的断电和关机是不可以的。

答案2

正常关机sync在磁盘卸载后(或以只读方式重新安装,就根文件系统而言)最后会执行 。通常,这不会执行任何操作,因为文件系统已在 上同步umount,因此数据应该在“卸载文件系统”阶段写入。

由于当服务器无法访问时,网络文件系统可能需要任意长的时间才能卸载,因此某些 init 系统会实现超时umount,并且如果磁盘中的挂载点仍处于挂载状态,则无法卸载磁盘,这可能会导致无法彻底卸载文件系统的连锁故障,在这种情况下,当达到关机点时可能仍有未写入的数据。然后,最终同步将确保即使文件系统未彻底卸载也不会丢失任何数据。下次启动时进行的文件系统检查和/或日志重放(取决于文件系统)应该会清除此问题。

最终同步在(理想情况下)不存在读写挂载且没有其他程序仍在运行时运行,因此此后不会生成任何新的写入请求。此时,持有已删除文件的打开文件句柄的僵尸进程也应该已被清理。

磁盘可以实现自己的缓存,这应该是完全透明的,但是 Linux 通常还是会向驱动器发送关机命令并等待报告完成;驱动器固件通常足够智能,可以在那之前完成所有待处理的写入。

对于 USB 设备,SCSI 命令被包装在 USB 数据包中,因此相同的序列对它们有效,但由于 USB 比 SCSI 慢很多,内核缓存通常会变得大很多,因此sync可能需要几分钟才能完成,但内核会尽职尽责地等待。

相关内容