Mover um arquivo entre duas unidades em um SSD - ele será copiado?

18

Ao mover um arquivo em uma unidade, o arquivo não é copiado e excluído. A tabela que se refere aos arquivos foi atualizada. E, tanto quanto eu sei, esse não é o caso em 2 unidades em um disco rígido. Mas os SSDs são diferentes, não há espaço físico dedicado a cada unidade. ( fonte )

Portanto, minha pergunta é o que acontece quando um arquivo é movido de uma unidade para outra no mesmo SSD, os bytes são copiados e o original excluído ou alguma tabela é atualizada, diminuindo menos o SSD?

Já existe uma pergunta duplicada aqui . Mas ambas as respostas afirmam:

cada partição terá sua própria área física da unidade para si mesma

e

Particionar um disco rígido na verdade designa regiões físicas para cada partição. [e em um comentário:] O SSD ainda é um disco rígido, apenas não possui um disco.

Tanto quanto sei, isso está errado. Veja aqui .

Então, alguém que sabe mais sobre SSDs, por favor, me diga se está correto em sua avaliação, apesar do erro?

ispiro
fonte
14
A resposta aceita é a correta: cada partição possui seu próprio sistema de arquivos independente. Cada sistema de arquivos decide por si próprio como utiliza os blocos atribuídos a ele. Para fazer o que você propõe o firmware do SSD, o (s) sistema (s) de arquivos e as ferramentas da terra do usuário como o Linux mvteriam que cooperar, misturando muito as camadas de abstração.
Kamil Maciorowski
2
@ Kamil: Se o sistema operacional o implementasse, mvrealmente precisaria fazer menos do que atualmente, eu suspeito. (Ou seja, o sistema operacional só precisa ter certeza de que uma renomeação cross-filesystem () sucede ao invés de falhar, como actualmente acontece.)
grawity
16
"2 unidades em [um SSD / HDD]" - acho que você quer dizer 2 sistemas de arquivos ou 2 partições em um SSD / HDD. Lembre-se de que o último "D" nos dois acrônimos é "Drive", então você está dizendo 2 unidades em 1 unidade, o que não faz sentido.
JOL
11
Tomemos, por exemplo, a caixa de diálogo Gerenciamento de disco. Diz Change Drive Letter and Pathsquando se refere a uma partição / volume.
Ispiro
4
@ispiro Isso está no Windows? Parece uma maneira terrível de confundir os usuários. Só posso supor que eles criaram o termo "Letra da Unidade" antes das partições de unidade serem implementadas e, em seguida, acabaram representando as partições de unidade como "unidades" independentes. Portanto, agora você pode ter várias "unidades" do Windows que representam partições de uma unidade de hardware ...
JoL

Respostas:

38

Até onde eu sei, isso está errado

A descrição citada está meio correta, meio errada. Mas também está meio errado para os HDDs.

Particionar uma unidade designa regiões lógicas para cada partição. O sistema operacional não se importa com localizações físicas - apenas pede à unidade que "leia o bloco lógico # 31415926" e a própria unidade decide onde os dados estão localizados. Isso funciona da mesma maneira para a memória magnética e flash.

Na verdade, é o mesmo que com os HDDs dos últimos 20 a 25 anos: embora os primeiros sistemas operacionais usassem locais físicos de cilindros / cabeçote / setor, isso já faz muito tempo. Você não sabe exatamente onde está o prato LBA # 1234. Os HDDs remapeiam até mesmo setores físicos ruins automaticamente, para que o mesmo LBA possa ser lido repentinamente em uma área física completamente diferente - exatamente como nos SSDs.

