Dlaczego liczba plików jest inna?
Najwyraźniej skupiasz się wyłącznie na aspekcie „skopiuj dane” „skopiuj plik”. Plik to coś więcej niż tylko dane; jest to jednostka w systemie plików . Plik ma nazwę, atrybuty i uprawnienia. Wszystkie te dodatkowe informacje o pliku muszą zostać powielone wraz z danymi podczas „kopiowania pliku”. Istnieje znaczna ilość operacji we / wy na dysku, aby wykonać ten narzut systemu plików.
Procedura kopiowania jednego (1) pliku w ogólnym systemie plików wyglądałaby następująco:
- Znajdź plik źródłowy w systemie plików. (za)
- Odczytaj z dysku pozycję katalogu dla pliku źródłowego.
- Sprawdź uprawnienia do odczytu.
- Znajdź plik docelowy w systemie plików. (b)
- Sprawdź uprawnienia do zapisu w katalogu docelowym.
- W razie potrzeby rozwiń katalog, aby uwzględnić nowy plik. (do)
- Zaktualizuj katalog na dysku. (c1)
- Znajdź bezpłatne bloki, przydziel je i ponownie zaktualizuj tabelę. (re)
- Odczytaj dane pliku i skopiuj do pliku docelowego (tj. Skopiuj „plik”).
- Zaktualizuj pozycję katalogu dla nowego pliku za pomocą (rozmiar i czas). (mi)
- Zaktualizuj czas dostępu do katalogu źródłowego. (fa)
(a) Oznacza to przynajmniej przeszukiwanie bieżącego katalogu. Lub ścieżka może zaczynać się w katalogu głównym systemu plików i należy przejść przez kilka poziomów katalogów.
(b) Oznacza to przynajmniej przeszukiwanie bieżącego katalogu. Lub ścieżka może zaczynać się w katalogu głównym systemu plików i należy przejść przez kilka poziomów katalogów. Jeśli plik docelowy już istnieje, określ sposób kontynuowania lub przerywania kopiowania. Jeśli plik docelowy nie istnieje, należy utworzyć nowy wpis w katalogu, a być może wiąże się to z rozszerzeniem katalogu (tj. Narzutem alokacji bloków plików (inaczej klaster) ).
(c) Jeśli katalog musi zostać rozszerzony, przydziel nowy blok, znajdując wolny blok, zmodyfikuj tabelę alokacji za pomocą nowego przydziału, a następnie wypisz bloki na dysk. Ponieważ większość systemów plików utrzymuje wiele kopii tabeli alokacji, oznacza to, że wiele zapisów na dysk.
(c1) Po zlokalizowaniu katalogu docelowego odczytaj blok katalogu z dysku, zmodyfikuj go za pomocą nowego wpisu katalogu dla skopiowanego pliku, a następnie wypisz blok na dysk.
(d) Aby skopiować plik, alokuj bloki, znajdując wolne bloki, zmodyfikuj tabelę alokacji za pomocą nowych alokacji, a następnie wypisz bloki na dysk. Ponieważ większość systemów plików utrzymuje wiele kopii tabeli alokacji, oznacza to, że wiele zapisów na dysk. Aby zachować integralność danych, system plików nie może próbować łączyć (opóźniać i scalać) operacji zapisu na dysku dla katalogów i tabel alokacji, ale raczej wykonywać operacje zapisu natychmiast po utworzeniu nowych plików i przydzieleniu bloku.
(e) Po zakończeniu kopiowania danych zaktualizuj nowy wpis katalogu dla skopiowanego pliku, podając odpowiednią długość pliku i znaczniki czasu, a następnie wypisz blok katalogu na dysk.
(f) Zaktualizuj pozycję katalogu źródłowego nowym znacznikiem czasu „dostępu”, a następnie zapisz blok katalogu na dysku.
Więc zamiast tylko jednego pliku, pytanie brzmi: czy wykonanie tych wszystkich czynności dla tysiąca plików może wydłużyć czas potrzebny na skopiowanie części danych? Jeśli skopiujesz tylko jeden plik o rozmiarze 24 MB, będziesz mieć coś do porównania z czasem kopiowania tysiąca plików.
Podczas tworzenia kopii zapasowej systemu plików rzadko stosuje się kopiowanie pojedynczych plików do innego systemu plików na dysku lub partycji, ponieważ, jak odkryłeś, jest to raczej powolny proces. Szybszą metodą jest utworzenie i zapisanie pojedynczego pliku archiwum , który przechowuje pozycje katalogu źródłowego i zawartość pliku w specjalnym formacie; programy do tworzenia kopii zapasowych i komenda * nix „tar” mogą wyświetlać taki plik archiwum. (Uwaga: „tar” obsługuje tylko pliki archiwów i nie używa kompresji, takiej jak narzędzia do archiwizacji i kompresji.) Najszybszą metodą tworzenia kopii zapasowych jest zapis do urządzenia blokowego (a nie systemu plików na urządzeniu), tak aby źródłowy system plików był zignorowany (traktowany jako więcej danych), można wykonać kopię obrazu urządzenia źródłowego blok po bloku.