Przenoszenie pliku między dwoma dyskami na jednym dysku SSD - czy zostanie on skopiowany?

18

Podczas przenoszenia pliku na jednym dysku plik nie jest kopiowany i usuwany. Tabela odnosząca się do plików została właśnie zaktualizowana. I o ile wiem, nie dotyczy to 2 dysków na dysku twardym. Ale dyski SSD są różne, nie ma fizycznej przestrzeni dedykowanej dla każdego dysku. ( źródło )

Moje pytanie brzmi: co się dzieje, gdy plik jest przenoszony z jednego dysku na drugi na tym samym dysku SSD, czy bajty są kopiowane, a oryginał usuwany, czy też niektóre tabele są aktualizowane, tym samym zmniejszając dysk SSD?

Jest już duplikat pytanie tutaj . Ale obie odpowiedzi twierdzą:

każda partycja będzie miała dla siebie swój fizyczny obszar dysku

i

Partycjonowanie dysku twardego faktycznie określa fizyczne regiony dla każdej partycji. [i w komentarzu:] SSD wciąż jest dyskiem twardym, po prostu nie ma dysku.

O ile wiem, to źle. Zobacz tutaj .

Czy więc ktoś, kto wie więcej o dyskach SSD, powie mi, czy mimo swojej pomyłki mają rację?

