标签: ext4

文件名的长度如何影响磁盘上剩余的存储空间?

文件名的长度如何影响磁盘上剩余的存储空间?

我意识到这是依赖于文件系统的.特别是我在考虑EXT系列文件系统.我不完全了解inode如何影响磁盘空间以及文件名本身的存储方式.很难获得这个问题的相关搜索结果.这就是我在这里问的原因.在linux上,最大文件名长度通常为255或256个字符.创建文件系统时,每个文件名的"保留"空间量是多少?换句话说,磁盘存储是否不受实际文件名的影响,因为已经使用了最大值?还是比这更复杂?

假设我有一个名为"joe.txt"的文件并将其重命名为"joe2.txt".此后可用磁盘空间量是否减少了?那些更长的名字如"joe_version.txt"或"joe_original_version_with_bug_that_Jim_solved.txt"呢?我担心8,16,32,64等字符的阈值.我将存储数百万张图片.我之前从未担心过这样的问题,所以我不能完全确定它是如何工作的.

虽然EXT是我正在使用的唯一文件系统,但讨论FAT和其他可能对其他有类似问题的人有用.

filesystems filenames diskspace ext3 ext4

5
推荐指数
1
解决办法
1712
查看次数

具有大量表格的postgresql的性能(EG:100万个表)?

在pgsql在文件系统上每个表存储1个文件并在pg_catalog中搜索每个查询以进行查询计划时,单个pgsql数据库中的最大表数是多少,同时仍然保持良好的性能?

EG:pgsql可以处理单个数据库中的100万个表吗?假设使用的文件系统是ext4,并且每个表包含的数据非常少,因此超量磁盘存储大小不是问题.问题实际上来自(1)文​​件系统上有100万个文件的影响,以及(2)pg_catalog中有100万个条目的影响.

从这个线程(2005年),http://postgresql.1045698.n5.nabble.com/GENERAL-Maximum-number-of-tables-per-database-and-slowness-td1853836.html - 它在下面说(但我不要这些天仍然适用多少):

Benjamin Arai写道:

每个数据库当前的最大表数是多少?此外,是否有更多的表以任何方式降低性能?

对于大多数情况,答案是否定的.然而,一旦你接近6个数字表计数,pg_catalog最终会非常庞大​​.问题是查询计划程序必须为每个查询检查pg_catalog以查看可用的索引,统计信息和值分布是什么等,以便构建最佳计划.在某些时候,一个非常大的pg_catalog会开始让你的系统陷入困境.

...

William Yu <[hidden email]>写道:

Benjamin Arai写道:

每个数据库当前的最大表数是多少?此外,是否有更多的表以任何方式降低性能?

对于大多数情况,答案是否定的.然而,一旦你接近6个数字表计数,pg_catalog最终会非常庞大​​.

您还必须考虑在数据库目录中包含数万个文件的性能影响.虽然一些较新的文件系统并没有特别担心,但是当目录中有超过几千个条目时,很多人都会陷入查找困境.

filesystems postgresql max ext4

5
推荐指数
1
解决办法
3138
查看次数

如何在不格式化的情况下缩小ext4分区?

最近我安装了Ubuntu 13.04并为其分配了20 GB.系统安装空间小于10 GB.现在,我可以将其缩小到10 GB而不进行格式化吗?这就是说,我不希望在分区中有大的空白空间.

linux filesystems ext4

5
推荐指数
1
解决办法
2万
查看次数

修补并编译Ext4作为内核模块

