Dlaczego podczas kopiowania na dysk zewnętrzny okno postępu jest nieprawidłowe

11

Edytuj tytuł, aby lepiej wyjaśnić, co tu zamierzam napisać.

Na przykład, gdy kopiuję duże pliki na pendrive, okno postępu pokazuje szacunek, że przez większość czasu nie pokazuje czasu rzeczywistego i procentu ukończenia, ale są przypadki, w których mówi się, że wszystko jest skończone, a okno postępu zamyka się. Idę wyjąć pendrive i mówi, że jest nadal w użyciu. Po sprawdzeniu pendrive widzę, że nadal kopiuje pliki, ale nie pokazuje tego okno postępu.

Dzieje się tak nie tylko w przypadku dużych plików, ale także w przypadku wielu małych plików. Jeśli je skopiuję, pasek postępu może na przykład powiedzieć 15 sekund i zakończyć w tym czasie, ale rzeczywisty czas może wynosić 1 minutę i przez następne 45 sekund muszę spojrzeć na światło w pendrivie, aby sprawdzić, czy to prawdziwa aktywność.

Nie chcę wiedzieć, jak to naprawić, ponieważ przeczytałem, jak głęboka może być poprawka. Chcę wiedzieć, dlaczego okno postępu pokazuje oszacowanie, które nie odpowiada procesowi kopiowania.

Czy to zależy od pamięci podręcznej w jednostce zewnętrznej?

Czy rozmiar pliku i wielkość wpływu pliku na prawidłowe oszacowanie. Na przykład 1 plik 4 GB lub 1000 plików 4 MB.

Czy istnieją opcje konfiguracji, które mogą zmienić zachowanie.

Istnieją inne pytania podobne do tego, takie jak kopiowanie plików na pamięć USB, nigdy nie skończone, ale bardziej skupiam się na mechanice, dlaczego tak się zachowuje.

Luis Alvarado
źródło

Odpowiedzi:

6

Przypuszczam, że używasz Nautilusa jako menedżera plików, a jeśli tak, to od dawna występują w nim błędy. Zbyt nieliczna, by wspomnieć o Mennicy, Fedorze, Red Hat i tym podobnych. Ubuntu nie jest pozbawione tego samego problemu.

Niektórzy sugerują, że wyłączenie widoku miniatur pomaga. Inni pokładają nadzieję w „najnowszym jądrze”, ale nadal istnieje.

Problem = Zaczyna się szybko, a następnie wolniej Dzieje się tak, ponieważ po zamontowaniu z asynchronią zapisuje on w pamięci podręcznej, gdy pamięć podręczna jest pełna, widać rzeczywistą prędkość zapisu.

Wydaje się, że jest to obejście sudo cp /filetobecopied /dev/nameofdevice

inny opublikowany tutaj mówi, że działa „kopiowanie fragmentów”. Niepotwierdzony z mojej strony.

Ringtail
źródło
3
Aby to wyjaśnić, jądro buforuje dane w pamięci RAM zamiast zapisywać je bezpośrednio (ze względu na wydajność). Po kliknięciu opcji Wysuń syncw tle wykonywane jest polecenie, które opróżnia pamięć podręczną. W przypadku dużych ilości danych może to chwilę potrwać.
trzydzieści trzydzieści
1
WSKAZÓWKA: sudo cp / filetobecopied / dev / nameofdevice zastąpi cały system plików twoim plikiem, zwykle nie tym, czego chcesz ....
Lennart Rolland
1

To także miła odpowiedź z rozwiązaniem: https://unix.stackexchange.com/a/181236 Mówi:

Dzieje się tak dlatego, że program mówi „zapisz te dane”, a jądro Linuksa kopiuje je do bufora pamięci, który czeka w kolejce na dysk, a następnie mówi „ok, gotowe”. Więc program uważa, że ​​skopiował wszystko. Następnie program zamyka plik, ale nagle jądro każe mu czekać, aż bufor zostanie wypchnięty na dysk.

Niestety program nie może powiedzieć, ile czasu zajmie opróżnienie bufora, ponieważ nie wie.

Jeśli chcesz wypróbować kilka sztuczek dla zaawansowanych użytkowników, możesz zmniejszyć rozmiar bufora używanego przez Linuksa, ustawiając / proc / sys / vm / dirty_bytes na około 15728640 (15 MB). Oznacza to, że aplikacja nie może uzyskać więcej niż 15 MB przed faktycznym postępem.

Efektem ubocznym jest to, że komputer może mieć mniejszą przepustowość zapisu danych przy tym ustawieniu, ale ogólnie uważam, że warto zauważyć, że program działa przez długi czas, gdy zapisuje dużo danych, w przeciwieństwie do zamieszania związanego z posiadaniem program wydaje się być skończony ze swoim zadaniem, ale system źle się opóźnia, gdy jądro wykonuje właściwą pracę. Ustawienie wartości dirty_bytes na względnie małą wartość może również pomóc zapobiec przestaniu systemu w przypadku braku wolnej pamięci i uruchomieniu programu, który nagle zapisuje dużo danych.

Ale nie rób tego zbyt małego! Używam 15 MB jako przybliżonego oszacowania, że ​​jądro może opróżnić bufor na normalnym dysku twardym w 1/4 sekundy lub mniej. Dzięki temu mój system nie czuje się „opóźniony”.

Cirelli94
źródło