标签: ext4

设置/更改文件的ctime或"更改时间"属性

我希望使用java.nio.Files该类更改Java中文件的时间戳元数据.

我想更改所有3个Linux/ext4时间戳(最后修改,访问和更改).

我可以更改前两个时间戳字段,如下所示:

Files.setLastModifiedTime(pathToMyFile, myCustomTime);
Files.setAttribute(pathToMyFile, "basic:lastAccessTime", myCustomTime);
Run Code Online (Sandbox Code Playgroud)

但是,我无法修改文件上的最后一次更改:时间.此外,文档中提到的没有更改时间戳也是令人担忧的.最接近的可用属性是creationTime,我试过没有任何成功.

有关如何Change:根据Java中的自定义时间戳修改文件元数据的任何想法?

谢谢!

java linux filemtime ext4 java.nio.file

7
推荐指数
1
解决办法
9300
查看次数

访问EXT3/EXT4期刊

ext3和ext4文件系统具有日志功能.有没有机会获得有关文件的详细信息和事件?

某种API允许User Space程序访问文件的日记条目.甚至是Journal事件(比如文件x被删除)

这似乎是某种文档,但我不确定它是否是正确的东西.

linux filesystems ext3 journaling ext4

6
推荐指数
1
解决办法
1373
查看次数

使用 fdisk 更改分区会显示类似“partition#x contains ext4-signature”的警告

我正在缩小分区大小

#Reduce Partition Size
fsck -f /dev/sdb2
resize2fs /dev/sdb2 -M -p

#Limit Partion
fdisk /dev/sdb
... #Now I'm changing the Partition 2 to the new (smaller) size
Run Code Online (Sandbox Code Playgroud)

fdisk 给了我一个(红色)警告,比如partition#2 contains ext4-signature( Partition #2 enthält eine ext4-Signatur)

有什么不对?为什么 fdisk 向我显示警告?

filesystems partitioning ext4 partition

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

Ext4 FS:最大文件大小

如果我没记错的话,与三重间接寻址相比,ext3 的最大文件大小将为(4G+4M+4K)。

同样,如果我们假设 4KB 磁盘块大小,则使用扩展的 ext4 FS 的最大文件大小是多少?

ext4

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

UnionFS:如何将overlay/upperdir 中的更改保存到base/lowerdir 文件系统中?

假设有以下场景,在linux系统上:

  • 以只读方式安装的 ext4 数据分区:data_ro
  • 覆盖分区:data_overlay
  • 他们两个使用 UnionFS 联合安装:mount -t overlayfs -o lowerdir=data_ro,upperdir=data_overlay overlayfs data

在某个时间点,需要将更改持久化data_overlaydata_ro显然data_ro在这种情况下将重新安装 R/W,然后重新安装回 R/O)。


如何将overlay/upperdir 中的更改保存到base/lowerdir 文件系统中?

它是否足够应对/从覆盖层移动到基础 FS,如以下命令序列所示?

umount data
mount -o remount,rw data_ro
mv -rf data_overlay data_ro
mount -o remount,ro data_ro
mount -t overlayfs -o lowerdir=data_ro,upperdir=data_overlay overlayfs data
Run Code Online (Sandbox Code Playgroud)

linux ext4 unionfs

5
推荐指数
0
解决办法
1390
查看次数

Linux下如何通过inode访问文件

是否有任何用户空间 API 或第三方内核模块可以帮助在 Linux 上通过 inode 访问文件?

我正在尝试实现类似的东西:

int read_file_by_ino(int ino, int pos, int size, char* buf);
int write_file_by_ino(int ino, int pos, int size, const char* buf);
int readdir_by_ino(...);
int stat_by_ino(...);
...
Run Code Online (Sandbox Code Playgroud)

该程序预计在 root 用户下运行,因此没有进行权限检查的安全要求。

c linux filesystems kernel ext4

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

在 Yocto ext4 映像中设置 Linux 功能

我打算使用“setcap”对 Yocto 映像中包含的二进制文件设置一些功能。由于某种原因,这里提到的解决方案对我不起作用: Linux features with yocto 。我已经通过在 rootfs 创建目录中的二进制文件上运行“getcap”来检查这一点:

getcap ${IMAGE_ROOTFS}/usr/bin/mybinary
Run Code Online (Sandbox Code Playgroud)

不返回任何内容。我也没有在最终运行的 SD 卡映像中找到这些功能。

接下来我尝试使用 IMAGE_PREPROCESS_COMMAND 的方法。我将 setcap 命令封装在小型 shell 函数中,例如:

my_setcap_function() {
    sudo setcap cap_ipc_owner+ep ${IMAGE_ROOTFS}/usr/bin/mybinary
}
Run Code Online (Sandbox Code Playgroud)

并将函数名称附加到 IMAGE_PREPROCESS_COMMAND。这有效到现在在 {IMAGE_ROOTFS} 目录中的二进制文件上运行 getcap 确实显示了正确的上限设置。但是我仍然没有获得最终运行的 SD 卡映像中的功能。