我目前正在为学术目的修补Ext4(只有linux/fs/ext4/*,如file.c,ioctl.c,ext4.h).我正在研究QEMU虚拟机,为了加快整个过程,我选择Ext4作为内核模块进行编译.在测试新的更改时会出现问题,因为即使我运行make modules ARCH=x86 && make modules_install ARCH=x86并重新启动计算机(/是Ext4),除非我重新编译整个内核,否则它们不可见.这有点奇怪,因为我有各种迹象表明Ext4已被编译为模块:

  1. 它被配置为:

    $ grep EXT4 .config
    CONFIG_EXT4_FS=m
    
    Run Code Online (Sandbox Code Playgroud)
  2. 它确实编译为一个模块:

    $ make modules ARCH=x86
    (...)
    CC [M]  fs/ext4/ioctl.o
    LD [M]  fs/ext4/ext4.o
    Building modules, stage 2.
    MODPOST 3 modules
    LD [M]  fs/ext4/ext4.ko
    
    Run Code Online (Sandbox Code Playgroud)
  3. $ make modules_install ARCH=x86在/lib/modules/3.13.3/kernel/fs/文件有适当的时间戳.

  4. 最后:

    $ lsmod
    Module                  Size  Used by
    ext4                  340817  1
    (...)
    
    Run Code Online (Sandbox Code Playgroud)

出于某种原因,我必须这样做$ make all ARCH=x86才能看到我的更改出现在运行时中.我错过了什么?谢谢!

linux qemu kernel-module linux-kernel ext4

5
推荐指数
1
解决办法
1321
查看次数

fsync(fd)是否适用于外部程序创建的文件?

我有一个禁用写入缓存的SATA硬盘:

hdparm -W0 /dev/foo
Run Code Online (Sandbox Code Playgroud)

我正在ext4使用这些挂载选项(以及其他)的分区上运行:

data=ordered
auto_da_alloc
Run Code Online (Sandbox Code Playgroud)

Linux内核版本是2.6.32-5-686.

现在,我有一个我无法修改的外部程序,但我知道以下列方式创建一个文件:

int fd = open(path);
write(fd, data, data_size);
close(fd);
Run Code Online (Sandbox Code Playgroud)

即它在关闭之前不会fsync.所以在这一点上,数据可能在RAM中,在kernel/fs缓存中的某个地方.

注意:元数据还不是一个问题:我确保数据已经到达磁盘盘片之后,最终的元数据将被写入并保存.数据本身就是问题所在.

所以问题是,我如何帮助数据到达实际的磁盘盘片?

我之后想过运行这个单独的程序:

int fd = open(path);
fsync(fd);
close(fd);
Run Code Online (Sandbox Code Playgroud)

这有助于刷新数据,还是应该使用不同的方法?

linux fsync sata ext4

5
推荐指数
1
解决办法
246
查看次数

PHP `require_once` 包含错误的文件

我在这样的 Linux Ubuntu 14.04-LTS 机器上有一个开发树,具有三个相同的分支:

main -+-- leonardo --- project --- htdocs -+- panel --- index.php
      |                                    |
      |                                    +- config.php
      |
      +-- federico --- project --- htdocs -+- panel --- index.php
      |                                    |
      |                                    +- config.php
      |
      +-- carlo ------ project --- htdocs -+- panel --- index.php
      |                                    |
      |                                    +- config.php
    ..... (you get my drift).
Run Code Online (Sandbox Code Playgroud)

没有软链接,也没有硬链接。该config.php文件在 svn-ignore 中,并且在所有分支之间都不同

有一个 Apache 服务器,每个开发人员都有一个 virtualHost,所以我可以在http://leonardo.project.local或 Federico 的http://federico.project.local 上看到我的开发版本。

在调查当前的怪异时,这两个文件是:

<?php // this …
Run Code Online (Sandbox Code Playgroud)

php linux ext4

5
推荐指数
1
解决办法
671
查看次数

在 ext4 上覆盖小文件是原子的吗?

假设我们有一个FILE_SIZE字节文件,并且:

  • FILE_SIZE <= min(page_size, physical_block_size);
  • 文件大小永远不会改变(即永远不会执行truncate()或追加write());
  • 文件只能通过使用以下方法完全覆盖其内容来修改:

    pwrite(fd, buf, FILE_SIZE, 0);
    

是否保证ext4

  1. 这种写入对于并发读取来说是原子的吗?
  2. 对于系统崩溃,此类写入是事务性的吗?

    (即,崩溃后文件的内容完全来自先前的写入,我们永远不会看到部分写入或空文件)

第二个是真的吗:

  • data=ordered
  • data=journal或者用单个文件日志启用?

    (使用ioctl(fd, EXT4_IOC_SETFLAGS, EXT4_JOURNAL_DATA_FL)

  • 什么时候physical_block_size < FILE_SIZE <= page_size


我发现了相关问题,该问题链接了 2011 年的讨论。但是:

  • 我没有找到我的问题的明确答案2
  • 我想知道,如果上述情况属实,是否在某处有记录

linux filesystems linux-kernel ext4

5
推荐指数
1
解决办法
1398
查看次数

为什么这些时间戳与Perl Time :: HiRes无关?

我看到Perl Time::HiRes模块报告的时间戳有些奇怪的行为.

我有一个获得三个时间戳的脚本:

  1. 获取时间戳 Time::HiRes::time
  2. 创建一个新文件,并获取其修改时间 Time::HiRes::stat
  3. 获取时间戳 Time::HiRes::time

我希望订购时间戳1 < 2 < 3,但情况并非总是如此; 通常(但不总是),stat在2.中报告的时间是 1 之前的时间戳之前.

我在Ext4文件系统上.这是一个实验:

use Time::HiRes qw/ time stat /;

while( 1 ){
    # t0
    my $t0 = time;

    # Create a file
    my $f = '/tmp/dummy.test';
    open(my $fh, '>', $f) || die;
    print $fh "hi\n";
    close($fh) || die;

    # FS: file modification time, according to the filestystem
    my $fs = (stat($f))[9];

    # t1
    my $t1 = …
Run Code Online (Sandbox Code Playgroud)

unix perl timestamp ext4

5
推荐指数
1
解决办法
157
查看次数

如何在 Linux 中使用 C 原子和异步地编写文件

如何在不需要我的程序等待慢速物理媒体(例如 with fsync)的情况下自动更新文件?

我希望操作系统可以在 RAM 中“缓冲”典型fsyncrename操作,然后方便时以正确的顺序将它们写入磁盘。


背景

我正在开发在带有ext4文件系统的自定义嵌入式 Linux 环境中运行的软件。该程序定期更新磁盘上的文件。我需要在不牺牲应用程序性能的情况下保持该文件的完整性。

根据我的阅读安全更新文件的公认做法如下:

  1. 创建一个新的临时文件
  2. 将数据写入临时文件
  3. fsync() 临时文件
  4. 将临时文件重命名为适当的名称
  5. fsync() 包含目录

这个过程对我来说很有意义,但在我的特定应用程序中,我想避免对fsync(). 我不在乎数据何时写入磁盘,只要文件始终处于有效状态即可。如果文件已过期,那没关系。


到目前为止我学到了什么

似乎已经有相当多的讨论ext4和正确使用fsync. 如果我理解正确,我可能可以放弃使用fsyncif auto_da_allocis enabled for my filesystem ( link ),但我不相信这是最好的解决方案。

c linux fsync embedded-linux ext4

5
推荐指数
1
解决办法
278
查看次数

python - 从原始 ext4 图像读取文件信息、权限

我正在尝试从原始 .img 中解压 android 11 图像/获取信息以获取 selinux 信息、符号链接等。

我正在使用这个很棒的工具:https : //github.com/cubinator/ext4/blob/master/ext4.py35.py

我的代码如下所示:

#!/usr/bin/env python3

import argparse
import sys
import os
import ext4

parser = argparse.ArgumentParser(description='Read <modes, symlinks, contexts and capabilities> from an ext4 image')
parser.add_argument('ext4_image', help='Path to ext4 image to process')
args = parser.parse_args()
exists = os.path.isfile(args.ext4_image)
if not exists:
    print("Error: input file " f"[{args.ext4_image}]" " was not found")
    sys.exit(1)

file = open(args.ext4_image, "rb")
volume = ext4.Volume(file)

def scan_dir (root_inode, root_path = ""):
    for entry_name, entry_inode_idx, entry_type in root_inode.open_dir(): …
Run Code Online (Sandbox Code Playgroud)

python ext4 python-3.x

5
推荐指数
1
解决办法
427
查看次数