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.
mv
musiałyby współpracować, mieszając warstwy abstrakcji.