我的分区/ tmp已满......并且它同时为空.分区已满.检查目录:
# du -sh /tmp 28K /tmp
什么?它是空的......它真的是空的......只有两个空目录位于/ tmp中
检查分区细节:
# df -h Filesystem Size Used Avail Use% Mounted on /dev/cciss/c0d0p9 1012M 961M 0 100% /tmp
它已经满了!但为什么使用+可用!=尺寸?
检查Inode:
# df -i Filesystem Inodes IUsed IFree IUse% Mounted on /dev/cciss/c0d0p9 131616 17 131599 1% /tmp
那么这里发生了什么?
我有一个包含500,000个文件的目录.我想尽快访问它们.该算法要求我重复打开和关闭它们(不能同时打开500,000个文件).
我怎样才能有效地做到这一点?我原本以为我可以缓存inode并以这种方式打开文件,但是*nix没有提供通过inode打开文件的方法(安全性或其他一些方法).
另一个选择是不要担心它,并希望FS在文件查找目录中做得很好.如果这是最好的选择,哪个FS最好.某些文件名模式是否比其他文件模式更快?例如01234.txt vs foo.txt
顺便说一句,这完全在Linux上.
我知道在Unix(特别是Mac OS X)中,超级块存储有关磁盘上数据布局的信息,包括inode开始和结束的磁盘地址.我想扫描程序中的inode列表以查找已删除的文件.如何找到inode开始的磁盘地址?我查看了statfs命令,但它没有提供此信息.
如何获取目录inode号说/home/laks/file.txt我需要laks目录的inode号.任何内置功能已经可用?我想我可以使用stat()如果我剪切文件名...但任何其他解决方案,而不删除文件名.
您好,我是内核编程的新手.我正在编写一个基于wrapfs模板的小内核模块来实现备份机制.这纯粹是为了学习的基础.
我正在扩展wrapfs,以便在进行write调用时,wrapfs透明地在单独的目录中创建该文件的副本,然后对该文件执行write.但我不希望我为每次写入调用创建一个副本.
一个天真的方法可能是我检查该目录中是否存在文件.但我认为,对于每次通话检查,这可能是一个严重的惩罚.
我还可以检查第一次写入调用,然后使用private_data属性存储该特定文件的值.但那不会存储在磁盘上.所以我需要再次检查一下.
我也在考虑利用修改时间.我可以节省修改时间.如果较旧的修改时间早于该时间,那么只创建一个副本,否则我将不会做任何事情.我尝试使用inode.i_mtime,但即使在调用write之前它也是修改过的时间,应用程序也可以修改那个时间.
所以我想在磁盘上的inode中存储一些值,表明它已经创建了备份.那可能吗?欢迎任何其他建议或方法.
当我使用ln以下方法创建硬链接时:
ln testfile.txt testfile2.txt
Run Code Online (Sandbox Code Playgroud)
文件硬链接(由inode表中的两个别名使用相同的inode编号确认)与ls -li具有原始名称的文件具有相同的硬链接文件初始权限:
1222285 -rw------- 2 cs9****-** cs****** 98 Apr 9 15:00 testfile.txt
1222285 -rw------- 2 cs9****-** cs****** 98 Apr 9 15:00 testfile2.txt
Run Code Online (Sandbox Code Playgroud)
但是,当我创建符号链接时:
ln -s testfile.txt testfile3.txt
Run Code Online (Sandbox Code Playgroud)
并使用上一个ls命令再次确认,它显示它是l权限列表中的软链接.但是,我的符号链接具有所有用户类型(组,用户和其他)的所有权限:
1222285 -rw------- 2 cs9****-** cs****** 98 Apr 9 15:00 testfile2.txt
1222285 -rw------- 2 cs9****-** cs****** 98 Apr 9 15:00 testfile.txt
1222286 lrwxrwxrwx 1 cs9****-** cs****** 12 Apr 9 15:08 testfile3.txt -> testfile.txt
Run Code Online (Sandbox Code Playgroud)
这让我想到了我的问题:
为什么符号链接的初始权限是全权许可的?我知道这是一个不同的文件类型,但为什么它从所有初始权限开始?从UNIX/Linux.SE …
我的应用很简单.客户端将连接到LocalServerSocket(Unix域套接字)并发送一些数据并断开连接.如果此过程重复超过1024次,则服务器java.io.IOException: socket failed: EMFILE (Too many open files)在接受新客户端时抛出.
我已经在http://speedy.sh/NBSjr/SocketIssue.zip上传了我的演示代码
您可以在代码中看到客户端在与服务器建立另一个连接之前关闭了连接.在logcat中,您可以看到服务器中的FileDescriptor计数正在增加,并且在第1023次客户端连接时崩溃.
我该如何解决这个问题?请指教
我在运行Android 4.3的三星S4上尝试过它.它似乎是重用文件描述符,我的演示应用程序可以运行几个小时!
更新于2014-05-19
如果您没有运行Android 4.4.2的设备,您可以在运行Android 4.4.2的仿真器上试用此代码
我正在编写一个程序,它将监视选择文件和目录以进行更改.一些文件是世界可写的,一些是所有者,一些是组.
我需要做的是能够找出最后一个修改(而不仅仅是访问)文件的人.不知怎的,我认为这很简单,因为我们知道文件的inode ..但是我似乎无法找到任何获得此方法的方法.我认为有一种实用的方法可以将任何给定的inode与最后访问它的uid相关联.
我想我已经挤了谷歌所有它会给我这个话题.
任何帮助表示赞赏.我正在用C编写程序.
编辑:
在修改文件的任何程序的PID很久之后,我需要能够做到这一点.
我的网站上出现错误,并且我的网站 inode 计数超载。托管 inode 限制为 200,000,但我的网站 inode 计数为 909,496,我什至无法打开 phpMyAdmin。托管支持要求我删除未使用的文件。如何减少 inode 数量以及在基于 Magento 的网站中未使用哪些文件?
我正在运行 CentOS Linux。
我使用专有文件系统创建如下目录:
$ mkdir fooDir
Run Code Online (Sandbox Code Playgroud)
首先,我使用“ls -ldi”检查 inode 值:
$ ls -ldi
total 4
9223372036854783200 drwxrwxrwx 2 root root 4096 Jan 6 20:58 fooDir
Run Code Online (Sandbox Code Playgroud)
然后,我确认'stat'正在报告相同的inode:
$ stat /fooDir
File: `/fooDir'
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: 14h/20d Inode: 9223372036854783200 Links: 2
Access: (0777/drwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2016-01-06 20:58:13.000000000 +0000
Modify: 2016-01-06 20:58:13.000000000 +0000
Change: 2016-01-06 20:58:23.000000000 +0000
Run Code Online (Sandbox Code Playgroud)
但随后我切换到在 python 的交互式提示中运行并针对目录运行 om.stat:
$ python
Python 2.6.6 (r266:84292, Jun 18 2012, …Run Code Online (Sandbox Code Playgroud) inode ×10
linux ×5
filesystems ×3
android ×1
c ×1
c++ ×1
count ×1
diskspace ×1
file-io ×1
kernel ×1
linux-kernel ×1
magento ×1
permissions ×1
python ×1
stat ×1
superblock ×1
symlink ×1
sysadmin ×1
unix ×1