ispiro
źródło
14
Przyjęta odpowiedź jest słuszna: każda partycja ma swój własny, niezależny system plików. Każdy system plików sam decyduje, w jaki sposób wykorzystuje przypisane mu bloki. Aby zrobić to, co proponujesz, oprogramowanie układowe SSD, systemy plików i narzędzia użytkownika, takie jak Linux, mvmusiałyby współpracować, mieszając warstwy abstrakcji.
Kamil Maciorowski
2
@Kamil: Podejrzewam, że gdyby system operacyjny to zaimplementował, mvmusiałby zrobić mniej niż obecnie. (Oznacza to, że system operacyjny musiałby tylko upewnić się, że zmiana nazwy systemu plików () zmieni się, a nie
awaria,
16
„2 dyski na [dysku SSD / HDD]” - Myślę, że masz na myśli 2 systemy plików lub 2 partycje na jednym dysku SSD / HDD. Pamiętaj, że ostatnim „D” w obu akronimach jest „Dysk”, więc mówisz 2 dyski na 1 dysku, co nie ma sensu.
JoL
1
Weźmy na przykład okno dialogowe Zarządzanie dyskami. Mówi o Change Drive Letter and Pathsodwołaniu do partycji / woluminu.
ispiro
4
@ispiro Czy to w systemie Windows? Wydaje się to okropnym sposobem na zamieszanie użytkowników. Mogę tylko zgadywać, że wymyślili termin „litera dysku”, zanim partycje dysku zostały zaimplementowane, a następnie ostatecznie reprezentowali partycje dysku jako samodzielne „dyski”. Teraz możesz mieć wiele „dysków” systemu Windows reprezentujących partycje jednego dysku sprzętowego ...
JoL

Odpowiedzi:

38

O ile wiem, to źle

Cytowany opis jest w połowie poprawny, w połowie błędny. Ale jest to również w połowie niewłaściwe dla dysków twardych.

Partycjonowanie dysku wyznacza regiony logiczne dla każdej partycji. System operacyjny w ogóle nie przejmuje się fizycznymi lokalizacjami - po prostu prosi dysk o „odczytanie bloku logicznego # 31415926”, a sam dysk decyduje, gdzie znajdują się dane. Działa to w ten sam sposób dla pamięci magnetycznej i flash.

W rzeczywistości jest taki sam jak w przypadku dysków twardych z ostatnich 20–25 lat: chociaż wczesne systemy operacyjne korzystały z fizycznych lokalizacji cylindra / głowicy / sektora, dawno już minęły. Nie wiesz dokładnie, na którym talerzu jest przechowywany LBA # 1234. Dyski HD nawet automatycznie odwzorowują uszkodzone sektory fizyczne, więc ten sam LBA można nagle odczytać z zupełnie innego obszaru fizycznego - tak jak w przypadku dysków SSD.

Tak więc zarówno w przypadku dysków HDD, jak i SSD, system operacyjny ma po prostu szereg LBA (np. 0–999999) do odczytu i zapisu danych. Partycjonowanie ma na celu przydzielenie w nim podzakresów - np. Partycja A otrzymuje 10–499999, partycja B otrzymuje 500000–999999. Każda partycja ma niezależny system plików, a systemy plików wewnątrz każdej partycji nie mogą odwoływać się do danych poza nią - nie mogą przekraczać granic partycji. (Na przykład partycja A nie może mieć pliku, którego dane są przechowywane w sektorze # 600000).

W rezultacie wszystkie pliki przenoszone z jednego do drugiego muszą zostać w całości skopiowane.

(To powiedziawszy, teoretycznie system operacyjny może być w stanie poprosić sam dysk o zduplikowanie danych z jednego obszaru do drugiego (np. „Skopiuj LBA # 1234 do # 567890”), bez konieczności kopiowania go do pamięci głównej, a następnie z powrotem, i oczywiście całkowicie ominąłoby to granice partycji. Mogłoby to na przykład wykorzystać „warstwę translacji flash” na dysku SSD. Ale o ile wiem, w praktyce nie jest to zrobione).

użytkownik1686
źródło
Zakładam, że masz rację. Jednak należy zauważyć, że nie ma innej opcji. Dysk może zdecydować, że sektor nr 001 na dysku nr 1 przełączy się teraz z sektorem nr 123 na dysku nr 2 (tj. Sektor nr 001 na dysku nr 1 będzie teraz odnosił się do danych fizycznych, które wcześniej były nazywane sektorem nr 123 w dysk nr 2), tym samym przenosząc plik bez konieczności kopiowania bajtów. Zatem przeniesienie TB danych może w zasadzie być natychmiastowe.
ispiro
15
Dysk nie wie o plikach lub systemach plików i dlatego nie może sam podejmować takich decyzji. Aby tak się stało, musi otrzymać żądanie od systemu operacyjnego. Jak już wspomniałem w ostatnim akapicie, jest to z technicznego punktu widzenia możliwe, ale systemy operacyjne zwykle nie przejmują się tym w przypadku kopii między różnymi systemami plików i wątpię, aby robiły to również w przypadku kopii tego samego systemu plików (częściej dzieje się to na poziomie FS).
user1686,
6
Niektóre dyski SSD implementują usuwanie duplikatów na poziomie bloków. Np. Sandforce ( en.wikipedia.org/wiki/SandForce#Technology ) był jednym z pierwszych, którzy to wdrożyli, a ich kontrolery trafiły do ​​produktów wielu producentów dysków SSD. Kontrolery Sandforce miały współczynnik „wzmocnienia zapisu” mniejszy niż jeden - co oznacza, że ​​zapisali mniej danych do pamięci flash niż to, co system operacyjny przesłał na dysk. Dla porównania dyski SSD mają na ogół współczynnik wzmacniacza zapisu większy niż jeden.
hojusaram
2
@hojusaram: To prawda, ale nadal jest to deduplikacja post-factum - redukuje zapisywanie w pamięci flash, ale dane są nadal odczytywane, kopiowane z dysku do pamięci systemu operacyjnego, a następnie z powrotem na kontroler dysku. Co oznacza ispiro, myślę, że jest to odpowiednik SSD „reflink” lub „copy on write” (np. Cp --reflink), który system operacyjny może wyraźnie poprosić dysk o wykonanie samodzielnie.
user1686,
1
Byłoby interesujące dowiedzieć się, w jaki sposób APFS sobie z tym radzi, ponieważ granice partycji nie są już ustalone, można je modyfikować bez interwencji użytkownika.
Tetsujin
9

To, co dzieje się, gdy dane są zapisywane na dysku SSD, jest warte kilku artykułów (dobre podsumowanie tutaj ), ponieważ jest bardzo skomplikowane i zależy od podstawowej technologii. Krótko mówiąc, dyski SSD ogólnie nie mogą zapisywać zerowych bitów w pamięci. Zamiast tego muszą wyzerować (skasować) całą sekcję pamięci, a następnie mogą przechowywać dane po prostu zapisując te do niej. Zazwyczaj w dzisiejszych czasach piszą bloki 512 bajtów, ale usuwają stronę 8 bloków, czyli 4096. To, a także fakt, że każdy cykl zapisu / kasowania powoduje pewne fizyczne zużycie pamięci i pamięć ostatecznie się zużywa, sprawia, że ​​dyski SSD są bardzo różne niż wirowanie magnetycznych dysków twardych.

Poza tym dyski SATA (i dyski AFAIK SAS) nie implementują natywnego polecenia kopiowania danych z jednego sektora do drugiego. (Lub przynajmniej nic w specyfikacji SATA lub SAS tego nie wymaga, więc system operacyjny nie może liczyć na dostępność takiego polecenia.) Tak więc kopiowanie pliku na partycję będzie wymagało odczytu danych z jednego sektora napędu do pamięci hosta, a następnie zapisu wrócił na dysk w innym sektorze.

Wynika to z faktu, że jeśli chodzi o system operacyjny, dysk jest zestawem numerowanych sektorów logicznych, a wszystko, co może zrobić, to czytać z sektorów i zapisywać do sektorów. System operacyjny nie może nakazać napędowi ponownego mapowania sektorów.

Ponadto system plików (HFS +, NTFS, ext3 itd.) To zestaw struktur danych, które narzucają porządek zestawowi bloków logicznych. Te struktury danych implementują „pliki”, „nazwy plików”, „katalogi”, „uprawnienia” itd. Tak, więc, kiedy przenosisz plik z jednego katalogu do drugiego, nie jest on kopiowany; aktualizowane są tylko dane systemu plików wskazujące katalog, w którym znajduje się plik.

Koncepcja podziału jest to, że jest zbiorem sektorów logicznych na dysku deklarowanym przez jednego systemu plików. Następstwem tego jest to, że system plików nie może uzyskać dostępu do sektorów poza swoją partycją. W dużej mierze jest to funkcja bezpieczeństwa, ale wynika to również z faktu, że struktury danych systemu plików są zbudowane wokół rozliczania każdego sektora dysku będącego własnością systemu plików i dodawanie lub usuwanie sektorów nie jest trywialne do tych struktur. Dlatego musisz uruchomić specjalne procedury, aby dostosować rozmiar partycji, a także dlaczego systemy plików nalegają na uruchamianie na ciągłym zestawie sektorów.

Dlatego implementacja kopii pliku jest niepraktyczna i niebezpieczna jako przeniesienie sektorów z jednego systemu plików do drugiego. Na wirującym napędzie magnetycznym byłby to również koszmar wydajności, ponieważ chociaż napęd będzie robił wyjątki dla złych sektorów, ogólnie zapewnia, że ​​sektory są fizycznie umiejscowione w taki sposób, aby zoptymalizować prędkość odczytu i zapisu kolejno numerowanych sektory.

Ponadto 2 systemy plików mogą nie przechowywać danych plików w ten sam sposób na dysku, co oznacza, że ​​zamiana sektorów nie działałaby, nawet gdyby była praktyczna. Nawet jeśli są to dokładnie te same typy systemów plików, powiedzmy NTFS, jeden może używać szyfrowania lub kompresji, a drugi nie, lub oba mogą szyfrować dane, ale z różnymi kluczami. Nie jest wymagane, aby dane w pliku były dokładnie przechowywane na dysku, wszystko, co musi być zapisane, to odwracalna transformacja danych, aby system plików mógł uzyskać dane z pliku, robiąc coś z dane na dysku. Tak więc, chyba że oba systemy plików używają dokładnie tej samej transformacji, zwykła zamiana sektorów nie osiągnąłaby celu przeniesienia danych pliku.

Z tych wszystkich powodów twórcy systemów operacyjnych i twórców systemów plików po prostu pracują zbyt dużo, aby wdrożyć funkcję optymalizującą ruchy między partycjami na dyski SSD. Zatem każdy ruch między partycjami będzie odczytem i zapisem.

Wewnątrz dysku SSD jest nieco inna historia. Chociaż system operacyjny nie powiedział napędowi, że kopiuje dane z jednego miejsca do drugiego, zapisy na dyskach SSD są tak drogie (i skomplikowane), że kontrolery SSD wykonują wiele pracy, aby zminimalizować zapisy. Niektóre dyski SSD posuwają się tak daleko, że próbują wykryć, kiedy sektor zapisywany w pamięci pasuje do sektora już zapisanego, i oznaczyć ten fizyczny fragment pamięci jako mapujący teraz na 2 różne logiczne sektory zamiast kopiować go, wykonując na poziomie dysku wewnętrznego co System operacyjny nie mógł.

Ale nie licz na to.

Old Pro
źródło
1
Czy twój ostatni akapit nie sugeruje, że system plików musi być taki sam? Zakładam, że dysk SSD nie wie, który system plików działa na górze. Jeśli na przykład jedna partycja używa kompresji, a druga nie, kopia dysku SSD może uszkodzić plik.
blablabla
@blablabla Ostatni akapit zakładał, że oba systemy plików przechowują rzeczywistą zawartość pliku na dysku bez zmian. Wyjaśniłem to teraz.
Old Pro