Witaj na Forum Linuxiarzy
Zanim zalogujesz się, by pisać na naszym forum, zapoznaj się z kilkoma zasadami savoir-vivre'u w dziale Administracja.
Wiadomości z problemami zamieszczone w wątku "Przywitaj się" oraz wszelkie reklamy na naszym forum będą usuwane.

Buforowanie dysków USB w Ubuntu / Mint

Zaczęty przez CDeB, Lipiec 20, 2025, 03:45:39 PM

Poprzedni wątek - Następny wątek

CDeB

Hej.
Ponieważ Linux bardzo "agresywnie" buforuje dyski podpięte pod USB, chcę buforowanie wyłączyć.

Wiem że polecenie:
sudo hdparm -W 0 /dev/sdaWyłączy buforowanie dla dysku SDA właśnie, jednakże po resecie i/lub odpięciu dysku stan buforowania waca do poprzedniego stanu, co można sprawdzić poleceniem:
sudo hdparm -W /dev/sda
[sudo] hasło użytkownika aga:                             

/dev/sda:
 write-caching =  1 (on)

Widzę że w systemie istnieje plik konfiguracyjny hdparm.conf a w nim zakomentowane od linii 109 stoi:
Cytat#/dev/hda {
#   mult_sect_io = 16
#   write_cache = off
#   dma = on
#}

Jeśli zdejmę chasz czy to będzie bezpieczne i czy ktoś przy tym kiedyś dłubał? Czy ewentualna zmiana nie rozwali mi przyszłościowo podpiętych dysków?

linux4ever

#1
@CDeB Ja tam bym nie ryzykował no chyba że masz mało ważne dane.

Poczekaj na odpowiedzi innych którzy lepiej pomogą.

AI mi podaje:

CytatImportant Considerations:

    Performance impact:
    Disabling write caching can significantly slow down write operations to the USB drive, especially for large files.

Data loss risk:
Removing a USB drive while data is still cached can lead to data loss or corruption.
Alternative: Sync command:
Instead of disabling caching, you can use the sync command after writing to the USB drive to ensure all data is written to the device.
Hardware cache:
Some USB drives may have their own internal hardware cache that cannot be disabled by software.

I tutaj informacja:

https://unix.stackexchange.com/questions/637598/how-to-truly-disable-the-write-cache-functionin-dmesg-in-ubuntu-for-an-externa
"Powiedz mi, a zapomnę, pokaż mi, a zapamiętam, pozwól mi zrobić, a zrozumiem. "-Konfucjusz

pavbaranov

Zerknij - masz tu chyba dwa sposoby na rozwiązanie tej kwestii.
 
CachyOS (niekiedy mocno zmiksowany z Arch), Plasma (zawsze najnowsza, a niekiedy beta/RC). linux-cachyos.

CDeB

Dla mnie "problemem" była kwestia oczekiwania na odmontowanie pendriva przy kopiowaniu dużych plików. Czas pomiędzy teoretycznym skopiowaniem pliku, czyli zapełnieniem paska postępu w GUI, a faktycznym zakończeniem kopiowania diametralnie się różni. Ale widzę że jest to raczej niszowa kwestia i niewiele osób się tym przejmuje. Pozostaje ręczne odmontowanie w menadżerze plików i czekanie aż się bufor opróżni.
Wracając do sedna, widzę że zazwyczaj wszystko sprowadza się do wymuszenia zawieszenia buforowania za pomocą komendy:
sudo hdparm -W 0 /dev/sdaMyślę że zostawię to tak jak jest, bo chyba nie ma co kombinować i poprawiać fabryki skoro wszystko, choć nie idealnie, działa.
Dziękuję panowie za podesłane linki, w pliku konfiguracyjnym hdparm.conf zdecydowałam się nie dłubać.

melis

#4
Cytat: CDeB w Lipiec 20, 2025, 04:43:17 PMDla mnie "problemem" była kwestia oczekiwania na odmontowanie pendriva przy kopiowaniu dużych plików. Czas pomiędzy teoretycznym skopiowaniem pliku, czyli zapełnieniem paska postępu w GUI, a faktycznym zakończeniem kopiowania diametralnie się różni.
Oj przejechałem sie na tym raz. Niestety bardzo poważnie. Od tamtej pory używam tylko pendrive wyposażonych w diodę, oraz zaraz po rozpoczeciu przenoszenia danych, uruchamiam wysunięcie dysku z usb. Ciekawym jest, że ten postep jest inny np w Arch'owatych, a inny w Debian'owatych, gdzie w tych drugich przekłamanie jest znaczne, jeśli sugerować by się paskiem postepu procesu kopiowania, w GUI.

pavbaranov

