Esiste un buon strumento per la copia di file?


8

Il dialogo di copia è bloccato a 0 secondi rimanenti ...

Ogni volta che provo a copiare file di grandi dimensioni sul mio pendrive USB (in qualsiasi formato), si ferma sempre all'ultimo momento. Finisce dopo molto tempo .

Ho cercato su Ubuntu messaggi simili e ne ho ottenuti molti , ma nessuno di questi ha buone soluzioni.

Quindi ... Esiste uno strumento di copia alternativo come Teracopy su Windows?

O ci sono correzioni che posso fare?

Inserisci qui la descrizione dell'immagine


Per favore fatemi sapere quali file dovrei caricare per riferimento
Severus Tux,

2
Non ne sono sicuro, ma presumo fortemente che il tuo problema sia legato alla memorizzazione nella cache di scrittura USB . Cerca post su come disabilitarlo. L'intero processo di copia apparirà più lento allora, ma dovrebbe essere veramente finito quando sembra finito allora.
Byte Commander

@ByteCommander Per più lento, vuoi dire velocità effettiva ??
Severus Tux,

2
Non ho molta familiarità con quell'argomento, ma la memorizzazione nella cache mantiene solo i dati che si desidera scrivere sul dispositivo USB in memoria e li scrive in seguito, quando pensa che il bus oi dispositivi siano meno occupati o quando può ottimizzare il modo per salvare insieme i blocchi di dati ... Questo non dovrebbe migliorare la velocità di scrittura fisica effettiva (molto), ti apparirà più velocemente, perché il processo di copia segnala di essere finito non appena tutti i dati da scrivere sono nella cache. Ma ci vuole ancora più tempo per scrivere la cache sul dispositivo. Non è possibile disconnetterlo immediatamente comunque prima che la cache sia stata scritta
Byte Commander

Sì, la velocità effettiva di copia sarebbe la stessa (forse leggermente più lenta perché il buffer rende meno probabile che ci sarà un momento in cui nulla viene scritto su disco, ma non molto su un sistema leggermente caricato), ma la finestra di dialogo di avanzamento sarebbe più preciso.
Hobbs,

Risposte:


6

Non dovresti preoccuparti troppo di questo.
Forse il tuo pendrive USB è di "qualità inferiore".
L'output della finestra di dialogo relativa al tempo è fuorviante.

Altri strumenti di copia possono avere un comportamento di output diverso,
ma non migliorano la velocità di scrittura dell'unità USB.
Il più importante di tutti è che finalmente l'operazione di copia ha successo.

Quello che puoi fare è ottimizzare gli scheduler di input / output dei dischi.

