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 / 760330
Accepted
Vikas Dhankhar
Vikas Dhankhar
Asked: 2023-11-01 16:28:01 +0800 CST2023-11-01 16:28:01 +0800 CST 2023-11-01 16:28:01 +0800 CST

Por que o comando dd recupera arquivo que foi excluído usando Shredder?

  • 772

Encontrei o inode de um arquivo usando ls -li. Então encontrei o bloco inicial a partir do qual este arquivo está gravado no disco. Copiei o conteúdo do bloco do comando dd para outro diretório. Em seguida, destruí o arquivo usando o utilitário Shred "shred -uvz -n = 10 file1.txt" e executei novamente o mesmo comando dd. arquivo foi novamente recuperado. Eu deveria obter 00000 depois que o arquivo fosse destruído. o que estou perdendo?

Na segunda iteração, não removi o arquivo e, em vez disso, executei "shred -vz -n = 10 file2.txt" Seguindo as etapas mencionadas anteriormente, consegui novamente recuperar o arquivo original usando o comando dd e a posição do bloco. No entanto, o conteúdo do arquivo fragmentado contém 00000, conforme mostrado no hexdump file2.txt. o que estou perdendo?

filesystems
  • 1 1 respostas
  • 1790 Views

1 respostas

  • Voted
  1. Best Answer
    frostschutz
    2023-11-01T17:27:22+08:002023-11-01T17:27:22+08:00

    Supõe-se que os sistemas de arquivos tenham acesso exclusivo aos seus dispositivos de bloco. Você não deve usar dddiretamente no dispositivo de bloco enquanto o sistema de arquivos está montado.

    Quando você usa dd(ou qualquer outro programa de espaço do usuário) para ler bytes diretamente de um dispositivo de bloco, essa leitura é armazenada em cache. Se você repetir ddnovamente, ele lerá os dados do cache.

    Infelizmente, gravar dados (por meio de um sistema de arquivos) não atualiza esse cache. Então você entra nesta situação em que os dados no cache não refletem os dados no disco.

    Outro exemplo onde isso acontece é TRIM. Se algum dado do dispositivo de bloco foi armazenado em cache, você ainda obterá os dados do cache, mesmo que o TRIM já os tenha removido. É por isso que você precisa descartar caches ao testar TRIM .

    Faça um sistema de arquivos com alguns arquivos:

    # truncate -s 10G filesystem.img
    # mkfs.ext4 filesystem.img
    # losetup --find --show filesystem.img
    /dev/loop1
    # mount /dev/loop1 loop/
    # for n in {000..100} ; do yes $n | dd bs=1M count=1 iflag=fullblock of=loop/$n; done 2> /dev/null
    # sync
    

    Verifique o conteúdo do arquivo e os deslocamentos físicos:

    # hexdump -C loop/042
    00000000  30 34 32 0a 30 34 32 0a  30 34 32 0a 30 34 32 0a  |042.042.042.042.|
    *
    00100000
    # filefrag -ve loop/042
    Filesystem type is: ef53
    File size of loop/042 is 1048576 (256 blocks of 4096 bytes)
     ext:     logical_offset:        physical_offset: length:   expected: flags:
       0:        0..     255:      44800..     45055:    256:             last,eof
    loop/042: 1 extent found
    

    Ler do dispositivo de bloco:

    # dd bs=4096 skip=44800 count=256 if=/dev/loop1 | hexdump -C
    00000000  30 34 32 0a 30 34 32 0a  30 34 32 0a 30 34 32 0a  |042.042.042.042.|
    *
    00100000
    

    Destruir:

    # shred -v -n 1 loop/042
    shred: loop/042: pass 1/1 (random)...
    

    Ler do dispositivo de bloco (em cache):

    # dd bs=4096 skip=44800 count=256 if=/dev/loop1 | hexdump -C
    00000000  30 34 32 0a 30 34 32 0a  30 34 32 0a 30 34 32 0a  |042.042.042.042.|
    *
    00100000
    

    Ler do dispositivo de bloco ( iflag=nocache):

    # dd bs=4096 skip=44800 count=256 if=/dev/loop1 iflag=nocache | hexdump -C
    00000000  30 34 32 0a 30 34 32 0a  30 34 32 0a 30 34 32 0a  |042.042.042.042.|
    *
    00100000
    # dd bs=4096 skip=44800 count=256 if=/dev/loop1 iflag=nocache | hexdump -C | head
    00000000  59 c2 d8 d4 5a 02 35 15  a1 fb f1 07 ae 53 59 99  |Y...Z.5......SY.|
    00000010  5b 47 4f fc 2c e7 d3 db  10 70 c6 72 3e 6f 0b 05  |[GO.,....p.r>o..|
    00000020  f5 07 c6 f7 95 64 8b a2  4e 7f 32 4f 0c b1 a3 32  |.....d..N.2O...2|
    00000030  18 b5 99 7d 7d 6e 6d d6  b9 36 77 af 30 02 ba 23  |...}}nm..6w.0..#|
    00000040  f5 55 a5 b7 01 51 cd 5b  64 c9 29 1f f6 48 23 6c  |.U...Q.[d.)..H#l|
    

    dd iflag=nocachedescarta dados do cache somente após lê-los do cache, portanto, isso deve ser feito duas vezes para ver os novos dados. Alternativamente, você pode usar sync; echo 3 > /proc/sys/vm/drop_cachespara descartar todos os caches ou tentar a sorte com E/S direta.

    • 15

relate perguntas

  • Qual sistema de arquivos devo usar em um cartão SD em um NAS?

  • Como saber antecipadamente se um .zip tem um diretório pai dentro

  • Disco alocado dinamicamente do Virtualbox *.vdi continua crescendo

  • du/df e ls relatando diferentes usos de disco

  • Como os desenvolvedores do kernel Linux lidam com seu trabalho com milhões de linhas de código? É um método? [fechado]

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