@CDeB - Może pokombinuj jednak. To, co Ci podrzuciłem, to właśnie m.in. wywołuje tę komendę, o której piszesz, tyle, że robi to systemowo, czyli nie musisz za każdym razem na nowo jej wpisywać. Wyłączasz i tyle Cię interesuje. Być może (tj. na pewno) można jeszcze zmienić te parametry i zmniejszyć agresywność cachowania napędów. Tu pewnie coś empirycznie trzeba ustalić.
CachyOS (niekiedy mocno zmiksowany z Arch), Plasma (zawsze najnowsza, a niekiedy beta/RC). linux-cachyos.

CDeB

Może faktycznie pokombinuje, w sumie gra jest warta świeczki. Skupię się jednak na wielkości bufora, tak chyba będzie bezpieczniej. Jeszcze raz dzięki.

MSki

Podczas kopiowania pliku, dane najpierw są odczytywane z nośnika źródłowego i tymczasowo przechowywane w pamięci RAM laptopa, komputera.
Następnie są przesyłane z pamięci RAM do bufora urządzenia przenośnego (pendrive,SSD) poprzez interfejs USB.
W końcu dane są zapisywane na nośniku flash w pendrive, SSD.
Kopiowanie jest nadzorowane przez system.
Tak to w skrócie wygląda i (ja) bardziej bym się skupiał na urządzeniach (pen, SSD) z możliwie najszybszym czasem zapisu.

Na pytanie - Jakim poleceniem w Terminalu wyłączyć na stałe buforowanie zapisywanych na pendrive plików w systemie Debian ? - (mnie interesował zapis na penie).
ChatGPT odpowiedział następująco..

"Aby wyłączyć na stałe buforowanie zapisywanych plików na pendrive w systemie Debian, możesz zmodyfikować opcję montowania systemu plików, aby wyłączyć buforowanie.
Najczęściej używanym sposobem jest dodanie opcji sync do polecenia montowania, co wymusza natychmiastowe zapisywanie danych na nośnik. Aby zrobić to na stałe, edytujesz plik /etc/fstab.
Przykład:
    1. Otwórz plik
       /etc/fstab w edytorze tekstu, np.:
sudo nano /etc/fstab

    2. Znajdź wpis odpowiadający Twojemu pendrive (np. /dev/sdX1) i dodaj opcję sync. Twój wpis może wyglądać tak:
/dev/sdX1 /mnt/usb vfat defaults,sync 0 0

lub jeśli korzystasz z innego systemu plików (np. ext4):
/dev/sdX1 /mnt/usb ext4 defaults,sync 0 0

    3. Zapisz zmiany i zamknij edytor.
    4. Aby zastosować zmiany, odmontuj i ponownie zamontuj pendrive lub zrestartuj system.
Uwaga: Użycie opcji sync powoduje, że operacje zapisu są wykonywane natychmiast, co może spowolnić działanie systemu i zwiększyć zużycie nośnika, więc stosuj to ostrożnie.

Jeśli chcesz wyłączyć buforowanie tylko dla konkretnego montowania, możesz również użyć polecenia mount z opcją -o sync za każdym razem, ale to nie będzie trwałe rozwiązanie. Stałe rozwiązanie wymaga modyfikacji /etc/fstab.

CDeB

Zapis na stałe do fstab nie był dobrym pomysłem, chyba że używałam pendrajwów sformatowanych w np. FAT32 i tylko takich. Jeżeli używałam pena sformatowanego w exfat, ext2 czy dysku NTFS to były niemontowalne, pomimo że widoczne jako SDAx. Skrypt podesłany przez Pawła wyłączał mi buforowanie na wszystkich dyskach. Czegoś chyba nie ogarnęłam. Nie ważne.

Działającym rozwiązaniem jest zmiana wartości parametrów dirty_ratio i dirty_background_ratio.

Zmieniłam wartość dirty_ratio z 10 na 2

cat /proc/sys/vm/dirty_background_ratio
2

Zmieniłam również wartość dirty_background_ratio z 20 na 5

cat /proc/sys/vm/dirty_ratio
5

Czas opróżniania, czyli parametr dirty_writeback_centisecs pozostawiłam domyślny - 5 sekund.

cat /proc/sys/vm/dirty_writeback_centisecs
500

Jak rozumiem parametr dirty_background_ratio określa, jak duża część pamięci RAM (w procentach), zanim dane będą zapisane w tle na dysk. (przy 64GB RAM robi się dziwnie duży bufor), natomiast parametr dirty_ratio określa, jak duża część pamięci RAM (w procentach)musi zostać zapełniona, zanim system będzie musiał poczekać na zapis danych na dysk, w celu uniknięcia przepełnienia pamięci, jak domniemywam.

Aby to zrobić dla pojedynczej sesji należy wydać polecenia:

sudo sysctl -w vm.dirty_background_ratio=2
sudo sysctl -w vm.dirty_ratio=5

Na stałe zaś po dodaniu linii w /etc/sysctl.conf:

sudo nano /etc/sysctl.conf
Dodając parametry:

vm.dirty_background_ratio = 2
vm.dirty_ratio = 5

Działa.
Dziękuję wszystkim za pomoc i sugestie.

Zobacz najnowsze wiadomości na forum