所以我的一个客户今天收到了一封来自 Linode 的电子邮件,说他们的服务器导致 Linode 的备份服务崩溃。为什么?文件太多。我笑了,然后跑了:
# df -ih
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/xvda 2.5M 2.4M 91K 97% /
Run Code Online (Sandbox Code Playgroud)
废话。240 万个 inode 正在使用中。这到底是怎么回事?!
我已经寻找了明显的嫌疑人(/var/{log,cache}
以及托管所有站点的目录),但我没有发现任何真正可疑的东西。我确信在这个野兽的某个地方有一个包含几百万个文件的目录。
上下文一个我我繁忙的服务器使用200K的inode和我的桌面(旧安装超过二手储存4TB)只是刚刚超过一百万。有一个问题。
所以我的问题是,我如何找到问题所在?有du
用于 inode 吗?
我在升级 Ubuntu 12.04 服务器时遇到以下错误。现在apt-get
无法安装或删除任何软件包。
解压 linux-headers-3.13.0-62(来自 .../linux-headers-3.13.0-62_3.13.0-62.102~precise1_all.deb)... dpkg: 错误处理 /var/cache/apt/archives/linux-headers-3.13.0-62_3.13.0-62.102~precise1_all.deb (--unpack): 无法创建`/usr/src/linux-headers-3.13.0-62/arch/arm/include/asm/ptrace.h.dpkg-new' (在处理`./usr/src/linux-headers-3.13.0-62/arch/arm/include/asm/ptrace.h'):设备上 没有剩余空间没有写入报告,因为错误消息指示磁盘完全错误 dpkg-deb:错误:子进程粘贴被信号杀死(断管) 处理时遇到错误: /var/cache/apt/archives/linux-headers-3.13.0-62_3.13.0-62.102~precise1_all.deb E:子进程/usr/bin/dpkg返回错误码(1)
虽然我并不是真的没有磁盘空间,
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 6.8G 4.7G 1.8G 69% /
Run Code Online (Sandbox Code Playgroud)
无论如何,我的 inode 已满,
# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda1 458752 455214 3538 100% /
Run Code Online (Sandbox Code Playgroud)
我有十多个旧内核,但我无法删除它们,因为我apt-get
自己是跛脚的。所以我无法关注这个报告类似问题的帖子。
唯一的选择似乎是手动删除一些较旧的内核。它会引起任何问题吗?
关于 inode
在 Ubuntu 中,每个文件和目录都是一个所谓的inode
. 您可以使用df -i
来检查正在使用的和可用于所有已安装文件系统的 inode 数量。
题
如果您创建一个新的 EXT4 分区,它将使用默认的 inode 数量,这在正常情况下应该足够了。但是,如果您运行的系统会产生数百万个小文件,您如何需要创建一个具有额外大量 inode 的新 EXT4 分区?最大值是多少?
注释
似乎/usr/src
(显然是旧内核)用完了我所有的 inode:
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda4 489600 489600 0 100% /
devtmpfs 219658 539 219119 1% /dev
none 219844 474 219370 1% /run
none 219844 3 219841 1% /run/lock
none 219844 8 219836 1% /run/shm
/dev/sda6 5963776 8361 5955415 1% /home
Run Code Online (Sandbox Code Playgroud)
我尝试了所有方法来删除/清除等旧内核,但没有成功。dpkg 不再工作了。我尝试了一些手动命令,但 12.04 什么也没给我。由于硬盘空间不足,无法进行apt-get等操作,这显然不是问题。但是我无法安装或删除任何东西!我读了很多关于有同样问题的用户,但他们的解决方案对我不起作用。
请帮忙。非常感谢!
我今天试图更新我的软件包:
$ sudo apt-get upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
You might want to run 'apt-get -f install' to correct these.
The following packages have unmet dependencies:
linux-headers-3.16.0-44-generic : Depends: linux-headers-3.16.0-44 but it is not installed
E: Unmet dependencies. Try using -f.
Run Code Online (Sandbox Code Playgroud)
所以,我继续尝试apt-get -f install
:
$ sudo apt-get -f install
Reading package lists... Done
Building dependency tree
Reading state information... Done
Correcting dependencies... Done
The following extra packages will be installed:
linux-headers-3.16.0-44 …
Run Code Online (Sandbox Code Playgroud) 创建具有 2^32-1 个 inode 的 ext4 文件系统有什么缺点吗?
我有一个 1tb 的驱动器,我想在上面存储 8 亿到 15 亿个小文件。似乎最大值是 40 亿,所以我想知道是否可以在创建 fs 时将其设置为最大值,或者我应该找到其他解决方案。
在我可信赖的系统(vmWare 下的虚拟机、台式机和笔记本电脑)上,我们遇到了以下问题。
根文件系统似乎具有从未标记为“空闲”的 inode。在服务器运行一个月后,df -i
显示 / (an ext4 fs
)上的 inode 使用率为 100% 。
进行预览fsck
显示错误。我们执行touch
/ forcefsck
,然后重新启动系统。这正确的孤立inode,但问题再次出现。
上没有消息/var/log/syslog
。这些系统通过 Trusty 上的最新更新和内核可用是最新的。
# fsck -nf /
fsck from util-linux 2.20.1
e2fsck 1.42.9 (4-Feb-2014)
Warning! /dev/mapper/sys--vg-root is mounted.
Warning: skipping journal recovery because doing a read-only filesystem check.
Pass 1: Checking inodes, blocks, and sizes
Deleted inode 395860 has zero dtime. Fix? no
Inodes that were part of a corrupted orphan linked list found. Fix? …
Run Code Online (Sandbox Code Playgroud) 我想跑
sudo apt-get -f install
Run Code Online (Sandbox Code Playgroud)
输出:
Reading package lists... Done
Building dependency tree
Reading state information... Done
Correcting dependencies... Done
The following packages were automatically installed and are no longer required:
linux-headers-4.4.0-53 linux-headers-4.4.0-53-generic linux-headers-4.4.0-57 linux-headers-4.4.0-57-generic linux-headers-4.4.0-59 linux-headers-4.4.0-59-generic linux-headers-4.4.0-62 linux-headers-4.4.0-62-generic
linux-headers-4.4.0-63 linux-headers-4.4.0-63-generic linux-headers-4.4.0-64 linux-headers-4.4.0-64-generic linux-headers-4.4.0-66 linux-headers-4.4.0-66-generic linux-headers-4.4.0-70 linux-headers-4.4.0-70-generic
linux-headers-4.4.0-71 linux-headers-4.4.0-71-generic linux-headers-4.4.0-72 linux-headers-4.4.0-72-generic linux-headers-4.4.0-75 linux-headers-4.4.0-75-generic linux-headers-4.4.0-78 linux-headers-4.4.0-78-generic
linux-headers-4.4.0-79 linux-headers-4.4.0-79-generic linux-headers-4.4.0-81 linux-headers-4.4.0-81-generic linux-headers-4.4.0-83 linux-headers-4.4.0-83-generic
Use 'sudo apt autoremove' to remove them.
The following additional packages will be installed:
linux-headers-4.4.0-89
The following NEW packages …
Run Code Online (Sandbox Code Playgroud) df -i 显示
Filesystem Inodes IUsed IFree IUse% Mounted on
udev 1745003 593 1744410 1% /dev
tmpfs 1760785 914 1759871 1% /run
/dev/sda1 5283840 5283840 0 100% /
tmpfs 1760785 225 1760560 1% /dev/shm
tmpfs 1760785 7 1760778 1% /run/lock
tmpfs 1760785 17 1760768 1% /sys/fs/cgroup
tmpfs 1760785 38 1760747 1% /run/user/1000
Run Code Online (Sandbox Code Playgroud) inode ×10
ext4 ×3
filesystem ×3
kernel ×3
14.04 ×2
12.04 ×1
16.04 ×1
apt ×1
command-line ×1
disk-usage ×1
dpkg ×1
files ×1
fsck ×1
partitioning ×1
server ×1