AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 790031
Accepted
ArtEze
ArtEze
Asked: 2025-01-23 23:40:13 +0800 CST2025-01-23 23:40:13 +0800 CST 2025-01-23 23:40:13 +0800 CST

mkfs.ext4 para loop: inodes de 128 bytes não podem manipular datas além de 2038 e estão obsoletos

  • 772

Quando eu uso mkfs.ext4, /dev/loop18recebo este aviso:

Inodes de 128 bytes não podem manipular datas além de 2038 e estão obsoletos

Código:

echo y | mkfs.ext4 /dev/loop18

Resultado:

mke2fs 1.47.1 (20-May-2024)
128-byte inodes cannot handle dates beyond 2038 and are deprecated
64-bit filesystem support is not enabled.  The larger fields afforded by this feature enable full-strength checksumming.  Pass -O 64bit to rectify.
Discarding device blocks: done                            
Creating filesystem with 5140 1k blocks and 1288 inodes

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (1024 blocks): done
Writing superblocks and filesystem accounting information: done

/etc/mke2fs.conf

[defaults]
    base_features = sparse_super,large_file,filetype,resize_inode,dir_index,ext_attr
    default_mntopts = acl,user_xattr
    enable_periodic_fsck = 0
    blocksize = 4096
    inode_size = 256
    inode_ratio = 16384

[fs_types]
    ext3 = {
        features = has_journal
    }
    ext4 = {
        features = has_journal,extent,huge_file,flex_bg,metadata_csum,dir_nlink,extra_isize
        inode_size = 256
        auto_64-bit_support = 1
    }
    small = {
        blocksize = 1024
        inode_size = 128
        inode_ratio = 4096
    }
    floppy = {
        blocksize = 1024
        inode_size = 128
        inode_ratio = 8192
    }
    big = {
        inode_ratio = 32768
    }
    huge = {
        inode_ratio = 65536
    }
    news = {
        inode_ratio = 4096
    }
    largefile = {
        inode_ratio = 1048576
        blocksize = -1
    }
    largefile4 = {
        inode_ratio = 4194304
        blocksize = -1
    }
    hurd = {
         blocksize = 4096
         inode_size = 128
    }

Qual é a maneira de usá-lo sem que esse aviso apareça?

mkfs
  • 2 2 respostas
  • 813 Views

2 respostas

  • Voted
  1. Best Answer
    Stephen Kitt
    2025-01-24T00:10:30+08:002025-01-24T00:10:30+08:00

    Desculpas, eu deveria ter prestado mais atenção aos detalhes na mkfssaída. Você está tentando usar um volume de ~5MiB, que é muito pequeno para fazer algo útil com Ext4.

    Pelos comentários, parece que você está criando o volume de apoio como um arquivo qcow2. O dispositivo de loop do kernel não sabe nada sobre esse formato, então ele apenas apresenta o arquivo subjacente como um dispositivo de bloco; em vez do volume de 20 GiB que você esperava, você acaba com um volume de ~5 MiB, e essa é a fonte de todos os seus problemas.

    Para usar um volume qcow2, você precisa exportá-lo usando uma ferramenta qcow2-aware; veja Como montar a imagem qcow2 para detalhes. Uma abordagem mais simples é criar um arquivo sparse usando truncate:

    truncate -s20G volume
    

    losetupe mkfs.ext4fará a coisa certa com isso, sem precisar de nenhum sinalizador extra. (Observe que você pode executar mkfs.ext4diretamente em volume, sem configurar um dispositivo de loop primeiro; você só precisa do dispositivo de loop para realmente montar o sistema de arquivos.)

    Para pessoas interessadas em corrigir os sintomas, continue lendo…

    Para corrigir o aviso “inodes de 128 bytes não podem manipular datas além de 2038 e estão obsoletos”, você precisa especificar um tamanho de inode de pelo menos 256 bytes:

    mkfs.ext4 -I 256 /dev/loop18
    

    Se você quiser habilitar campos de 64 bits, adicione -O 64bit.

    Como alternativa, se seu volume for grande o suficiente para acomodar um diário, force o ext4tipo de uso que inclui inodes de 256 bytes — você provavelmente está se deparando com o comportamento padrão para volumes menores que 512 MiB, que usa o tipo de uso "pequeno" com inodes de 128 bytes em versões mais antigas mkfs.ext4(antes de 1.46.4, então você provavelmente tem um mke2fs.conf):

    mkfs.ext4 -T ext4 /dev/loop18
    

    … ou você pode editar o tamanho do inode “pequeno” /etc/mke2fs.confe defini-lo como 256.

    Não há problema em continuar usando inodes de 128 bytes e ignorar o aviso se você sabe que não precisará armazenar datas além de 2038 no sistema de arquivos.

    • 12
  2. ArtEze
    2025-01-24T07:16:53+08:002025-01-24T07:16:53+08:00

    Para complementar a resposta que Stephen já me deu... deixo o comando final:

    echo y | mkfs.ext4 -O 64bit -I 256 /dev/loop18
    

    Essa seria a maneira correta de usá-lo.

    Observação: adapte o nome do loop conforme necessário.


    Deixo também um código interessante... É para ordenar os losetup por número.

    result=$(losetup -a | while read line; do
        num=$(echo $line | sed 's/loop//g' | cut -d: -f1 | cut -d'/' -f3)
        echo "$num $line"
    done | sort -n | tail -1 | tr " " "\n" | head -n2 | tail -n1 | sed "s/://g")
    echo -e "$result"
    

    Isso mostrará como resultado, por exemplo:

    /dev/loop18
    

    Essa forma de ordenar permite que você ordene pelo número do loop, que é um inteiro, se houver loop1, loop10, loop12, loop2, loop3, ele ordenará loop1, loop2, loop3, loop10, loop12, ordenando por número e não por alfabeto.

    Dessa forma, o loop com o maior número de todos é escolhido. Esse deve ser o número do loop que foi criado por losetup -flast.


    Com o --showparâmetro é possível obter o dispositivo diretamente, então para facilitar, você pode combinar losetupcom mkfs.

    echo -e "
    I create the empty image"
    qemu-img create -f qcow2 "rootfsimage.qcow2" "20G"
    
    echo -e "
    I mount and format the image"
    echo y | mkfs.ext4 -O 64bit -I 256 "$(losetup -f --show rootfsimage.qcow2)"
    
    • 3

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve