Spostamento di un file in un file in corso di lettura


10

Quando un file viene spostato e il file di destinazione esiste già e viene attualmente letto, l'operazione avrà esito positivo? Dipenderà dalla durata dell'operazione di lettura sul file di destinazione?

Risposte:


9

L'operazione di lettura avrà esito positivo, indipendentemente dal tempo necessario per completare l'operazione di lettura.

Perché e come funziona?

All'avvio dell'operazione di lettura, l' Inode del file viene utilizzato come handle da cui viene letto il contenuto del file.

Quando si sposta un altro file nel file di destinazione, il risultato sarà un nuovo inode, il che significa che il contenuto fisico del file sul disco verrà posizionato altrove e il contenuto originale del file che viene letto non verrà toccato.

L'unica cosa che hanno in comune è il loro percorso / nome file, mentre l'inode sottostante e la posizione fitologica sul disco cambiano.

Al termine dell'operazione di lettura (dato che nessun altro processo ha ancora un handle di file aperto sul vecchio file e non ci sono altri collegamenti fissi che fanno riferimento al suo inode), i vecchi dati verranno eliminati.

Una volta completata l'operazione di spostamento, il file avrà un nuovo numero di indice dell'inode.

È possibile visualizzare il numero indice dell'inode dei file utilizzando ls -i /tmp/some-file.

Per lo stesso motivo descritto sopra, è possibile eliminare i file che sono ancora in uso da un'applicazione, poiché le applicazioni che usano il file leggeranno semplicemente dall'inode (indicando il contenuto del file effettivo sul disco) mentre il riferimento ai file nel filesystem viene eliminato.


1
Hai dimenticato di menzionare i collegamenti reali: al termine dell'operazione di lettura, se tale inode è collegato da un'altra voce della directory, i dati non verranno rimossi (perché ha ancora un nome).
cjm

Grazie per averlo sottolineato, modificato la mia risposta e aggiunta.
Elias Probst,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.