从最终用户的角度来看,安装选项sync
和安装选项之间有什么区别?async
使用这些选项之一安装的文件系统是否比使用另一个选项安装的速度更快?如果没有设置,哪一个选项是默认选项?
man mount
说该sync
选项可能会缩短闪存的使用寿命,但这可能是过时的传统观念。无论如何,这让我有点担心,因为我的主硬盘驱动器(分区/
和/home
)是 SSD 驱动器。
Ubuntu 安装程序 (14.04) 没有指定分区选项sync
,但已通过选项设置。这是我的,我添加了一些额外的行(请参阅注释),但没有更改安装程序所做的行中的任何内容:async
/
async
/home
defaults
/etc/fstab
# / was on /dev/sda2 during installation
UUID=7e4f7654-3143-4fe7-8ced-445b0dc5b742 / ext4 errors=remount-ro 0 1
# /home was on /dev/sda3 during installation
UUID=d29541fc-adfa-4637-936e-b5b9dbb0ba67 /home ext4 defaults 0 2
# swap was on /dev/sda4 during installation
UUID=f9b53b49-94bc-4d8c-918d-809c9cefe79f none swap sw 0 0
# here goes part written by me:
# /mnt/storage
UUID=4e04381d-8d01-4282-a56f-358ea299326e /mnt/storage ext4 defaults 0 2
# Windows C: /dev/sda1
UUID=2EF64975F6493DF9 /mnt/win_c ntfs auto,umask=0222,ro 0 0
# Windows D: /dev/sdb1
UUID=50C40C08C40BEED2 /mnt/win_d ntfs auto,umask=0222,ro 0 0
因此,如果我的/dev/sda
是 SSD,为了减少磨损,我是否应该添加文件系统async
选项?我应该为我定义的附加分区设置或选项吗? SSD 和 HDD 驱动器的推荐方法是什么?/
/home
sync
async
/etc/fstab
答案1
async
与 相反sync
,很少使用。 async
是默认值,您无需在nfs-utils
1.0.0 及以下版本中显式指定。在 1.0.0 之后的所有版本中,sync
这是默认值,async
如果需要,必须明确请求。
该选项sync
意味着对相应文件系统的所有更改都会立即刷新到磁盘;正在等待相应的写入操作。对于机械驱动器来说,这意味着速度会大大减慢,因为系统必须将磁盘头移动到正确的位置;用户sync
态进程必须等待操作完成。相比之下,async
系统缓冲写入操作并优化实际写入;同时,用户空间中的进程不会被阻止,而是继续运行。 (如果出现问题,则close()
返回-1
。errno = EIO
)
SSD:我不知道 SSD 内存与 RAM 内存相比有多快,但肯定不会更快,因此sync
可能会带来性能损失,尽管不像机械磁盘驱动器那么糟糕。就使用寿命而言,这个智慧仍然有效,因为写入 SSD 会导致其“磨损”。最糟糕的情况是一个流程对同一个地方进行大量更改;它们中sync
的每一个都会击中 SSD,而async
(默认)SSD 由于内核缓冲而不会看到其中的大多数。
归根结底,不要理会sync
,很可能您对此感到满意async
。
答案2
警告:如果您的安装不断被写入(例如有价值的日志、安全摄像头录音等)并且您无法免受突然断电的影响,那么使用“异步”安装选项可能不是最好的主意。它可能会导致记录丢失或数据不完整(无用)。不太聪明的例子:想象一个小偷进入商店并立即切断相机电源线。闯入的视频记录已被记录,但可能尚未刷新/同步到磁盘,因为它(或其中的一部分)可能已缓冲在内存中,因此在摄像机断电时丢失。
答案3
物有所值,截至 2022 年和 RHEL 7.9
使用自加密 SSD 的服务器或一些使用 Dell BOSS M.2 的 Linux 操作系统,速度超过 100gbps HDR infiniband...默认情况下 NFS 连接为同步在版本 4.1 和协议=tcp 下。即使/cat proc/fs/nfsd/versions
显示,我也无法让 nfs v4.2 工作,+4.2
但我不知道 nfs 4.2 比 4.1 好多少。
我尝试过/etc/exports
本质/scratch *(rw)
上是这样的同步对于 5GB tar 文件的单个 nfs 文件副本,平均 460 MB/秒(最大突发为 480)也/scratch *(rw,async)
没有发现任何差异。rsync --progress <source> <dest>
将同一文件本地复制到同一服务器上的另一个文件夹(不通过网络)的平均速度为 435 MB/秒。作为参考,我总是获得比传统 1gbps 铜缆稳定的 112MB/秒 ssh scp 速度。
/etc/exports on rhel-7.9 nfs-server
/scratch *(rw,no_root_squash)
exportfs -v on rhel-7.9 nfs-server
/scratch <world>(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)
mount on rhel 7.9 nfs-client
server:/scratch on /scratch type nfs4 (rw,nosuid,noexec,relatime,vers=4.1,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=192.168.1.2,local_lock=none,addr=192.168.1.1,_netdev)
/etc/fstab on rhel 7.9 nfs-client
192.168.1.1:/scratch /scratch nfs4 _netdev,defaults,nosuid,noexec 0 0
还 :https://www.admin-magazine.com/HPC/Articles/Useful-NFS-Options-for-Tuning-and-Management (文章没有日期,没有提及 nfs v3 与 v4)
大多数人在 NFS 服务器上使用同步选项。对于同步写入,服务器仅在数据写入稳定存储时才回复 NFS 客户端。许多人更喜欢此选项,因为如果 NFS 服务器出现故障或网络连接丢失,他们丢失数据的可能性很小。
异步模式允许服务器在处理完 I/O 请求并将其发送到本地文件系统后立即回复 NFS 客户端;也就是说,它不会等待数据写入稳定存储才响应 NFS 客户端。这可以节省 I/O 请求的时间并提高性能。但是,如果 NFS 服务器在 I/O 请求到达磁盘之前崩溃,您可能会丢失数据。
当文件系统安装在客户端上时,只需在安装命令行或 NFS 文件系统的文件 /etc/fstab 中放置同步或异步即可设置同步或异步模式。如果要更改选项,首先必须卸载 NFS 文件系统,更改选项,然后重新挂载文件系统。
如果您选择使用异步 NFS 模式,则需要更多内存来利用异步,因为 NFS 服务器将首先将 I/O 请求存储在内存中,响应 NFS 客户端,然后通过以下方式退出 I/O:让文件系统将其写入稳定存储。因此,您需要尽可能多的内存才能获得最佳性能。
两种操作模式之间的选择取决于您。如果您在某处有数据副本,则也许可以异步运行以获得更好的性能。如果您没有副本或者无法轻松或快速地复制数据,那么同步模式可能是更好的选择。除了你之外,没有人可以做出这个决定。