将ext4文件系统的文件名大小限制扩展为1012个字符

时间:2016-01-24 20:12:29

标签: linux unix filesystems ext4

我从服务器中提取数据,其中一个文件夹名称超过256个字节,因此我的CentOS会抛出名称太长的错误。我在互联网上搜索过但无法找到任何方法在ext2 / ext3 / ext4文件系统下创建大小超过256字节的文件夹/文件名。

但是,One解决方案建议在reiserfs旁边创建ext4文件系统来处理名称较长的files \文件夹。这个解决方案可能会有效,但我在其中一本书中读到,如果需要,可以将文件名大小的限制从255个字符扩展到1012个字符。

The maximal file name size is 255 characters. This limit could be extended to `1012` if needed. 

来源: Google

但我找不到任何解释如何修改文件系统以将大小扩展为1012的网站?

有人可以帮助我吗?

2 个答案:

答案 0 :(得分:3)

不知道在哪里找到1012(在http://e2fsprogs.sourceforge.net/ext2intro.html中提到 - 第二扩展文件系统的设计和实现,ISBN 90-367-0385-9.1995),但在现代Linux内核文件名中固定在struct ext2_dir_entry_2中,最多255个字符(字节):

https://elixir.bootlin.com/linux/v4.10/source/fs/ext2/ext2.h#L600

/*
 * The new version of the directory entry.  Since EXT2 structures are
 * stored in intel byte order, and the name_len field could never be
 * bigger than 255 chars, it's safe to reclaim the extra byte for the
 * file_type field.
 */
struct ext2_dir_entry_2 {
    __le32  inode;          /* Inode number */
    __le16  rec_len;        /* Directory entry length */
    __u8    name_len;       /* Name length */
    __u8    file_type;
    char    name[];         /* File name, up to EXT2_NAME_LEN */
};

struct ext2_dir_entry文件名长度较长,但name_len的额外字节被重新定义为file_type

      __le16    name_len;       /* Name length */

因此,ext2的当前最大文件名长度为255

https://elixir.bootlin.com/linux/v4.10/source/include/linux/ext2_fs.h#L22

#define EXT2_NAME_LEN 255

https://elixir.bootlin.com/linux/v4.10/source/fs/ext2/namei.c#L62

if (dentry->d_name.len > EXT2_NAME_LEN)
    return ERR_PTR(-ENAMETOOLONG);

对于ext3 / ext4:

https://elixir.bootlin.com/linux/v4.10/source/fs/ext4/ext4.h#L1892

/*
 * Structure of a directory entry
 */
#define EXT4_NAME_LEN 255

https://elixir.bootlin.com/linux/v4.10/source/fs/ext4/namei.c

  * `len <= EXT4_NAME_LEN' is guaranteed by caller.
   if (namelen > EXT4_NAME_LEN)
        return NULL;
   if (dentry->d_name.len > EXT4_NAME_LEN)
       return ERR_PTR(-ENAMETOOLONG);

Ondisk格式也用8位file_name描述(file_type在旧文档中仅使用3位 - EXT2_FT_MAX,但现代驱动程序不会处理255个以上的文件名。ext4 has extra FT of 0xde):

http://www.nongnu.org/ext2-doc/ext2.html#IFDIR-NAME-LEN&#34; 4.1.3。 name_len - 8位无符号值,表示名称中包含的字符数据字节数。&#34;

http://cs.smith.edu/~nhowe/262/oldlabs/ext2.html#direntry&#34; file_type字段指示条目引用的文件类型...文件名的最大长度为EXT2_NAME_LEN,通常为255。&#34;

https://oss.oracle.com/projects/ocfs2/dist/documentation/disklayout.pdf#page=16&#34; __ u8 name_len&#34;

答案 1 :(得分:2)

请参阅https://en.wikipedia.org/wiki/Comparison_of_file_systems#Limits,而不是很多文件系统处理的文件名超过255个字节。

虽然它可能不是您问题的直接回复,但我认为您不应该尝试这条路线(更改最大长度)。

从哪台服务器检索文件?为什么不在检索时更改名称? 您确定整个路径名是否相关,如果您提取第一个或最后250个字符是不足以引用每个文件而没有歧义?

根据您的限制,您有很多选择:

  • 要么生成“随机”名称(或顺序名称),只要在文本文件中存储旧名称和新名称之间的映射
  • 或将初始名称拆分为250个字符的路径元素(或类似的东西)并使用它们创建中间目录

您可以在https://serverfault.com/questions/264339/how-to-increase-filename-size-limit-on-ext3-on-ubuntu

找到类似的讨论