Portanto, com HDDs e SSDs, o sistema operacional apenas possui uma variedade de LBAs (por exemplo, 0–999999) para leitura e gravação de dados. O objetivo do particionamento é alocar subintervalos nele - por exemplo, a partição A recebe 10–499999, a partição B recebe 500000–999999. Cada partição possui um sistema de arquivos independente, e os sistemas de arquivos dentro de cada partição não podem referenciar dados fora dela - eles não podem cruzar os limites da partição. (Por exemplo, a partição A não pode ter um arquivo cujos dados são mantidos no setor # 600000.)

Como resultado, todos os arquivos que se deslocam de um para o outro devem ser copiados na íntegra.

(Dito isso, em teoria, o sistema operacional pode solicitar ao próprio disco que duplique dados de uma área para outra (por exemplo, "copie o LBA # 1234 para # 567890"), sem precisar copiá-lo para a memória principal e depois voltar, e, é claro, isso ignoraria completamente os limites da partição. Isso poderia fazer uso da "camada de conversão de flash" do SSD, por exemplo. Mas, na prática, até onde eu sei, isso não é feito.)

gravidade
fonte
Presumo que você esteja certo. No entanto, notar que há é uma outra opção. A unidade poderia decidir que o setor nº 001 na unidade nº 1 passaria agora para o setor nº 123 na unidade nº 2 (ou seja, o setor nº 001 na unidade nº 1 agora se referirá aos dados físicos que costumavam ser chamados de setor nº 123 em drive nº 2), movendo o arquivo sem precisar copiar os bytes. Portanto, mover uma TB de dados pode, em princípio, ser quase instantâneo.
Ispiro
15
A unidade não conhece arquivos ou sistemas de arquivos e, portanto, não pode tomar essas decisões por si só. Ele precisa receber uma solicitação do sistema operacional para que isso ocorra. Como eu já mencionei no último parágrafo, é certamente tecnicamente possível, mas os sistemas operacionais geralmente não se preocupam com isso para cópias entre sistemas de arquivos, e duvido que eles façam também para cópias no mesmo sistema de arquivos (mais comumente é feito no nível FS).
grawity
6
Certos SSDs implementam a deduplicação no nível do bloco. Por exemplo, a Sandforce ( en.wikipedia.org/wiki/SandForce#Technology ) foi uma das primeiras a implementar isso e seus controladores chegaram a vários produtos de fabricantes de SSD. Os controladores Sandforce tinham um fator de "amplificação de gravação" inferior a um - o que significa que eles gravaram menos dados no armazenamento flash do que o que o sistema operacional enviou à unidade. Como comparação, os SSDs geralmente têm um fator de amplificação de gravação maior que um.
Hjusaram
2
@hojusaram: Verdade, mas ainda é a deduplicação pós-factum - reduzindo as gravações em flash, mas os dados ainda são lidos, copiados do disco para a memória do sistema operacional e depois para o controlador de disco. O que ispiro significava, eu acho que é o SSD equivalente a "reflink" ou "copy on write" (por exemplo, cp --reflink) que o sistema operacional pode pedir explicitamente ao disco para executar por conta própria.
grawity
11
Seria interessante descobrir como o APFS lida com isso, como os limites da partição não são mais fixos, eles são mutáveis ​​sem a intervenção do usuário.
Tetsujin
9

O que acontece quando os dados são gravados em um disco de estado sólido é digno de vários artigos (bom resumo aqui ), porque é muito complicado e depende da tecnologia subjacente. A história resumida é que os SSDs em geral não podem gravar zero bits na memória. Em vez disso, eles precisam zerar (apagar) uma seção inteira da memória e, em seguida, podem armazenar dados depois disso, apenas escrevendo os que estão nela. Atualmente, eles escrevem blocos de 512 bytes, mas apagam uma página de 8 blocos, que é 4096. Isso e o fato de que cada ciclo de gravação / exclusão causa algum desgaste físico da memória e a memória acaba eventualmente se desgastando, torna os SSDs muito diferentes do que girar HDDs magnéticos.

Deixando isso de lado, as unidades SATA (e unidades AFAIK SAS) não implementam um comando nativo para copiar dados de um setor para outro. (Ou pelo menos nada nas especificações SATA ou SAS exige, portanto, o sistema operacional não pode contar com esse comando disponível.) Portanto, uma cópia de arquivo em uma partição envolverá a leitura dos dados de um setor de unidade na memória do host e a gravação de volta à unidade em um setor diferente.

Isso ocorre porque, no que diz respeito ao sistema operacional, uma unidade é um conjunto de setores lógicos numerados e tudo o que você pode fazer é ler de setores e gravar em setores. O sistema operacional não pode dizer à unidade para remapear setores.

Além disso, o sistema de arquivos (HFS +, NTFS, ext3 etc.) é um conjunto de estruturas de dados que impõem ordem a um conjunto de blocos lógicos. Essas estruturas de dados implementam "arquivos", "nomes de arquivos", "diretórios", "permissões" etc. Então, sim, quando você move um arquivo de um diretório para outro, ele não é copiado; somente os dados do sistema de arquivos que indicam em qual diretório o arquivo está são atualizados.

O conceito de uma partição é que é um conjunto de setores lógicos na unidade reivindicados por um único sistema de arquivos. O corolário disso é que um sistema de arquivos pode não acessar setores fora de sua partição. Em grande parte, esse é um recurso de segurança, mas também decorre do fato de que as estruturas de dados do sistema de arquivos são todas construídas para contabilizar todos os setores da unidade sob a propriedade do sistema de arquivos, e não é trivial adicionar ou remover setores a essas estruturas. É por isso que você precisa executar rotinas especiais para ajustar o tamanho de uma partição e também por que os sistemas de arquivos insistem em executar em um conjunto contíguo de setores.

Portanto, é impraticável e perigoso implementar uma cópia de arquivo apenas transferindo setores de um sistema de arquivos para outro. Em uma unidade magnética giratória, também seria um pesadelo de desempenho, porque, embora a unidade faça exceções para setores defeituosos, em geral ela organiza que os setores sejam localizados fisicamente de maneira a otimizar a velocidade de leitura e gravação de números numerados consecutivamente setores.

Além disso, 2 sistemas de arquivos podem não armazenar dados do mesmo modo no disco, o que significa que a troca de setores não funcionaria, mesmo que fosse prático. Mesmo que sejam exatamente os mesmos tipos de sistema de arquivos, digamos NTFS, um pode estar usando criptografia ou compactação e o outro não, ou ambos podem criptografar os dados, mas com chaves diferentes. Não é necessário que os dados no arquivo sejam exatamente o que está armazenado no disco, tudo o que precisa ser armazenado é uma transformação reversível dos dados, para que o sistema de arquivos possa obter os dados do arquivo fazendo algo com os dados no disco. Portanto, a menos que ambos os sistemas de arquivos estejam usando exatamente a mesma transformação, a simples troca de setores não alcançaria o objetivo de transferir os dados do arquivo.

Por todos esses motivos, é trabalho demais para pouco ganho para os gravadores de SO e gravadores de sistema de arquivos implementar um recurso que otimiza as movimentações entre partições para SSDs. Portanto, qualquer movimentação entre partições será uma leitura e uma gravação.

Dentro do SSD, é uma história um pouco diferente. Embora o sistema operacional não tenha informado à unidade que está copiando dados de um lugar para outro, as gravações em SSDs são tão caras (e complicadas) que os controladores de SSD fazem muito trabalho para minimizar as gravações. Alguns SSDs tentam detectar quando um setor que está sendo gravado no armazenamento corresponde a um setor já armazenado e marcam essa parte física da memória como agora mapeando para 2 setores lógicos diferentes, em vez de copiá-lo, fazendo no nível da unidade interna o que o OS não podia.

Mas não conte com isso.

Old Pro
fonte
11
O seu último parágrafo não implica que o sistema de arquivos deva ser o mesmo? Eu diria que o SSD não sabe qual sistema de arquivos está sendo executado no topo. Se, por exemplo, uma partição usa compactação e a outra não, uma cópia do SSD possivelmente corrompe o arquivo.
precisa
@blablabla O último parágrafo assumiu que os dois sistemas de arquivos armazenam o conteúdo real do arquivo no disco sem alteração. Eu fiz isso explícito agora.
Old Pro