V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
feng32
V2EX  ›  Linux

Linux 下执行 Sync 命令可以避免固态硬盘掉电造成数据丢失吗?

  •  
  •   feng32 · 2016-12-12 19:07:26 +08:00 · 5196 次点击
    这是一个创建于 2937 天前的主题,其中的信息可能已经有所发展或是发生改变。

    请问 Linux 下周期性执行 Sync 命令可以避免固态硬盘掉电造成数据丢失吗?

    另外 Windows 下可以通过某种手段把 SSD 缓存数据写入闪存以避免数据丢失吗?

    这个问题的背景是:电脑 24 小时开机,大部分时间是空闲的状态,但是没有企业级 SSD 防掉电特性,由于怕麻烦也不想装 UPS 然后配置断电自动通知机制

    第 1 条附言  ·  2016-12-13 12:59:09 +08:00
    刚才突然想到,如果关机、重启可以强制 SSD 把缓存里的东西写入闪存,难道就没有方法模拟触发这个过程,来达到相同的效果吗?
    21 条回复    2016-12-15 19:12:05 +08:00
    xfspace
        1
    xfspace  
       2016-12-12 19:22:26 +08:00 via Android
    防断电不是一两句命令能解决的🌚
    XGHeaven
        2
    XGHeaven  
       2016-12-12 19:48:38 +08:00 via Android
    既然大部分时间是空闲的,那就不用担心会丢失数据的问题,概率太低了
    honeycomb
        3
    honeycomb  
       2016-12-12 20:02:49 +08:00
    禁用写入缓存能以性能损失换来避免(多数的)固态硬盘掉电造成数据损失
    loading
        4
    loading  
       2016-12-12 20:53:28 +08:00 via Android
    ssd 的数据是最脆弱的。
    flynaj
        5
    flynaj  
       2016-12-13 00:29:06 +08:00 via Android
    缓存禁用,可以降低,无论什么方法都是降低, ups 才能保证
    flynaj
        6
    flynaj  
       2016-12-13 00:29:36 +08:00 via Android
    可以用笔记本,自动电池
    msg7086
        7
    msg7086  
       2016-12-13 03:27:41 +08:00
    不说别的, SSD 你放在旁边放一年再拿出来,数据就丢了。
    jimzhong
        8
    jimzhong  
       2016-12-13 06:05:35 +08:00
    本来 Linux 就会定期( 10s-60s )回写数据,不需要手动 sync 。
    sagaxu
        9
    sagaxu  
       2016-12-13 09:14:13 +08:00 via Android
    sync 至是从 vfs cache 提交到 dev , dev 有没有写入,不知道。而且 ssd 掉电,不一定丢文件,可能还会丢固件变砖。
    feng32
        10
    feng32  
    OP
       2016-12-13 09:49:31 +08:00
    @xfspace
    @XGHeaven
    @honeycomb
    @loading
    @jimzhong
    @sagaxu

    把缓存从 fs cache 提交到 dev 应该还是可以做到的,但是就怕 dev 把数据攒着没写入闪存,万一停电就完了
    目前我的情况是一台 NUC 兼任 HTPC / Steam Host / CentOS Server (svn, git, trac, wordpress), 24 小时开机并且不是经常使用

    这种情况下,看起来安全的方法只有定时重启了吧?感觉这个方法好挫啊。。。
    luojiyin87
        11
    luojiyin87  
       2016-12-13 10:15:21 +08:00
    不如有备用电源
    type
        12
    type  
       2016-12-13 10:59:51 +08:00
    简单的方法就是再加一块机械硬盘
    npc0der
        13
    npc0der  
       2016-12-13 11:47:52 +08:00
    买个带掉电保护的 比你考虑这个问题是在。从软件上 你做的任何 基本徒劳。
    sagaxu
        14
    sagaxu  
       2016-12-13 13:10:48 +08:00
    @feng32 数据完整性要靠冗余,不能靠单个硬件的可靠性
    redsonic
        15
    redsonic  
       2016-12-13 13:15:28 +08:00
    9 楼正解, SSD 的主控比机械盘的复杂的多,简单讲可以认为是一个 raid 控制器,很多 raid 卡都带电池......
    feng32
        16
    feng32  
    OP
       2016-12-13 13:24:47 +08:00
    @sagaxu NUC 里面两个 M2 槽位,就算建个 RAID1 也完全没意义吧,停电了还是一起挂

    而且要保护的数据主要是系统运行中产生的临时文件、运行中的 vdi 虚拟硬盘、文件系统状态等,并非文档资料可以定期跑 rsync 来备份
    doubleflower
        17
    doubleflower  
       2016-12-13 13:32:03 +08:00
    哪个 SSD 这么 SB 攒着一把缓存数据半天不写闪存
    kokutou
        18
    kokutou  
       2016-12-13 13:32:40 +08:00 via Android
    @feng32 搞个 ups 。。。断电自动发送关机指令不久行了。。。
    Siril
        19
    Siril  
       2016-12-13 18:01:06 +08:00
    硬盘(或 raid 卡)内部的缓存, 没听说过操作系统可以控制的。
    专业的 raid 卡带电池,就是为了避免掉电时丢失缓存中的数据。
    企业级 ssd 一般内置一个大电容,作用类似。
    因为这个缓存对操作系统透明,而且各厂商实现方式可能区别较大,主要是没听说过这个缓存有相关接口暴露给 OS 的。

    一般操作系统可以控制的缓存,是指系统内存作为文件系统读写的缓存。

    比如说死机了,可能内存中未写入磁盘的数据丢失,但是硬盘没掉电,硬盘的缓存仍然同步完成;
    再比如说断电了,内存中的数据丢失,硬盘掉电导致硬盘自身的缓存中的数据也丢失,此时 raid 卡的 fbwc 和 bbwc 啥的, ssd 的“电池” 就起作用了。
    Siril
        20
    Siril  
       2016-12-13 18:01:43 +08:00
    sync 仅可以同步操作系统内存中的缓存数据。
    ecutuning
        21
    ecutuning  
       2016-12-15 19:12:05 +08:00
    不同的系统有不同的实现,就 GNU/Linux 而言, Linux 的内核将数据存放于内存之中,这些数据可能是修改过的 superblock ,未保存的 inode 和待读、待写数据。因为这样可以提升系统性能。而 sync 只是单纯地执行了一次 sync(2) 的系统调用。它的工作是保证将这些内存中的数据写入磁盘。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2600 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 05:34 · PVG 13:34 · LAX 21:34 · JFK 00:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.