Copiei alguns arquivos para HFS+, usando macOS, garantindo que foi copiado exatamente. No macOS, esses arquivos copiados têm 501 como proprietário, de acordo com ls -han
.
Em seguida, conecto o pendrive HFS + no Ubuntu, e lá os arquivos têm 1000 como proprietário, de acordo com ls -han
. Por que?
Tentei então copiar um dos 501 arquivos de propriedade no Ubuntu (para o mesmo volume HFS+), garantindo que ele fosse copiado exatamente usando cp -a
.
Agora o macOS ls
vê o novo arquivo como propriedade do usuário 1000...
Realmente? Não entendo - qual foi o sentido de usar cp
a -a
opção se ela nem preserva o ID do usuário do proprietário? O que eu perdi?
Atualização: para esclarecer, acho que minha confusão aqui decorre disso - na minha opinião - o HFS suporta permissões de arquivo Unix nativamente e deveria "simplesmente funcionar" com elas.
Aprendi recentemente que cp
s preserve=timestamps
não preserva, de fato, carimbos de data/hora (as datas de criação são redefinidas). Devo agora acreditar que isso preserve=ownership
não preserva a propriedade?
Da documentação do kernel Linux para o
hfsplus
módulo :501 é o UID padrão do primeiro usuário regular no macOS moderno.
Portanto, aparentemente o macOS não inicializa "estruturas de permissões" para alguns arquivos. Além disso, o Apple Technote #1150 indica que o armazenamento do ID do proprietário tem um problema adicional:
e depois:
S_IFMT mencionado aqui são os 4 bits mais altos do valor de 16 bits usado para armazenar os bits de permissão no estilo Unix: 3x leitura/gravação/execução e os bits setuid/setgid/sticky. Um arquivo normal precisa que os 4 bits mais altos sejam definidos para um valor específico diferente de zero (
S_IFREG
) ou então o mecanismo de compatibilidade com versões anteriores descrito acima entrará em ação.A estrutura do sistema de arquivos HFS + abre claramente a possibilidade de, às vezes, brincar de forma "rápida e solta" com as propriedades dos arquivos, e seus resultados indicam que o macOS parece fazer exatamente isso em algumas situações.
Para mídia removível, faria certo sentido que o macOS habilitasse automaticamente a opção "ignorar propriedade", pois o sistema que grava os arquivos na mídia pode não ser o mesmo que o lerá, e os dois os sistemas podem ter mapeamentos UID totalmente diferentes, resultando em inconveniência para o usuário.
Portanto, isso pode ser apenas o macOS tentando ser amigável em mídia removível e assumindo que a posse física da mídia removível pelo usuário é equivalente a uma prova de propriedade dos dados contidos nela.
A primeira conta de usuário regular do Ubuntu é criada com UID 1000, e aparentemente essa é a conta que você montou o volume HFS + no Ubuntu.
Como os arquivos criados pelo Linux mantêm seu UID 1000 no macOS, isso indica que o Linux preencherá as "estruturas de permissões" HFS + com os UIDs do proprietário do arquivo e, assim que o macOS os ler, eles funcionarão conforme o esperado.
Os carimbos de data/hora POSIX clássicos são:
ctime
= hora da última alteração de status/metadadosmtime
= hora da última modificação do conteúdoatime
= hora do último acesso.A hora da criação (
crtime
ou hora do nascimento ) não é uma delas. Um sistema de arquivos pode ou não suportar tempos de criação, e sua semântica exata pode variar entre os tipos de sistema de arquivos e os sistemas operacionais estilo Unix.Alguns drivers de sistema de arquivos atribuem o horário de criação internamente e tornam totalmente impossível modificar o
crtime
arquivo posteriormente: em tal sistema de arquivos, um arquivo que foi acidentalmente excluído e restaurado de um backup pode ter seu clássicoctime
emtime
restaurado, mas o horário de criação será refletem o momento da restauração do backup, já que o arquivo não é mais o original , embora possa ser uma cópia exata dele .Ao copiar um arquivo, você simplesmente cria um novo arquivo : a ideia de "preservar o tempo de criação" em uma operação de cópia é um oxímoro.
Um sistema de arquivos por si só pode rastrear o horário de criação de um arquivo , mas isso não é necessariamente o mesmo que o horário de criação dos dados dentro do arquivo . Se você deseja rastrear o último, geralmente precisa de um sistema de controle de versão ou de um formato de arquivo que possa incluir um campo de metadados no momento da criação dos dados... e todos os aplicativos que usam esse formato de dados devem concordar com a semântica do que o " tempo de criação de dados" significa, ou então perderá o sentido.