有人告诉我,如果您购买更大容量的 SSD,您可以获得更长的 SSD 使用寿命。理由是,较新的 SSD 具有磨损均衡,因此无论您是否将此写入分散到(逻辑)磁盘上,都应维持相同的写入量。如果您获得的 SSD 是您所需尺寸的两倍,那么您进行磨损均衡的能力就会增加一倍。
这有什么道理吗?
我有 7 个系统运行以下设置。有时一个不同的磁盘会脱机,但仔细检查磁盘是好的,没有故障,并且至少可以正常工作一年。由于这发生在所有 7 个系统上,我发现不太可能只有一个部件在起作用(例如电缆),而是一些稍微不兼容的部件的组合。
问题是找到不兼容的确切点。
(如果您有一个解决方法,您可以从命令行虚拟重新安装硬盘,那么您可以回答https://serverfault.com/questions/523315/re-activate-device -那被认为是死的)。
服务器硬件:Dell 1950、Dell R815、Dell R715。
操作系统:
$ uname -a
Linux franklin 3.2.0-4-amd64 #1 SMP Debian 3.2.41-2+deb7u2 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)
控制器:
$ lspci |grep 22:
22:00.0 Serial Attached SCSI controller: LSI Logic / Symbios Logic SAS2008 PCI-Express Fusion-MPT SAS-2 [Falcon] (rev 03)
$ sas2flash -listall
LSI Corporation SAS2 Flash Utility
Version 15.00.00.00 (2012.11.06)
Copyright (c) 2008-2012 LSI Corporation. All rights reserved
Adapter Selected is a LSI SAS: SAS2008(B2)
Num Ctlr FW Ver NVDATA …
Run Code Online (Sandbox Code Playgroud) 我想要:
据我所知,我应该能够在/etc/security/limits.conf
(或/etc/security/limits.d/*
)中做到这一点:
* soft rss 64000000
* hard nofile 50000
* soft nofile 1024
Run Code Online (Sandbox Code Playgroud)
但是,我找不到一种无需重新启动即可重新加载这些值的方法。我已经读到登录时会重新加载这些值;当我这样做时它有效,su - user
但它不起作用ssh user@localhost
。
我在 /etc/pam.d 中有 pam_limits.so:
/etc/pam.d/login:session required pam_limits.so
/etc/pam.d/sshd:session required pam_limits.so
/etc/pam.d/su:session required pam_limits.so
Run Code Online (Sandbox Code Playgroud)
我在 sshd_config 中有 PAM:
/etc/ssh/sshd_config:UsePAM yes
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用ulimit
and设置值sysctl
,但我想测试它/etc/security/limits.conf
是否在做正确的事情而无需重新启动。
当人们使用 ssh 登录而不重新启动时,如何确保设置了这些值?
在批处理脚本中,我经常通过 ssh 多次登录同一系统。例如
seq 1000 | parallel -j0 -S server echo
Run Code Online (Sandbox Code Playgroud)
这会触发竞争条件,给出错误:
/usr/bin/xauth: error in locking authority file /home/user/.Xauthority
Run Code Online (Sandbox Code Playgroud)
我怎样才能避免这种情况?
我的软件 RAID 可以持续写入 800 MB/s。我看到当cat /proc/meminfo |grep Writeback:
返回 > 2 GB时会发生这种情况。但是,大多数情况下,回写大约为 0.5 GB,这提供了大约 200 MB/s 的性能。
有大量数据要写入。cat /proc/meminfo |grep Dirty:
说脏缓存是 90 GB。
据我了解,Dirty 是需要写入的内容,而 Writeback 是主动写入磁盘的内容。因此,Dirty 中的块可能位于磁盘上与 Writeback 中的块相邻的磁盘上,并且这些块不会在同一个 go 中写入。
这可以解释为什么如果 Writeback 很小,我的性能会差很多,因为寻找的时间比写几个额外 MB 的时间要长得多。
所以我的问题是:我能否以某种方式告诉内核更积极地将更多数据从 Dirty 移动到 Writeback,从而增加 Writeback?
- 编辑 -
这是在低性能期间:
$ cat /proc/meminfo
MemTotal: 264656352 kB
MemFree: 897080 kB
Buffers: 72 kB
Cached: 233751012 kB
SwapCached: 0 kB
Active: 3825364 kB
Inactive: 230327200 kB
Active(anon): 358120 kB
Inactive(anon): 47536 kB
Active(file): …
Run Code Online (Sandbox Code Playgroud) 我很恼火,因为我想通过 iDRAC6 使用虚拟控制台,所以我不得不启动网络浏览器。
我设法下载viewer.jnlp
,我可以通过以下方式启动查看器:
javaws viewer.jnlp
Run Code Online (Sandbox Code Playgroud)
但似乎viewer.jnlp
每次运行都会发生变化。具体来说:
<argument>user=1234567890</argument>
<argument>passwd=123456789</argument>
Run Code Online (Sandbox Code Playgroud)
我的猜测是 iDRAC6 为每次运行生成一个随机用户/密码,并且只能使用一次。
如果我可以简单地做,我会更喜欢:
drac-virtual-console-viewer username password drac.ip.nr
Run Code Online (Sandbox Code Playgroud)
有工具吗?
或者有没有办法下载viewer.jnlp
给定的用户名/密码?
其他版本的 iDRAC 似乎支持 VNC,但我无法让它在 iDRAC6 上运行。但如果我能让它工作,它也会解决我的问题。
系统:Dell R815 iDRAC6
我试图找到重建软件raid6 的瓶颈。
## Pause rebuilding when measuring raw I/O performance
# echo 1 > /proc/sys/dev/raid/speed_limit_min
# echo 1 > /proc/sys/dev/raid/speed_limit_max
## Drop caches so that does not interfere with measuring
# sync ; echo 3 | tee /proc/sys/vm/drop_caches >/dev/null
# time parallel -j0 "dd if=/dev/{} bs=256k count=4000 | cat >/dev/null" ::: sdbd sdbc sdbf sdbm sdbl sdbk sdbe sdbj sdbh sdbg
4000+0 records in
4000+0 records out
1048576000 bytes (1.0 GB) copied, 7.30336 s, 144 MB/s
[... similar for each …
Run Code Online (Sandbox Code Playgroud) 我被 xfs' No space left on device击中。根据常见问题解答:
http://xfs.org/index.php/XFS_FAQ#Q:_Why_do_I_receive_No_space_left_on_device_after_xfs_growfs.3F
解决此问题的唯一方法是移动数据以释放 1TB 以下的空间。找到最旧的数据(即在第一次增长之前就已经存在)并将其移出文件系统(移动,而不是复制)。然后,如果您将其重新复制,数据块最终将超过 1TB,这应该为低于 1TB 的 inode 留出足够的空间。
但是我如何识别要移动的数据呢?我不能按年龄计算,因为前 10 TB 是在同一天使用rsync
.
我试过了:
xfs_db -r -c "blockget -i 1 -n -v" /dev/md3
Run Code Online (Sandbox Code Playgroud)
但我似乎只得到文件的基本名称,而不是文件的完整路径。而且由于我的很多文件都被称为相同的(但在不同的目录中),所以这不是很有用。它似乎也给了我更多信息,只是 inode 1。
我有一种感觉,我可以使用xfs_db
它来告诉我前 1 TB 中哪些文件正在使用块,但我一直无法看到如何使用。
(通过使用挂载选项inode64
,文件系统不会在设备上留下 No space left,但是如果您稍后忘记使用 mount 选项,inode64
那么您将再次在设备上获得No space left on device。我想避免使用挂载选项,inode64
因为文件系统可能会被其他人安装在其他系统上,他们会忘记这一点,从而得到令人惊讶的No space left on device)。
我有一个要扩展的 RAID60。
当前为:2 个轴,每个轴有 9 个磁盘 + 2 个备件。
未来是:4 个轴,每个轴有 10 个磁盘 + 1 个备用。
所以我需要做一些 --grow 来重塑驱动器。
我认为这就足够了:
mdadm -v --grow /dev/md1 --raid-devices=10 --backup-file=/root/back-md1
mdadm -v --grow /dev/md2 --raid-devices=10 --backup-file=/root/back-md2
mdadm -v --grow /dev/md0 --raid-devices=4 --add /dev/md3 /dev/md4
Run Code Online (Sandbox Code Playgroud)
最后一个命令有效,但前 2 个命令失败:
mdadm: Need to backup 7168K of critical section..
mdadm: /dev/md2: Something wrong - reshape aborted
Run Code Online (Sandbox Code Playgroud)
我如何 --grow RAID6 以使用更多设备?
系统信息:
$ mdadm --version
mdadm - v3.2.5 - 18th May 2012
$ uname -r
3.5.0-17-generic
Run Code Online (Sandbox Code Playgroud)
Makefile 重现问题:
all: …
Run Code Online (Sandbox Code Playgroud) 为了进行测试,我需要 zfs 的缓存处于冷状态。
我可以通过删除缓存磁盘、导出和导入池来刷新池中的缓存。这给出了我想要的效果。但真的不想导出池。
有没有更简单的方法来达到同样的效果?
我正在寻找的是相当于:
echo 3 > /proc/sys/vm/drop_caches
Run Code Online (Sandbox Code Playgroud)
这满足了我对 ext4 的需求。
背景
我可以用不同的方式运行我的算法。我不关心最好情况下的性能。我确实关心最坏情况下的性能。最坏的情况是冷数据(很久以前接触过的数据,不再存在于 ARC/L2ARC 中)。
为了选择运行算法的最佳方式,我需要能够在相同的测试集上运行。而且这个测试集必须是冷的。这完全违背了 ZFS 的缓存策略:如果我一次又一次地在同一个测试集上运行,它会将数据放入 ARC 中 - 这在正常情况下是完全有意义的,但在这里不是。
我可以在我的开发计算机上导出/导入,但无法在生产中执行此操作。然而,刷新缓存在生产中是可以接受的。
我更喜欢 ARC 仍然有效,因此冷数据在读取后会被缓存(再次类似于 ext4),但我可以在测试期间完全禁用 ARC。