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ę?
źródło
mv
musiałyby współpracować, mieszając warstwy abstrakcji.mv
musiałby zrobić mniej niż obecnie. (Oznacza to, że system operacyjny musiałby tylko upewnić się, że zmiana nazwy systemu plików () zmieni się, a nieChange Drive Letter and Paths
odwołaniu do partycji / woluminu.Odpowiedzi:
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).
źródło
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.
źródło