Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Weryfikacja danych po duplikacji pendrive

wwpiotr 19 Lip 2011 09:50 1118 7
  • #1 19 Lip 2011 09:50
    wwpiotr
    Poziom 11  

    Witam,

    Szukam sposobu na weryfikację danych (bit po bicie) po masowej duplikacji pendrive.

    Ze sprawdzeniem pojedynczo nie ma większego problemu. Ja natomiast szukam rozwiązania jak porównać pendrive lub obraz "matkę" z 10-cioma nagranymi pendrive podłączonymi przez huba USB.

    Czy ma ktoś pomysł jak można by to zrobić? szukam już od dłuższego czasu takiego rozwiązania i nic nie mogę znaleźć.

    0 7
  • #2 19 Lip 2011 17:54
    Sam Sung
    Poziom 31  

    Jeśli chodzi o gotowe rozwiązanie, to niestety też nie znam.
    Natomiast napisać coś takiego w C pod Linuxa to żaden problem: multipleksowany odczyt n plików "naraz" (open/select/read) i potem porównywanie pierwszego bloku z każdym z pozostałych (memcmp).
    A można i bez multipleksacji, w pętli czytać po kolei po np. 4KB z każdego - niewykluczone, że systemowe buforowanie + read-ahead zapewni prawie taką samą wydajność, a roboty jeszcze mniej. To nawet nie musi być w C tylko np. python.

    0
  • #3 19 Lip 2011 18:25
    Dżyszla
    Poziom 42  

    Ale koledze chyba chodzi o porównanie na poziomie fizycznego dostępu, a nie logicznego... Myślę, że można potraktować tak samo, jak dyski i w ten sam sposób dostać się do każdego adresu pamięci. Ale więcej też nic nie powiem. Proponuję poszukać pod hasłem: niskopoziomowy dostęp do dysku.

    0
  • #4 19 Lip 2011 18:57
    Sam Sung
    Poziom 31  

    Nie bardzo rozumiem, o co chodzi z dostępem "fizycznym"; dostęp programowy jest zawsze przez jakieś API. Ja miałem na myśli porównywanie "plików" /dev/sdb, /dev/sdc itd., jest to dostęp przez linuxowy sterownik USB poprzez emulację SCSI. Jakiego rodzaju inny dostęp jest możliwy do urządzeń USB Mass Storage (który dawałby inne wyniki)?

    0
  • #5 19 Lip 2011 19:51
    Dżyszla
    Poziom 42  

    Sam Sung - z racji tego, że moja znajomość linuxa jest słaba w tym zakresie, to może nie będziemy tero rozwijać i poczekamy na autora. Po krótce tylko przedstawię:
    Dostęp do struktury logicznej dysku to po prostu czytanie znajdujących się tam plików i katalogów składowanych na jakimś systemie plików (to jest nieistotne).
    Dostęp do fizycznych danych na dysku to dostęp do poszczególnych bajtów - tutaj nie znamy ani systemu plików, ani podziału na partycje, ani tego, co się znajduje na dysku, gdyż wszystko jest tylko ciągiem bajtów.

    0
  • #6 20 Lip 2011 19:41
    wwpiotr
    Poziom 11  

    Z tego co piszecie wystarczy mi weryfikacja warstwy logicznej.

    Główna sprawa to to żeby proces był automatyczny dla wszystkich 10 pendrive podłączonych do hub-a.

    Jeżeli można to zrobić łatwo (porównać zawartość dysków) pod linuxem proszę o łopatologiczną instrukcję :-)

    0
  • #7 20 Lip 2011 19:56
    Dżyszla
    Poziom 42  

    Jeśli tylko tyle, to jak napisał kolega -> skanujesz wzorcowy pendrive w poszukiwaniu plików i katalogów (rekursywnie odwiedzając każdy z nich). Po napotkaniu pliku odszukujesz go na pozostałych - jeśli go nie ma gdzieś - już masz błąd. Jeśli znajdujesz - otwierasz wszystkie, wczytujesz do pamięci blok danych i porównujesz po kolei wszystkie ze wzorcem. Ilość pendrivów kompletnie nie ma znaczenia - po prostu zwiększa się liczba porównań. Byleby tylko system obsłużył przypisanie urządzenia (czy jak tam się to w linuxie zwie) do każdego z nich.

    0
  • #8 21 Lip 2011 23:51
    Sam Sung
    Poziom 31  

    No ja właśnie opisałem w swoim pierwszym komentarzu porównywanie całych pendrive-ów jako urządzeń blokowych ("plików", bo w linuksie wszystko jest plikiem - dzięki temu jest to łatwe) - czyli na poziomie "fizycznego" dostępu w terminologii kolegi Dżyszli.
    Tylko ta metoda nie zawsze się nadaje. Bo jeśli kopiowanie leciało zwyczajnie katalogami i plikami, to może się okazać, że zawartość urządzeń będzie inna mimo że sama struktura plików i katalogów jest skopiowana poprawnie. Różnice mogą wystąpić w metadanych filesystemu, np. będą różne daty ostatniego dostępu do pliku. W takim wypadku ta prosta metoda odpada i pozostaje niestety porównywanie struktury katalogów tak jak to opisał Dżyszla jeden post wyżej. I jak słusze napisał, w takim wypadku wszystkie porównywane pendrive-y muszą być zamontowane. A program porównujący musi znać katalogi montowania każdego z nich.
    Gdyby pendrive-y miały identyczny rozmiar, to możnaby je kopiować 1:1 bez montowania i potem łatwo porównywać blok po bloku. Tu z kolei trzeba znać nazwy urządzeń pendrive-ów (typowo wszystkie /dev/sd* oprócz twardego dysku /dev/sda). W sumie jeśli ta metoda miałaby zdać ezgamin, to alternatywnie można pojechać diff-em po kolei pendrive 1 z pendrive X, gdzie X jest od 2 do N. Będzie to trwało około N razy dłużej (bo pendrive 1 będzie czytany N razy, a tak każdy by był czytany raz), ale nie trzeba pisać żadego programu ;) Można też skopiować obraz do porównania z pendrive 1 na dysk twardy, będzie szybciej.

    0