我在服务器(硬件 Raid 1)中有一个 SCSI 磁盘,32G,ext3 文件系统。df告诉我磁盘已 100% 已满。如果我删除 1G,这将正确显示。
但是,如果我运行 adu -h -x /然后du告诉我只使用了 12G(我使用-x是因为一些 Samba 安装)。
所以我的问题不是关于 du 和 df 命令之间的细微差别,而是关于我如何找出造成这种巨大差异的原因?
我为 fsck 重新启动了机器,但没有错误。我应该跑badblocks吗?lsof向我显示没有打开的已删除文件,lost+found是空的,并且消息文件中没有明显的警告/错误/失败语句。
请随时询问有关设置的更多详细信息。
背景:物理服务器,大约两年,7200-RPM SATA 驱动器连接到 3Ware RAID 卡,ext3 FS 挂载 noatime 和 data=ordered,不在疯狂负载下,内核 2.6.18-92.1.22.el5,正常运行时间 545 天. 目录不包含任何子目录,只有数百万个小(~100 字节)文件,还有一些更大的(几 KB)文件。
我们有一台服务器在过去几个月中出现了一些问题,但我们直到前几天才注意到它,因为它开始无法写入目录,因为它包含太多文件。具体来说,它开始在 /var/log/messages 中抛出这个错误:
ext3_dx_add_entry: Directory index full!
Run Code Online (Sandbox Code Playgroud)
有问题的磁盘有大量剩余的 inode:
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda3 60719104 3465660 57253444 6% /
Run Code Online (Sandbox Code Playgroud)
所以我猜这意味着我们达到了目录文件本身可以有多少条目的限制。不知道会有多少文件,但正如您所见,不能超过三百万左右。不是那么好,请注意!但这是我的问题之一:上限到底是多少?是可调的吗?在我被骂之前——我想把它调低;这个庞大的目录导致了各种各样的问题。
无论如何,我们在生成所有这些文件的代码中找到了问题,我们已经更正了它。现在我坚持删除目录。
这里有几个选项:
rm -rf (dir)
我先试过这个。在它运行了一天半没有任何明显影响后,我放弃并杀死了它。
while [ true ]; do ls -Uf | head -n 10000 | xargs rm -f 2>/dev/null; …我在一个非常大的(1TB+)ext3 磁盘上运行 e2fsk
e2fsck -v /dev/sda1
Run Code Online (Sandbox Code Playgroud)
来自使用 PXE 启动的 RIPLinux。
我得到
e2fsck 1.41.6 (30-May-2009)
/dev/sda1 contains a file system with errors, check forced.
Pass 1: Checking inodes, blocks, and sizes
Run Code Online (Sandbox Code Playgroud)
然后是很长的停顿……
我如何了解活动?
理想情况下,完成项目的计数与总数和某种 ETA。
我使用默认选项安装了 ext3 文件系统。在它上面我有一些 ~ 100GB 的文件。
删除任何此类文件需要很长时间(8 分钟)并会导致大量 io 流量,从而增加服务器负载。
有什么方法可以使 rm 不那么具有破坏性?
好的,不是那么大,但我需要使用一些东西,其中大约 60,000 个平均大小为 30kb 的文件存储在单个目录中(这是一个要求,因此不能简单地分成具有较少文件数量的子目录)。
这些文件将被随机访问,但一旦创建,将不会写入同一文件系统。我目前正在使用 Ext3,但发现它很慢。有什么建议?
我运行一个网站,其中大约 1000 万个文件(书籍封面)存储在 3 个级别的子目录中,范围为 [0-f]:
0/0/0/
0/0/1/
...
f/f/f/
Run Code Online (Sandbox Code Playgroud)
这导致每个目录大约有 2400 个文件,这在我们需要检索一个文件时非常快。这也是许多问题建议的做法。
但是,当我需要备份这些文件时,仅浏览包含 10m 文件的 4k 目录就需要很多天。
所以我想知道我是否可以将这些文件存储在一个容器(或 4k 容器)中,每个文件系统都完全像一个文件系统(某种安装的 ext3/4 容器?)。我想这几乎与直接访问文件系统中的文件一样有效,并且这将具有非常有效地复制到另一台服务器的巨大优势。
关于如何做到最好的任何建议?或者任何可行的替代方案(noSQL,...)?
我是一个长期用户,也是第一次提交问题。我花了一整天时间在这个网站和许多其他网站上搜索解决方案,但我必须求助于请求帮助来解决我的情况。
历史:我们的 HP Proliant、Centos 5.9 服务器昨天在没有正确关机程序的情况下关机。从那时起,/home 分区一直处于我们无法 fsck、挂载或卸载它的状态。umount 表示它没有挂载,而 mount/fsck 表示它正忙或已经挂载。这最初导致服务器无法启动。我们最终从 /etc/fstab 中删除了磁盘/分区,以便启动不会失败。
# mount -t ext3 /dev/cciss/c0d0p1 /home
mount: /dev/cciss/c0d0p1 already mounted or /home busy
# fsck /dev/cciss/c0d0p1
fsck 1.39 (29-May-2006)
e2fsck 1.39 (29-May-2006)
fsck.ext3: Device or resource busy while trying to open /dev/cciss/c0d0p1
Filesystem mounted or opened exclusively by another program?
Run Code Online (Sandbox Code Playgroud)
如您所见,磁盘没有以任何方式挂载。
df输出:
# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/cciss/c0d1p3 198381228 24920704 163220696 14% /
/dev/cciss/c0d1p2 267818128 191652 253802544 1% /logs
/dev/cciss/c0d1p1 194442 33575 150828 …Run Code Online (Sandbox Code Playgroud) 我有一个写入 ext3 目录的应用程序,随着时间的推移,该目录已增长到大约 300 万个文件。不用说,读取这个目录的文件列表是慢得无法忍受的。
我不怪 ext3。正确的解决方案是让应用程序代码写入子目录,例如./a/b/c/abc.ext而不是仅使用./abc.ext.
我正在更改这样的子目录结构,我的问题很简单:我应该期望在一个 ext3 目录中存储大约多少文件,同时仍能获得可接受的性能?你有什么经验?
或者换句话说;假设我需要在结构中存储 300 万个文件,该结构应该有多少层深./a/b/c/abc.ext?
显然,这是一个无法准确回答的问题,但我正在寻找一个球场估计。
我在大学里买了一台新电脑,当我注意到这台机器的前一个用户ext3只使用了一个巨大的 1TB分区时,我几乎为自己设置了一切。
我通常保持/home在一个单独的分区上,我也更喜欢使用 LVM,所以我决定使用缩小分区resize2fs,然后在我释放的空间中创建我常用的 LVM 内容。(整个硬盘只有30G左右的数据,应该问题不大)。
我使用 live CD 重新启动并要求resize2fs将分区缩小到更合理的大小(50G),它似乎在前一刻钟左右的时间内非常密集地移动数据(从硬盘的噪音判断) .
现在它已经运行了三个多小时,尽管 CPU 使用率为100%,但 HD 几乎听不到任何噪音。
resize2fs出于某种原因在后台进行了一些密集的数字运算,这就是为什么我听不到 HD 发出的噪音?ext3 ×10
linux ×8
filesystems ×4
fsck ×2
rm ×2
centos ×1
directory ×1
ext4 ×1
hard-drive ×1
kernel ×1
linux-kernel ×1
mount ×1
performance ×1
scsi ×1
storage ×1
unix ×1
unlink ×1