请问 Linux 下周期性执行 Sync 命令可以避免固态硬盘掉电造成数据丢失吗?
另外 Windows 下可以通过某种手段把 SSD 缓存数据写入闪存以避免数据丢失吗?
这个问题的背景是:电脑 24 小时开机,大部分时间是空闲的状态,但是没有企业级 SSD 防掉电特性,由于怕麻烦也不想装 UPS 然后配置断电自动通知机制
1
xfspace 2016-12-12 19:22:26 +08:00 via Android
防断电不是一两句命令能解决的🌚
|
2
XGHeaven 2016-12-12 19:48:38 +08:00 via Android
既然大部分时间是空闲的,那就不用担心会丢失数据的问题,概率太低了
|
3
honeycomb 2016-12-12 20:02:49 +08:00
禁用写入缓存能以性能损失换来避免(多数的)固态硬盘掉电造成数据损失
|
4
loading 2016-12-12 20:53:28 +08:00 via Android
ssd 的数据是最脆弱的。
|
5
flynaj 2016-12-13 00:29:06 +08:00 via Android
缓存禁用,可以降低,无论什么方法都是降低, ups 才能保证
|
6
flynaj 2016-12-13 00:29:36 +08:00 via Android
可以用笔记本,自动电池
|
7
msg7086 2016-12-13 03:27:41 +08:00
不说别的, SSD 你放在旁边放一年再拿出来,数据就丢了。
|
8
jimzhong 2016-12-13 06:05:35 +08:00
本来 Linux 就会定期( 10s-60s )回写数据,不需要手动 sync 。
|
9
sagaxu 2016-12-13 09:14:13 +08:00 via Android
sync 至是从 vfs cache 提交到 dev , dev 有没有写入,不知道。而且 ssd 掉电,不一定丢文件,可能还会丢固件变砖。
|
10
feng32 OP |
11
luojiyin87 2016-12-13 10:15:21 +08:00
不如有备用电源
|
12
type 2016-12-13 10:59:51 +08:00
简单的方法就是再加一块机械硬盘
|
13
npc0der 2016-12-13 11:47:52 +08:00
买个带掉电保护的 比你考虑这个问题是在。从软件上 你做的任何 基本徒劳。
|
15
redsonic 2016-12-13 13:15:28 +08:00
9 楼正解, SSD 的主控比机械盘的复杂的多,简单讲可以认为是一个 raid 控制器,很多 raid 卡都带电池......
|
16
feng32 OP @sagaxu NUC 里面两个 M2 槽位,就算建个 RAID1 也完全没意义吧,停电了还是一起挂
而且要保护的数据主要是系统运行中产生的临时文件、运行中的 vdi 虚拟硬盘、文件系统状态等,并非文档资料可以定期跑 rsync 来备份 |
17
doubleflower 2016-12-13 13:32:03 +08:00
哪个 SSD 这么 SB 攒着一把缓存数据半天不写闪存
|
19
Siril 2016-12-13 18:01:06 +08:00
硬盘(或 raid 卡)内部的缓存, 没听说过操作系统可以控制的。
专业的 raid 卡带电池,就是为了避免掉电时丢失缓存中的数据。 企业级 ssd 一般内置一个大电容,作用类似。 因为这个缓存对操作系统透明,而且各厂商实现方式可能区别较大,主要是没听说过这个缓存有相关接口暴露给 OS 的。 一般操作系统可以控制的缓存,是指系统内存作为文件系统读写的缓存。 比如说死机了,可能内存中未写入磁盘的数据丢失,但是硬盘没掉电,硬盘的缓存仍然同步完成; 再比如说断电了,内存中的数据丢失,硬盘掉电导致硬盘自身的缓存中的数据也丢失,此时 raid 卡的 fbwc 和 bbwc 啥的, ssd 的“电池” 就起作用了。 |
20
Siril 2016-12-13 18:01:43 +08:00
sync 仅可以同步操作系统内存中的缓存数据。
|
21
ecutuning 2016-12-15 19:12:05 +08:00
不同的系统有不同的实现,就 GNU/Linux 而言, Linux 的内核将数据存放于内存之中,这些数据可能是修改过的 superblock ,未保存的 inode 和待读、待写数据。因为这样可以提升系统性能。而 sync 只是单纯地执行了一次 sync(2) 的系统调用。它的工作是保证将这些内存中的数据写入磁盘。
|