O que acontece quando chamamos rm filename.txt?

1

Inspirado por this postar,

Temos mais espaço em disco quando chamamos rm insert_filename ?

A postagem vinculada do UNIX stackexchange diz: "o arquivo é desvinculado. Os dados ainda estão no disco, mas o link para ele é removido. Era possível recuperar os dados, mas hoje em dia os metadados são limpos e nada é recuperável. "

Eu sei que esta é uma questão que pode ser estupidamente questionada porque eu não sei muito sobre sistemas operacionais (daqui em diante encurtados para o sistema operacional) e discos; ie. O que significa até mesmo "ter espaço em disco", mas espero que haja uma maneira de simplificar a resposta para que o menos conhecedor entre nós ainda possa entender. Se eu passar pelos meus diretórios e chamar rm em arquivos grandes, isso significa que posso armazenar mais vídeos e mais arquivos grandes no meu sistema? Os arquivos " rm ed" são sobrescritos quando preencho todo o espaço em disco a que tenho acesso? (Eu estou prevendo algum sistema como coleta de lixo em Java que varre os arquivos antigos de tempos em tempos, digamos quando o computador está desligado / ligado ou quando o usuário está longe do computador por algum tempo)

Informação do sistema:

Eu corro o Ubuntu 16.04 LTS em um laptop Lenovo ThinkPad T420 recondicionado. Ele veio com o Windows 10, mas eu apaguei o Windows 10 em favor do Ubuntu 16.04.

    
por frank 04.02.2018 / 19:33

2 respostas

2

Apenas uma resposta curta, já que a questão vinculada já abrangia a maioria dos aspectos da questão.

If I go through my directories and call rm on large files, does that mean I can later store videos and more large files on my system?

Sim, o espaço originalmente ocupado pelo arquivo agora excluído pode ser usado para armazenar outros dados no sistema de arquivos, incluindo arquivos grandes, desde que a contagem de links após rm seja zero (por comentário de AB)

Para elaborar, se o arquivo que você está tentando rm for referenciado por um processo em execução como /proc/$PPID/fd/$fd , em que $PPID e $fd são o ID do processo e o número do identificador do arquivo, respectivamente O espaço do arquivo rm ed não poderá ser usado até que o processo termine e a contagem de links chegue a zero. (Agradeça A.B por apontar)

Outro caso é que você tem um link para o arquivo excluído em algum outro lugar do disco. rm fará com que a contagem de links seja reduzida em um, mas não liberará espaço extra.

Em suma, o espaço ocupado pelo arquivo que é rm ed só pode ser reutilizado se a contagem de links for zero após a exclusão. Essas informações podem ser obtidas pelo campo Links na saída do comando stat . Somente quando esse campo mostrar um 1 antes que rm seja executado, o espaço ocupado pelo arquivo excluído se tornará utilizável instantaneamente.

Do the "rmed" files get overwritten when I fill up all the disk space I have access to?

Quando eles são sobrescritos depende de onde eles se localizam no disco e de como o sistema de arquivos é organizado, mas geralmente o "arquivo" é sobrescrito antes de todo o espaço em disco ser usado.

    
por 04.02.2018 / 19:44
1

idk what it even means to "have disk space"

Essa é uma metaquestão perspicaz, porque é subjacente à sua questão.

Para entender o que significa "desvincular" um arquivo, é útil entender o que significa "vincular" um arquivo e o que "um arquivo" é. Acredite ou não, "um arquivo" é, como os três homens cegos e um elefante, coisas diferentes para pessoas diferentes.

A resposta depende do sistema de arquivos. No Windows, você provavelmente usou o NTFS; no Linux você pode usar o ext3. Vou restringir minha resposta ao lado do Linux, e ainda aos sistemas de arquivos (como ext3) que usam inodes para descrever arquivos, que a maioria dos nativos faz.

Esses filesytems organizam o espaço em disco bruto em termos de blocos. Espalhados entre os blocos estão alguns que contêm inodes. Cada inode contém informações sobre um arquivo: propriedade, permissões e o local & tamanho dos dados que está usando.

O sistema de arquivos está cheio de inodes, apenas esperando para serem usados. Antigamente, o número de inodes era fixo quando o sistema de arquivos era criado e, se você ficou sem inodes, "ficou sem espaço" porque não foi possível criar novos arquivos. Hoje em dia, isso geralmente é tratado dinamicamente.

O sistema de arquivos monitora onde estão todos os inodes, quais estão em uso e quais blocos permanecem não atribuídos. Para "ter espaço em disco" é ter blocos que não estão alocados para qualquer inode.

Quando você cria um novo arquivo, você realmente faz duas coisas:

  1. pegue um inode dos não usados
  2. atribua um nome

O primeiro passo não pode ser feito separadamente. Você não pode manipular o inode diretamente. O sistema operacional não tem funções para isso. Criamos e abrimos arquivos pelo nome; os detalhes o inode fica no kernel.

O segundo passo pode ser repetido com ln (1): você pode atribuir tantos nomes a um inode quanto desejar. Chamamos essa etapa de "vinculação" porque você vincula um nome ao arquivo. Você inverte o processo removendo o link com rm (1). Há ainda outro nome para isso: unlink (1). E agora você sabe por que é chamado "rm" e não "del": estamos removendo um link, não excluindo um arquivo.

Quando um arquivo é excluído, então? Qual é o oposto de criar um arquivo?

  • remova o link do inode para seu nome
  • renunciar ao inode

Remover o link é realizado primeiro. Antes que o inode seja então colocado na pilha não utilizada, duas restrições devem ser satisfeitas:

  • Como um inode possui mais de um nome, ele permanece em uso até que nenhum nome seja vinculado a ele. Isso é o que significa quando os links caem para zero em alguma documentação que você possa encontrar.
  • Como um inode pode estar aberto - um programa o está usando - o SO não colocará o inode na pilha não usada até que nenhum descritor de arquivo faça referência a ele (quando nenhum programa tiver o arquivo aberto).

Uma vez que um inode não tem nenhum nome vinculado a ele, é apenas uma questão de tempo antes de ser abandonado. Como um inode pode ser referido apenas por um nome vinculado a ele, é impossível criar um novo link ou abrir um arquivo sem um nome. Qualquer tentativa de abrir um arquivo com o mesmo nome apenas resultará em um novo arquivo: aloque um inode diferente e vincule o nome a ele.

Muitas pessoas acham esse comportamento confuso quando o encontram pela primeira vez e frustram quando não conseguem liberar espaço em disco "excluindo um arquivo grande" que está sendo usado por um processo em execução. Faz mais sentido se você tentar imaginar o que aconteceria com um programa se um arquivo que ele estava usando desaparecesse de repente. Ou se você já experimentou o erro inescrutável do Windows, "o arquivo não pode ser excluído porque está aberto em outro programa". Com inodes, você nunca recebe essa mensagem porque nenhum arquivo é excluído enquanto está aberto em outro programa.

    
por 06.02.2018 / 01:57