Perché "cp -R --reflink = always" esegue una copia standard su un filesystem btrfs?


12

Supporto Btrfs Copy-On-Write. Ho provato a usare quella funzione per clonare una directory:

cp -R --reflink=always foo_directory foo_directory.mirror

Mi aspettavo che il comando finisse quasi all'istante (come un btrfs subvolume snapshot), ma il cpcomando sembra eseguire una copia lenta e standard.

Secondo la pagina man, mi sarei aspettato --reflink=alwaysdi applicare Copy-On-Write:

Quando viene specificato --reflink [= always], eseguire una copia leggera, in cui i blocchi di dati vengono copiati solo quando modificati. Se ciò non è possibile, la copia ha esito negativo o se viene specificato --reflink = auto, tornare a una copia standard.

Domande:

  • Sai perché --reflink=alwaysnon funziona?
  • Quali opzioni (o altri comandi) dovrei usare invece?

Risposte:


20

cp --reflink=alwaysquasi sicuramente funziona correttamente. Se non lo fosse, riceveresti un errore. In base alla progettazione, questa è la differenza tra --reflink=alwayse --reflink=auto. L'errore sarebbe simile al seguente:

# Filesystem that does not support the feature at all
cp: failed to clone `xx' from `yy': Inappropriate ioctl for device

# Filesystem that does support it, but copy across filesystems
cp: failed to clone `xx' from `yy': Invalid cross-device link

Stai copiando una struttura di directory con molti piccoli file? In quel caso cpdeve ancora creare ogni directory e aprire e chiudere ogni file, quindi ci vorrà ancora tempo, a differenza btrfs subvolume snapshot. Ciò spiega molto probabilmente il tempo necessario per eseguire l'operazione.


3
Sì, contiene un numero enorme di file, molti dei quali piccoli file di testo. Non sapevo che cp debba ancora elaborare ogni file. Grazie, quella era la parte che non capivo. Penso che nel mio caso d'uso sia meglio creare un'istantanea scrivibile.
Philipp Claßen,

1
Sì, se riesci a creare un'istantanea, prova. cp --reflink=alwayspuò ancora tornare utile quando ciò che stai cercando di clonare non è la radice di un sottovolume, poiché btrfs subvolume snapshotopera solo su sottovolumi, non su porzioni di sottovolumi.
Celada,
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.