此外,如果我使用 -o 循环将 rootfs ext4(用于创建最终的 sdcard 映像)安装在目录上,我看不到二进制文件的功能。在我看来,当使用 mkfs.ext4 创建 ext4 时,这些功能会以某种方式丢失。

我必须将 sudo 附加到 setcap,否则它会抱怨“无法设置 CAP_SETFCAP 有效功能:不允许操作”。虽然我的理解是 IMAGE_PREPROCESS_COMMAND 命令是使用 fakeroot 运行的,所以不需要这个 sudo 。

所以,总结一下我的问题:

  1. 如何获取使用 ext4 rootfs 映像制作的 sdcard 映像的功能?
  2. 我想使用一种不需要使用“sudo”的方式。

我正在使用 Yocto Krogoth,目前无法升级。

linux embedded-linux ext4 yocto linux-capabilities

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

有效地将块插入文件中间

我本质上正在寻找相当于 ext4 的mremap().

我有一个大的mmap()文件,我在其中分配数组,并且数组需要增长。因此,我想让第一个数组在当前位置变大,并移动文件和地址空间中的所有其他数组以腾出空间。

如果这只是匿名内存,mremap()只要我插入整数个内存页面,我就可以在恒定时间内移动整个页面。但这是一个磁盘支持的文件,因此数据需要在文件和内存中移动。

我实际上不想在物理磁盘上读取然后重写整个数据块。我希望数据保留在磁盘上的物理扇区中,并引导文件系统调整文件元数据以在需要额外空间的地方插入新扇区。如果我必须将插入保持为与文件系统相关的磁盘扇区大小的某个倍数,那很好。如果我最终不得不复制 O(N) 扇区或范围引用来为插入的范围腾出空间,那也没关系。我只是不想为了在 4 GB 文件中间插入一个块而将 2 GB 数据移入和移回磁盘。

如何通过操作文件元数据来完成高效插入?Linux 中是否确实公开了用于此目的的通用 API?或者如果文件系统碰巧是 ext4 就可以工作?write()在适当的情况下,在内存映射文件中给定源地址的调用是否会减少到我想要的那种有效移位?

是否有一个 C 或 C++ API 函数,其语义是“从这里复制字节到那里,并将源代码保留为未定义的值”,我应该调用该函数,以防将来将此优化添加到标准库和内核中?

我考虑过总是在文件末尾分配新页面,并将它们映射到内存中的正确位置。但是当我重新加载文件时,我需要找到某种方法来重建这一系列映射。此外,缩小数据结构将是一个不小的问题。那时,我将编写一个数据库页面管理器。

linux filesystems mmap memory-mapped-files ext4

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

ext4 是文件存储还是块存储?

我一直在研究文件、块和对象存储之间的区别。我试图将本机 Linux 文件系统与这些类型的存储数据之一联系起来,但是,我想到的一些疑问证明我在这里有某种误解:

直观上,ext4 看起来像文件存储类型,因为它被定义为“文件系统”。此外,根(“/”)架构组织在文件夹和文件中,与文件存储定义相同。

另一方面,ext4使用inode将文件分成块以获得更好的存储性能。这是块存储功能。此外,根据此 IBM 视频,块存储是唯一能够启动操作系统的存储类型:https://www.youtube.com/watch?v =PmxWTTpXNLI(分钟 7:52)。

这是否意味着 Linux 内核需要块存储来启动,但随后它会将自身安装为文件存储?

linux filesystems file-storage ext4 block-storage

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

防止在 .NET 上构建路径中的反斜杠以进行跨平台部署

我有一个旧版 .NET 应用程序,已移植到 .NET 6.0 并正在执行跨平台(Windows 和 Linux)。

许多遗留代码是通过硬编码路径创建来开发的,在字符串中使用反斜杠,例如

new StreamWriter(FeuxBarreFolderName + @"\\JazzSchmazz.txt");
Run Code Online (Sandbox Code Playgroud)

我已经转换成类似的东西

new StreamWriter(Path.Combine(FeuxBarreFolderName, "JazzSchmazz.txt"));
Run Code Online (Sandbox Code Playgroud)

我想防止任何开发人员意外或故意在硬编码路径中再次添加 \ 。除了在代码审查时处理此问题之外,是否有一种方法可以通过代码分析或测试时的严重失败自动执行此操作?我的搜索没有帮助。

我曾经有过的想法

  • 修改我的 Docker 集成测试中的 ext4 文件系统,以防止文件名带有 \. 我不知道这是否可能/合理。
  • 在我的 Docker 集成测试中发挥创意,防止在根目录中创建文件(从父目录中删除w),但允许在子目录中创建文件(再次将w添加到特定子目录)。这感觉超级脆。
  • 查找或编写一个分析器来查看字符串并抱怨任何包含 \ 字符的字符串。

这里有更好的方法吗?

.net c# linux ext4

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