Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
feng32
V2EX  ›  Linux

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

  •  
  •   feng32 · Dec 12, 2016 · 5716 views
    This topic created in 3449 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

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

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

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

    比如说死机了,可能内存中未写入磁盘的数据丢失,但是硬盘没掉电,硬盘的缓存仍然同步完成;
    再比如说断电了,内存中的数据丢失,硬盘掉电导致硬盘自身的缓存中的数据也丢失,此时 raid 卡的 fbwc 和 bbwc 啥的, ssd 的“电池” 就起作用了。
    Siril
        20
    Siril  
       Dec 13, 2016
    sync 仅可以同步操作系统内存中的缓存数据。
    ecutuning
        21
    ecutuning  
       Dec 15, 2016
    不同的系统有不同的实现,就 GNU/Linux 而言, Linux 的内核将数据存放于内存之中,这些数据可能是修改过的 superblock ,未保存的 inode 和待读、待写数据。因为这样可以提升系统性能。而 sync 只是单纯地执行了一次 sync(2) 的系统调用。它的工作是保证将这些内存中的数据写入磁盘。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2283 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 78ms · UTC 00:57 · PVG 08:57 · LAX 17:57 · JFK 20:57
    ♥ Do have faith in what you're doing.