我需要一台EC2机器,在20Gb上存储数百万个小文件.
在创建文件的过程中,我遇到了这个问题No space left on device
.有可用磁盘但没有inode.
问题是我不明白如何创建一台机器(使用CloudFormation)来解决这个问题.这是Linux和AWS缺少的知识问题.
有人可以帮我解决这个问题吗?
我在我的linux OS(CentOS)上做了一些实验,我想跟踪在同一环境下创建的所有工具日志,工具生成相应的日志(.log extn)来跟踪这些更改我写了一个实际监控目录的perl观察器我设置的时间以及创建新文件时它将在输出中显示但由于我将2秒设置为休眠期,因此消耗了大量内存和CPU利用率.
我的问题"有没有更好的方法呢?" 我想过使用inode表来跟踪系统中的所有变化.这可以解决我的问题吗?如果是,那么请告诉我们相同的解决方案吗?
为什么/ cdrom与/sys/devices/platform/power
Ubuntu中的inode -number相同?
以下在我的Ubuntu中具有相同的inode编号
./media/BACKUP_1/MISC
./cdrom
./sys/devices/platform/power
Run Code Online (Sandbox Code Playgroud)
我通过在root运行以下来获取它们
find . -inum 12 2> /dev/null
Run Code Online (Sandbox Code Playgroud)
回复Leffler的回答
我跑
stat cdrom
Run Code Online (Sandbox Code Playgroud)
我明白了
File: `cdrom' -> `media/cdrom'
Size: 11 Blocks: 0 IO Block: 4096 symbolic link
Device: 801h/2049d Inode: 12 Links: 1
Access: (0777/lrwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2009-08-03 04:25:35.000000000 +0300
Modify: 2009-08-03 04:19:05.000000000 +0300
Change: 2009-08-03 04:19:05.000000000 +0300
Run Code Online (Sandbox Code Playgroud)
这些信息告诉你什么?
回复Leffler的编辑
通常,您可以将设备编号分解为主要和次要设备编号,这是设备打印的"ls -l".
这个命令ls -l cdrom
给了我这个
lrwxrwxrwx 1 root root 11 2009-08-03 04:19 cdrom -> …
Run Code Online (Sandbox Code Playgroud) 我的系统管理员建议我在设置对文件和目录的访问控制时要小心.他给了我一个例子,我感到困惑,这里是:一个保护模式为644(八进制)的文件包含在保护模式为730的目录中.所以它意味着:
在这种情况下如何妥协文件?
我正在编写一个实用程序,它在Mac OS X(10.6和更高版本)上遍历目录树,并尝试检测自上次目录与备份位置同步以来发生的更改.
当我最初同步文件和文件夹时,我获取了inode编号并将其存储在该文件或文件夹的数据库记录中:
NSString *oldFilePath = /* ... */;
NSError *error = nil;
NSDictionary *attributes = [[NSFileManager defaultManager] attributesOfItemAtPath:oldFilePath error:&error];
/* set database record for oldFilePath to [attributes fileSystemFileNumber] */
Run Code Online (Sandbox Code Playgroud)
当我遇到新文件或文件夹时,我首先使用inode编号进行数据库查找,以查找原始文件(如果有).
但是,如果文件已从父目录移动到子目录,并且我正在尝试检测父目录的更改,我希望能够使用保存的inode编号来标识新路径,以便我可以区分移动和删除.
我在linode.com上设置了一个服务器.我有48G ssd.我放了很多小文件.系统正在向我显示一条消息,指出没有留下任何费用,但是通过使用df -h命令,我看到我仍然没有使用19GB.然后我用df -i发现没有inode可用了.inode总数为3056000.如何增加此限制?
我知道目录只是unix中的一个文件,其中包含inode编号和文件名.我该如何看待这个?我不能在目录上使用cat或更少,并在vi中打开它只显示文件列表...没有inode编号.
请告诉我In-core inode列表和磁盘inode列表之间的区别,参考Unix文件系统.
另外,请指点我可以获得更多信息的链接.
谢谢,LinuxPenseur
我正在开发用于处理文件的软件,并且无论文件是否已移动,重命名等,我都必须能够找到它。是否可以通过Java搜索其inode来找到某种方式呢?
所以我正在做一些考试复习问题,其中一个说"在UNIX系统V中,一个块的长度是1 KB,每个块可以容纳总共256个块地址.使用inode方案,最大值是多少文件的大小?"
现在具有讽刺意味的是教授提供的解决方案,我理解单,双和三重间接分配背后的数学/逻辑,这是让我搞砸的直接分配.
根据该解决方案,直接分配方案使用10个块,因为2 ^ 10个字节= 1个KB.为什么?这个公式背后的原因是什么?这是UNIX System V inode的发明者梦寐以求的一些任意数字吗?因为对10个指针来说1024个字节是没有意义的,因为1024/10 =每102.4个字节一个地址,所以拥有8个或其他数字会更合乎逻辑.
教授暗示在我们的决赛中很可能会有这样的问题,而且我宁愿不冒险使用我不理解的千篇一律的公式.
我有这个Java代码,它应该读取0.5M文件并在删除一些无用的信息后写(我正在使用安然电子邮件数据集)
public void getInboxFiles(File directory){
File[] usersFolders;
File[] userFolders;
File[] inboxFiles;
usersFolders = directory.listFiles();
for(File temp:usersFolders){
userFolders = temp.listFiles();
for(File temp2:userFolders){
inboxFiles = temp2.listFiles();
for(File tmp3:inboxFiles){
if(tmp3.isDirectory())
continue;
readNPrase(tmp3, new File("/media/ADATA SH12/datasets/parsedEnron/"+temp.getName()+tmp3.getName()+".txt"));
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
函数readNParse是:
public void readNPrase(File in,File out){
BufferedReader br=null;
BufferedWriter bw =null;
try{
br = new BufferedReader(new FileReader(in));
bw= new BufferedWriter(new FileWriter(out));
boolean messageContent = false;
String line = null;
while((line = br.readLine()) != null){
if(line.trim().equals(""))
messageContent = true;
if(messageContent && !isHeader(line) && !line.trim().equals("")){
bw.write(line); …
Run Code Online (Sandbox Code Playgroud) 我想自动化远程过程以了解我的机器是否耗尽了 inode(由于配置错误而经常发生这种情况......)。遗憾的是,它运行在一个轻量级的 linux 上,在 df 命令上没有 -i 选项,因此该选项不可用。我做了一些研究,我遇到了一些方法来找到具有最多 inode 和类似的文件夹,但我不想要那样。
我需要一种方法(在 C 或 bash 中)来知道我的系统总共有多少个 inode 并且当前可用。
#!/usr/bin/python
import os, sys
# Open a file
fd = os.open( "foo.txt", os.O_RDWR|os.O_CREAT )
# Now get the touple
info = os.fstat(fd)
print "File Info :", info
# Now get uid of the file
print "UID of the file :%d" % info.st_uid
# Now get gid of the file
print "GID of the file :%d" % info.st_gid
# Close opened file
os.close( fd)
Run Code Online (Sandbox Code Playgroud)