AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 115069
In Process
Amos Shapira
Amos Shapira
Asked: 2010-02-22 00:05:30 +0800 CST2010-02-22 00:05:30 +0800 CST 2010-02-22 00:05:30 +0800 CST

在关闭 linux 之前还需要执行 sync(8) 吗?

  • 772

sync; sync; sync; sleep 30; halt我仍然看到人们在谈论关闭或重新启动 Linux 时建议使用咒语。

我从 Linux 一开始就一直在运行它,虽然这是 BSD 4.2/4.3 和 SunOS 4 天推荐的过程,但我不记得至少在过去十年中我必须这样做,在此期间我可能经历了Linux的关机/重启可能数千次。

我怀疑这是不合时宜的,因为即使在单用户模式(例如/tmp)下,内核也无法卸载和同步根文件系统和其他关键文件系统,因此有必要明确告诉它刷新尽可能多的数据到磁盘。

这些天,还没有在内核源代码中找到相关代码(通过http://lxr.linux.no和谷歌挖掘),我怀疑内核足够聪明,甚至可以干净地卸载根文件系统,并且文件系统足够聪明在正常shutdown//期间卸载自身之前有效地执行同步(2 reboot)poweorff。

"sync; sync; sync"仅在文件系统无法完全卸载(例如物理磁盘故障)或系统处于仅强制直接重新启动(8)将使其摆脱冻结状态(例如负载太高,让它安排关机命令)。

sync在卸载可移动设备之前,我也从不执行此过程,也从未遇到问题。

另一个例子 - Xen 允许 DomU 从 Dom0 发送shutdown命令,这被认为是“干净关闭”,无需任何人先登录并输入魔法sync; sync; sync。

我是对的还是我幸运地关闭了数千次系统?

synchronization filesystems
  • 5 5 个回答
  • 19353 Views

5 个回答

  • Voted
  1. DaveG
    2010-02-22T01:43:26+08:002010-02-22T01:43:26+08:00

    人们会sync; sync在 a 之前运行的原因halt是该halt命令不会在较旧的 linux 上干净地关闭系统。在 SYSVr4 系统上执行此操作的正确方法始终是告诉 init 移动到不同的运行级别。

    BSD 和 SunOS 4 不是 SYSVr4 操作系统,这就是它们不同的原因。Solaris (SunOS 5) 是 SYSVr4,Linux 挑选出它想要使用的 SYSVr4 标准。

    在大多数 UNIX(Linux 是例外之一)上,使用停止实际上是一种非常糟糕的方法,因为它实际上并没有通过 init 脚本运行来执行诸如停止进程和卸载磁盘之类的事情——它只是停止处理器。

    如果您可以保证永远不会使用任何类型的 UNIX 系统而不是 Linux,那么您可以继续使用halt- 如果您有机会使用其他 UNIX,那么我建议您养成使用init _runlevel_或shutdown.

    该shutdown命令实际上告诉init进程更改其运行级别运行级别- 这样做时 init 然后继续运行与该运行级别关联的每个 K* init 脚本和 S* init 脚本。运行级别 0 中的脚本之一执行文件系统的卸载。

    在 Linux 上,该halt命令只是调用该shutdown命令,除非运行级别已经是 0(关闭)或 6(重新启动);所以那里没有损失。

    卸载文件系统的操作umount将在卸载之前将数据同步到磁盘。

    如果您一直sync; sync; halt在 Linux 上运行,那么您对文件系统状态会感到满意,因为开发人员已确保这样halt做是正确的;但是使用以下方法会更正确:shutdown now

    • 18
  2. jeberle
    2012-10-19T11:03:05+08:002012-10-19T11:03:05+08:00

    我只能说你为什么会sync多次发布。该命令安排刷新到磁盘,但在实际刷新完成之前返回。任何后续sync命令都将阻塞,直到任何未完成的刷新正在进行,然后再安排另一个刷新并退出。因此,sync; sync确保同步刷新。你不需要做超过 2 次,也不需要sleep混合。

    • 9
  3. mpez0
    2010-02-22T05:26:38+08:002010-02-22T05:26:38+08:00

    使用多个sync调用是为了让操作系统和磁盘有时间刷新写队列。 "sync; sync; sync"被认为没那么有用;有一个"sync<cr> sync<cr> sync<cr",而您的 ASR-33 执行回车/换行时的延迟提供了足够的延迟。停止总是调用同步;问题是在断电之前是否有足够的时间来清理队列。

    原始海报sync; sleep 30更符合预期。

    • 8
  4. Jay Vaughan
    2013-03-23T01:57:25+08:002013-03-23T01:57:25+08:00

    那些告诉我们“同步;同步;同步”没有任何目的的人正在暴露您的年龄。

    回到过去的美好时光,在 Unix 适合青少年使用之前,我们曾经不得不使用 TAPE 来满足我们的流/备份需求。通常,我们会挂载一个基于磁带的文件系统来将备份流式传输到,等等。我们中的一些人都拥有这一长而细的磁性塑料胶带,用于将我们的文件存储在..

    'sync;sync;sync' 命令是一种可以告诉这些旧磁带机一直倒带到最后(在关机之前)的方式——它们有可以接收同步 cmd 的固件(就像所有好的文件系统一样)做),并且如果几乎紧跟两个同步缓冲区命令,磁带驱动器本身会将其解释为“倒带并卸载磁带”。除了这种方法之外,没有任何方法可以告诉磁带驱动器倒带,而且它有点卡住了。当硬盘驱动器变得更可用时,这种习惯就传到了这个词中——我们这些顽固的老操作员不只是重新分配( )我们的肌肉记忆你知道的!我相信它在磁带变得不那么普遍并且硬盘变得更加可用之后很快就获得了民间传说的地位,但它仍然对我们这些使用磁带驱动器的人有用。

    • 4
  5. joshudson
    2021-11-25T09:44:39+08:002021-11-25T09:44:39+08:00

    如果您的系统退化(例如/bin/shis init),那么古老的行为会再次出现。halt将看到它不知道运行级别并且无法命令运行级别更改并实际发出halt系统调用并立即关闭系统。但是,sync现在是同步的(至少从 2000 年开始就是这样),您不需要多次运行它。

    在所有其他情况下,sync之前发布halt并没有做任何有用的事情。这是一个记住你的训练的例子,而不是它背后的原因。在正常系统上,有后台作业,因此如果立即关闭系统sync;sync;sync;halt就不会工作halt。

    • 0

相关问题

  • 文件复制到分支机构

  • 在本地同步 FTP 文件夹

  • 在 Windows Server 环境中跨 LAN 或 FTP 自动同步/备份文件?

  • 网络文件同步工具

  • 允许跨平台同步的密码管理器[关闭]

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve