Linuxiarze.pl Forum

Sprzęt => Urządzenia peryferyjne => Wątek zaczęty przez: Bercik w Luty 10, 2026, 05:15:43 PM

Tytuł: Pamięci USB (zapis)
Wiadomość wysłana przez: Bercik w Luty 10, 2026, 05:15:43 PM
Witajcie kochani, tak mnie naszło właśnie, bo kopiowałem sporo plików na pendrive, potem na dysk USB, no ogólnie na pamięć przenośną USB i naszło mnie takie pytanie:
Czemu do diabła, po zakończeniu paska postępu, dopóki nie zastosowałem "wysuń bezpiecznie" to plików tam nie ma? Pliki dość duże (po kilka GB), zapewne siedzą w buforze, mimo zakończenia kopiowania, kopiuje je w tle i nie pozwala wysunąć.

Nie rzadko mam potrzebę kopiuj wklej, pasek mija i odłączyć i do następnego kompa podpiąć, a tu pusto.
Przecież to bez sensu jest. Na macOS taka funkcja istnieje w sumie do wszystkiego ale tam inaczej działa, bo wybierając wysuń mija dosłownie chwila (kilka sekund) i mogę odpinać - tu nie, potrafi mielić tym pendrivem długo.

Jak się tego pozbyć, bo przecież to idiotyczne :) Niech zapisuje bezpośrednio na pamięć a nie w bufor i dopiero.

Da się to jakoś sensownie zrobić?
Tytuł: Odp: Pamięci USB (zapis)
Wiadomość wysłana przez: linux4ever w Luty 10, 2026, 05:26:28 PM
@Bercik Pewnie to opcja wbudowana w kernelu.

Zobacz to:

CytatWyłączenie buforowania (write caching) USB w systemie Linux pozwala na bezpieczniejsze odłączanie pamięci przenośnych, ponieważ dane są zapisywane natychmiastowo, a nie w pamięci RAM. Należy jednak pamiętać, że drastycznie obniży to prędkość zapisu na urządzeniach USB
.
Oto główne sposoby na wyłączenie buforowania zapisu dla pamięci USB:
1. Użycie polecenia hdparm (tymczasowe)
Możesz wyłączyć buforowanie dla konkretnego urządzenia za pomocą narzędzia hdparm.

    Zidentyfikuj urządzenie: Użyj polecenia lsblk lub fdisk -l, aby znaleźć nazwę urządzenia (np. /dev/sdb).
    Wyłącz buforowanie:
    bash

sudo hdparm -W 0 /dev/sdX

Gdzie /dev/sdX to twoje urządzenie USB.

2. Reguła udev (trwałe dla wszystkich USB)
Aby automatycznie wyłączać buforowanie przy podłączaniu jakiegokolwiek dysku USB, utwórz regułę udev.

    Utwórz plik reguły:
    bash

sudo nano /etc/udev/rules.d/99-usb-sync.rules

Wklej poniższą treść (wymaga zainstalowanego hdparm):
udev

ACTION=="add|change", KERNEL=="sd[a-z]", ENV{ID_USB_TYPE}=="disk", RUN+="/usr/bin/hdparm -W 0 /dev/%k"

Reguła ta sprawia, że po podłączeniu urządzenia typu "disk" przez USB, buforowanie jest automatycznie wyłączane.
Przeładuj reguły:
bash

sudo udevadm control --reload-rules

 

3. Montowanie z opcją sync (trwałe dla konkretnego nośnika)
Możesz zamontować pamięć USB z opcją sync, która wymusza synchroniczny zapis (brak buforowania).

    Przykład montowania:
    bash

sudo mount -o sync /dev/sdX1 /mnt/usb

Alternatywa flush: Użycie opcji flush zamiast sync w pliku /etc/fstab wymusza zapisanie danych, gdy urządzenie przechodzi w stan bezczynności.

4. Wyłączenie uśpienia USB (jeśli problemem jest zrywanie połączenia)
Jeśli "buforowanie" powoduje błędy przy wybudzaniu dysku, można wyłączyć usypianie USB:
bash

sudo modprobe usbcore autosuspend=-1

Aby było to trwałe, dodaj usbcore.autosuspend=-1 do parametrów startowych jądra w /etc/default/grub.
Podsumowanie
Dla większości użytkowników najbezpieczniejszym sposobem na uniknięcie utraty danych jest używanie polecenia sync w terminalu przed fizycznym odłączeniem dysku, co wymusza zapisanie buforowanych danych.

Tytuł: Odp: Pamięci USB (zapis)
Wiadomość wysłana przez: Bercik w Luty 10, 2026, 05:33:43 PM
Dzięki @linux4ever, też poszperałem trochę i wynik mam taki:
ACTION=="add", SUBSYSTEMS=="usb", ENV{ID_FS_USAGE}=="filesystem", ENV{UDISKS_MOUNT_OPTIONS}="sync"
Wtedy nie tykam dysków, tylko pamięci USB...
W teorii powinno działać i na malutkich plikach działa, zobaczymy jak na większych :)