Installa gksu(quando non l'hai già fatto) per modificare i file con geditcome root:

sudo apt-get install gksu  

Ora ottimizza la priorità di tutti i processi in esecuzione per vari tipi di dischi:

gksudo gedit /etc/udev/rules.d/60-schedulers.rules

Incolla le seguenti righe in questo file vuoto e successivamente salva il file:

# set cfq scheduler for rotating disks
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="1", ATTR{queue/scheduler}="cfq"

# set deadline scheduler for non-rotating disks
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="deadline"  

Le modifiche apportate diventano effettive dopo il riavvio del sistema operativo.

Inoltre ... nei repository Ubuntu è disponibile una soluzione di copia alternativa:

sudo apt-get install dirdiff  

Ora avvia lo strumento da un terminale per confrontare o copiare file e cartelle:

dirdiff

dirdiffè una GUI per diffe può gestire fino a 5 alberi. Visualizza una finestra principale con un elenco di file diversi tra gli alberi, con quadrati colorati per indicare le età relative delle versioni. Un menu consente di visualizzare le differenze tra due versioni qualsiasi in un'altra finestra. Un altro menu consente di copiare file e cartelle da un albero all'altro.

Riepilogo: il più rilevante di tutti è la qualità del disco USB e le sue capacità di scrittura!


7

Il motivo per cui si vede che la copia avviene nel modo in cui si esegue è che le scritture sull'unità USB sono asincrone .

Quando si copia un file, questo viene effettivamente copiato nel buffer dell'unità USB, che si trova nella RAM del computer. La prima parte della copia è molto veloce perché sta andando nel buffer. I dati vengono scaricatidal buffer all'unità USB a una velocità molto più lenta. Una volta che il buffer si è riempito, deve attendere che alcuni dei dati vengano scaricati sul disco prima di poterlo inserire nel buffer, quindi la copia rallenta fino a raggiungere la velocità dell'unità USB. Una volta che tutto il file è stato inserito nel buffer, sembra che il file sia stato copiato. Tuttavia, non tutti i dati sono stati scaricati dal buffer sul disco USB stesso. Alcuni programmi di copia ritornano e lasciano che il flushing continui in background. Alcuni aspetteranno fino a quando tutti i dati saranno stati cancellati, motivo per cui rimarranno al 100% per qualche tempo.

È possibile passare al disco in modalità sincrona, il che significa che tutti i dati vengono immediatamente scritti sull'unità USB senza utilizzare il buffer. Ciò darà l'impressione di un trasferimento più fluido dei dati, ma potrebbe effettivamente finire con una riduzione complessiva della velocità.

Se si monta manualmente il disco dalla riga di comando, è possibile aggiungere -o sync.

Se lo monti usando fstab puoi aggiungere l' syncopzione.

Se fai affidamento sul fatto che Ubuntu lo monti per te quando accedi ad esso nella GUI, puoi modificare le opzioni di mount dalla riga di comando una volta montato:

sudo mount -o remount -o sync /media/yourname/diskname

2
Questa è la risposta
kos,

2

È probabile che il file sia letto e archiviato completamente nella memoria prima che sia completamente scritto sull'unità di destinazione.

Questo non significa rispondere esattamente alla domanda, ma una soluzione alternativa potrebbe essere utilizzata pvdalla riga di comando in caso di file di grandi dimensioni:

sudo add-apt-repository universe && sudo apt-get update && sudo apt-get install pv

Ogni volta che è necessario copiare un file di grandi dimensioni:

pv /path/to/big_file >/media/username/usb/big_file

Da notare che questo soffre di un simile problema di buffering indesiderato quando usato in una pipe; in tal caso, una correzione limita la velocità di trasferimento a qualcosa leggermente superiore alla velocità di scrittura dell'unità di destinazione:

[...] | pv -L 10M >/media/username/usb/big_file # Limits the transfer rate to 10 MB/s

1

Esistono diverse alternative. È possibile utilizzare l'approccio da riga di comando:

cp *source* *target*

dove sorgente è il file che si desidera copiare e destinazione è il file o la cartella in cui si desidera copiare. Ulteriori opzioni sono disponibili su https://softwarerecs.stackexchange.com/


0
dd if=INPUT_FILE_PATH of=OUTPUT_FILE_PATH bs=$(( 64 * 1024 * 1024 )) oflag=sync

Questo leggerà dal tuo iffile e scriverà su offile in blocchi da 64 MiB e attenderà fino a quando ogni blocco è stato scritto prima di iniziare quello successivo. L'utilità che stai utilizzando è molto probabilmente semplicemente leggendo il file in memoria e quindi inviandolo al disco (e non si può dire quanti byte alla volta lo sta facendo). La cache di scrittura può trovarsi nel dongle USB stesso però ... Quindi la velocità di 60 MiB al secondo che stai ottenendo è la velocità di trasferimento tramite la connessione USB alla cache interna del dongle. Ma questo non è probabile a meno che non sia un dongle USB3. USB2 non ha una velocità sufficiente per gestire 60 MiB al secondo.


0

Non è necessario tutto quanto sopra. Basta aprire una finestra del terminale quando il trasferimento mostra lo 0% a sinistra e digitare syncDalle pagine man, il comando sync svuota i buffer del file system, ma ovviamente scaricherà solo quelli a cui si hanno i diritti. Se vuoi scaricarli tutti i tipisudo sync

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.