Jak sprawdzić, czy wszystkie zapisy na moim dysku twardym są wyrównane do jego sektorów 4k?

9

Używam Linuksa z 4 dyskami twardymi, które używają sektorów 4k. Między moim systemem plików a surowymi urządzeniami istnieje kilka warstw: Dyski> Linux Raid 5> dm-crypt> LVM.

Każdy zasób, który znalazłem, wyjaśniał, jak skonfigurować każdą warstwę, aby zapewnić, że zapisy na tej warstwie zostaną wyrównane do granicy sektora 4k. Nie znalazłem jednak niczego, co wyjaśniałoby, jak sprawdzić, czy zapisy dokonane na dyskach twardych faktycznie mają miejsce na granicy 4k.

Nie jestem zainteresowany ponownym sprawdzaniem mojego zestawu w celu użycia logiki w celu ustalenia, czy jest on poprawnie wyrównany. Chcę zbadać, co się właściwie dzieje, gdy zapisy są zapisywane na dysku.

Jak mogę zalogować lub wyświetlić adresy i rozmiar zapisów dokonywanych na moich dyskach twardych, aby sprawdzić, czy są one prawidłowo wyrównane?

Brian Pellin
źródło

Odpowiedzi:

2

Zadałem sobie to samo pytanie jakiś czas temu i po prostu wykonałem następujące czynności:

Napisałem z powłoką kilka razy raczej nietypowy ciąg znaków do pliku (coś takiego jak „WackaWacka”). Następnie po prostu przeszukałem zrzut heksadecymalny (użyty od ) faktycznej zawartości dysku i sprawdziłem, czy zachowało się pierwsze wystąpienie ciągu dokładnie na początku bloku 4k.

Wskazówka: nie używaj edytora - może tworzyć pliki tymczasowe, o których nie wiesz, które mogą również zawierać ciągi. Zrób to w ten sposób:

 $ for i in 1 2 3 4 5 ...
 >  do
 >   echo "WackaWacka!"
 >  done > mytestfile

Tak więc .sh_history może zawierać szukany ciąg, ale nie 5 razy z rzędu ;-)

A następnie po prostu wyszukaj:

 # sync
 # od -c /dev/sda | grep 'W   a   c   k   a'

Cóż, najlepiej to zrobić na raczej pustym dysku, aby uniknąć przeszukiwania gigabajtów danych ;-)

ktf
źródło
1
Ponieważ dm-crypt jest jedną z warstw na moim stosie, to rozwiązanie nie jest wystarczające, ponieważ te znaki nie zostaną zapisane na dysku.
Brian Pellin,
To źle. Jedynym innym rozwiązaniem, o którym mogłem pomyśleć, jest zmiana jednego bloku 4k w pliku i sprawdzenie, czy zmieniła się tylko zawartość jednego bloku fizycznego na dysku (lub jeśli dotyczy to dwóch kolejnych bloków) - i to zadziała tylko wtedy, gdy dane nie zostaną skompresowane przez warstwę szyfrowania. Niemniej jednak trzeba wiedzieć, w którym blok dysku plik jest przechowywany i szukając jakichkolwiek zmian może być trudne na dużych dyskach.
ktf
2

Napisz blok 4k i obserwuj, ile danych jest odczytywanych / zapisywanych iostat(kolumny „Blk_read” „Blk_wrtn”). Jeśli dane nie zostaną wyrównane, zapis rozpocznie wyzwalanie odczytów jako pierwszy i wyzwoli ponad 4k zapisów.

Trzeba jednak uważać, aby nie mierzyć żadnych aktualizacji metadanych ... lub po prostu zagłuszyć je, wykonując tysiące zapisów w rozdzielczości 4k .... Więc upewnij się, że nic innego nie skanuje dysków ani nie przechowuje otwartych plików (myślę, że lsofbyłoby wystarczy?), a następnie otwórz nowy plik, poczekaj, uruchom iostat, zapisz 4k do pliku, zsynchronizuj zapis (lub po prostu poczekaj chwilę?), a następnie sprawdź iostatponownie.

Wydaje mi się to rozsądnym wynikiem:

iostat  -d /dev/hdb3
dd if=/dev/urandom of=/mount/path/ofhdb3/tmptest bs=4k count=10000 conv=fdatasync
iostat  -d /dev/hdb3

Strona podręcznika notatki iostattwierdzi, że ma raport w 512 bajtowych blokach, i widzę, że napisano nieco ponad 80000 dodatkowych bloków i nie odczytano żadnych bloków. Jeśli wyrównanie jest wyłączone, zobaczysz podobną liczbę odczytów (ponieważ napisanie źle wyrównanego 4k wymaga odczytania dwóch dotkniętych bloków, zmutowania ich i odpisania). W rzeczywistości jedynym powodem, dla którego wyrównanie jest ważne, jest unikanie takich odczytów (więc tak naprawdę tego chcesz szukać: czy wyzwalacz obciążenia zapisu czyta?)

PT
źródło
Czy wiesz, czy iostat zgłasza liczbę odczytów / zapisów dokonanych przez system operacyjny na urządzeniu blokowym, czy też liczba ta jest oparta na napędzie raportującym, ile bloków odczytało i napisało?
Brian Pellin
Podejrzewam, że jest to abstrakcja urządzenia blokowego systemu operacyjnego, nie bezpośrednio z dysku, ale nie jestem tego pewien. Nie jestem też pewien, czy będzie to „powyżej” czy „poniżej” warstwy dm-crypt.
PT