Przenosimy Ubuntu na dysk SSD
26.08.2015 | aktual.: 27.08.2015 09:12
No i stało się... Przyszło mojej skromnej osobie zderzyć się z odrobiną luksusu: stałem się posiadaczem pięknego, a co najważniejsze, szybkiego dysku jakim jest SSD. Teraz mój Intel NUC, którego zdobyłem prowadząc tego jakże monotematycznego bloga, może zostać uzbrojony w ten, jak bardzo radujący me serce, kawałek nowoczesnej technologii ;) Dobra - nie owijając dłużej w bawełnę przejdźmy do konkretów.
Rozpoznanie sytuacji
Biorąc pod uwagę fakt, że jedynym systemem jakiego używam jest Ubuntu, więc rozpatrzę poniżej, jak przenieść ten system ze starego dysku HDD na nowy SSD. Myślę, że mogą z mojego doświadczenia skorzystać tu nie tylko użytkownicy Ubuntu, ale także innych systemów działających pod kontrolą linuksa i zaoszczędzić nieco czasu. Od razu zgaduję, patrząc na moją specyficzną sytuację, gdyż jestem użytkownikiem mało wymagającym, że większość użytkowników po zakupie swojego upragnionego dysku SSD, w przeciwieństwie do mnie, będzie borykać się z problemem wolnego miejsca w swoim nowym magazynie na dane...
Jako, że do tej pory działałem na dysku HDD o pojemności 128GB, a stałem się posiadaczem dysku SSD o pojemności 256GB, to problem z miejscem na dysku podczas migracji mnie nie dotyczył. Znając jednak realia, przeważnie ze względu na cenę, kupujemy dyski SSD dużo mniejszej pojemności, niż te które aktualnie mamy w komputerze zainstalowane - tak na marginesie, zawsze zastanawiało mnie, co tak ludzie (w dobie powszechnego dostępu do internetu) trzymają skrzętnie na tych swoich dyskach - ale mniejsza o to...
W sytuacji (jak mojej), kiedy przechodzimy z mniejszego dysku na większy, nie potrzeba robić żadnych dodatkowych zabiegów. Jeżeli jednak jest odwrotnie (przeważnie), to najlepiej wszystkie zgromadzone multimedia (zdjęcia, filmy, muzykę), dokumenty, prezentacje, przenieść na całkiem osobne urządzenie magazynujące. Zalety z takiego zabiegu będą dwie: pierwsza - pozwoli nam na szybkie przeniesienie systemu na nasz mniejszy, ale szybszy dysk SSD, druga - w końcu zostanie wykonany backup :) Jeśli nie dysponujemy dodatkową, dostatecznie dużą przestrzenią magazynującą, nie ma się czym martwić - skomplikuje to jedynie proces kopiowania danych ze starego dysku na nowy. Trzeba będzie podczas kopiowania pomijać katalogi z naszymi zgromadzonymi danymi: filmami, zdjęciami, dokumentami, itp. Po udanej migracji przy tak zapełnionym dysku i tak z pewnością podepniemy nasz stary dysk jako drugi z przeznaczeniem "magazynu na dane".
Przygotowanie do migracji
Tutaj zakładam, że punkt pierwszy mamy omówiony, czyli pojemność dysku SSD pozwoli przyjąć dane, które zamierzamy na niego przenieść. Po drugie, system mamy zaktualizowany, działa stabilnie, a my jesteśmy zadowoleni z jego działania i jesteśmy zbyt leniwi, żeby instalować na nowo wszystkie aplikacje i ponownie ustawiać tapetę i dopieszczać pliki konfiguracyjne. Wykonywanie migracji niesprawnego systemu mija się z celem - to nie poprawi sytuacji. W takim przypadku zalecam instalację systemu na nowym dysku od zera... Po trzecie, do wykonania migracji potrzebny nam będzie "LiveCD" Ubuntu, bądź to na płycie DVD, bądź w pamięci przenośnej USB, który to umożliwi nam wystartowanie z niego komputera.
Kiedy porządki z danymi mamy już zrobione, zabieramy się do tworzenia nośnika rozruchowego z Ubuntu: - pobieramy obraz ISO Ubuntu Desktop, w architekturze zgodnej z naszą aktualnie zainstalowaną, stąd: http://www.ubuntu.com/download/desktop - po pobraniu obrazu systemu uruchamiamy Kreator Nośnika Rozruchowego, wkładamy np. czysty pendrive, wskazujemy pobrany obraz ISO Ubuntu, następnie nośnik na który ma zostać nagrany i klikamy Utwórz nośnik rozruchowy.
Kiedy nośnik rozruchowy zostanie utworzony, możemy wyłączyć komputer i podpiąć nasz nowiutki dysk SSD do portu SATA, lub po wystartowaniu systemu z utworzonego wcześniej nośnika rozruchowego do portu USB przez przejściówkę jako drugi dysk w komputerze. Nie jest istotne, jak dysk podłączymy, ale chodzi o to, aby oba dyski były widziane w systemie uruchomionym z utworzonego wcześniej nośnika rozruchowego. Umożliwi nam to poprawne skopiowanie danych ze starego dysku HDD na nowy SSD z poziomu systemu "Live".
Przenosimy system na SSD
Kiedy wszystkie operacje powyżej powiodły się, powinniśmy mieć sytuację taką: - uruchomiony system Ubuntu Live z utworzonego nośnika rozruchowego - widoczne dyski HDD jako /dev/sda oraz drugi SSD jako /dev/sdb. Należy pamiętać, aby nie pomylić dysków i tego, jak one są widoczne w systemie (!), gdyż dalszy opis będzie prowadzony według takich założeń. Aby upewnić się, czy na pewno HDD jest widziany jako sda, a SDD jako sdb, najlepiej jest przejść do terminala i wydać polecenie:
sudo fdisk -l
Wynikiem polecenia powinna być lista dysków, dzięki której łatwo zorientujemy się, który dysk jest który.
Aby móc rozpocząć kopiowanie danych ze starego dysku na nowy, należy na nowym dysku SSD utworzyć partycje. Partycje najlepiej założyć takie, jakie są na obecnym dysku HDD. Zerknijmy zatem, jak wygląda sytuacja na dotychczas użytkowanym dysku: - naciskamy Alt+F2, - w wierszu poleceń wpisujemy [code=shell]sudo gparted[/code]
Uruchomi nam się program do partycjonowania dysków. Z poziomu programu gparted możemy podejrzeć strukturę partycji na obecnym dysku i analogiczne utworzyć je na nowym.
W mojej sytuacji na dysku znajdowały się trzy partycje: - /dev/sda1 z systemem plików fat32 (EDIT: uwaga Kaworu) w punkcie montowania /boot/efi o wielkości 512MiB z flagami boot oraz efi - /dev/sda2 jako ext4 w punkcie montowania / - /dev/sda3 jako linux-swap Zatem na nowym dysku (/dev/sdb) tworzę pierwszą partycję rozruchową efi (sdb1) o identycznej pojemności, jak na starym dysku (512MiB). Należy zwrócić uwagę przy tworzeniu partycji, aby były one wyrównane nie do cylindrów, tylko do megabajtów (ważne przy dyskach SSD!). Nadaję jej flagi boot i efi, jak w pierwowzorze. Drugą partycję (sdb2) tworzę z systemem plików ext4 na ile mi pojemność dysku SSD pozwala, zostawiając sobie trochę miejsca na partycję swap, po czym zapełniam dysk do końca partycją linux-swap (sdb3) cały czas pamiętając o wyrównaniu do MiB. Zachowuję zmiany - dysk SSD jest przygotowany i mamy pewność, że partycje "przylegają" do dysku prawidłowo.
Oczywiście partycje na dysku można było przygotować wcześniej, ale robiąc to spod Ubuntu Live pomijamy jeden ewentualny reboot systemu w celu podłączenia dysku do portu SATA ;)
Kopiujemy dysk
Na pierwszy strzał (w moim przypadku) skopiujemy sobie małą partycję efi. Tak więc uruchamiamy terminal i tworzymy katalogi do których zamontujemy partycje: żródłową i docelową, a następnie skopiujemy zawartość partycji efi. W tym celu wpisujemy terminalu polecenia: - tworzymy katalog montowania partycji źródłowej: [code=shell]sudo mkdir /media/sda1[/code]
- montujemy partycję źródłową (efi na HDD): [code=shell]sudo mount /dev/sda1 /media/sda1[/code]
- tworzymy katalog montowania partycji docelowej: [code=shell]sudo mkdir /media/sdb1[/code]
- montujemy partycję docelową (efi na SDD): [code=shell]sudo mount /dev/sdb1 /media/sdb1[/code]
- kopiujemy dane (z efi na HDD do efi na SDD): [code=shell]sudo cp -ax -‑target-directory=/media/sdb1 /media/sda1/*[/code]
Zawartość pierwszej partycji mamy skopiowaną. Czas zabrać się za resztę, czyli (w moim przypadku) partycję z systemem oraz danymi. Czynności wykonujemy analogicznie, jak w przypadku pierwszej partycji: - tworzymy katalog montowania partycji źródłowej: [code=shell]sudo mkdir /media/sda2[/code]
- montujemy partycję źródłową: [code=shell]sudo mount /dev/sda2 /media/sda2[/code]
- tworzymy katalog montowania partycji docelowej: [code=shell]sudo mkdir /media/sdb2[/code]
- montujemy partycję docelową: [code=shell]sudo mount /dev/sdb2 /media/sdb2[/code]
- kopiujemy dane (z HDD do SDD): [code=shell]sudo cp -ax -‑target-directory=/media/sdb2 /media/sda2/*[/code]
Możemy zrobić sobie przerwę na kawę, albo dwie - w zależności, ile danych nagromadziliśmy i ile z nich chcemy przegrać. Tutaj Ci, których dane nie zmieszczą się na dysku SSD muszą się trochę pogimnastykować i kopiować po kolei katalogi z pominięciem tych, w których nagromadzili zbyt wiele filmów i zdjęć ;)
Po skopiowaniu systemu (i danych), aby system "wiedział" że ma nowe partycje, należy zmodyfikować plik /etc/fstab na naszym dysku SSD. W tym celu musimy kolejno wyświetlić unikatowe identyfikatory nowych partycji. wydajemy w konsoli kolejno polecenia:
blkid /dev/sdb1
blkid /dev/sdb2
blkid /dev/sdb3
Uruchamiamy edytor, w którym zmienimy zawartość pliku fstab:
sudo gedit /media/sdb1/etc/fstab
Po czym kopiujemy kolejno z wyników poleceń blkid 128‑bitowe wartości UUID (bez znaków ") i zastępujemy nimi stare, pamiętając który UUID dotyczy której partycji. Przykładowo mój fstab:
# /etc/fstab: static file system information. # # Use 'blkid' to print the universally unique identifier for a # device; this may be used with UUID= as a more robust way to name devices # that works even if disks are added and removed. See fstab(5). # # <file system><mount point> <type><options> <dump><pass> # / was on /dev/sda2 during installation UUID=4df57e47-d1da-4ab5-b77a-bd7d27f5a48d / ext4 errors=remount-ro,defaults,noatime,discard 0 1 # /boot/efi was on /dev/sda1 during installation UUID=62C6-9B83 /boot/efi vfat defaults,noatime,discard 0 1 # swap was on /dev/sda3 during installation UUID=85b766df-5e1b-4488-93f4-a34d1b92d1a4 none swap sw 0 0
Rozprawiamy się z Grubem
To nie wszystko, aby system mógł wystartować. Trzeba będzie poprawić program rozruchowy GRUB - ten nadal "nie wie", że mamy nowy dysk ;) W przypadku Ubuntu są na to dwa sposoby:
sudo -s
[numlist][item]Dla pisarzy (konsolowców):- przechodzimy na użytkownika root:
- ustawiamy nowy katalog root: [code=shell]chroot /media/sdb1[/code]
- (dla systemu x64 z efi) piszemy: [code=shell]grub-install -‑efi-directory=/boot/efi -‑target=x86_64-efi /dev/sdb[/code]
- następnie: [code=shell]update-grub[/code]
i gotowe... [/item][item] Dla klikaczy (potrzebne połączenie Ubuntu Live z internetem!): - przeklejamy do konsoli i uruchamiamy polecenie: [code=shell]sudo add‑apt-repository ppa:yannubuntu/boot-repair[/code]
- następnie analogicznie wklejamy to: [code=shell]sudo apt‑get update[/code]
- oraz to: [code=shell]sudo apt‑get install -y boot-repair && boot-repair[/code]
Uruchomi nam się program Boot Repair. Klikając w nim Recommended repair dokonamy naprawy programu rozruchowego GRUB. [/item][/numlist]
Czy to już koniec?
Na tym można by było zakończyć, ale jest jeszcze kila niuansów, na które każdy użytkownik dysku SSD powinien zwrócić uwagę...
Większość systemów operacyjnych zaprojektowana jest głównie do pracy z dyskami HDD i choć te współczesne wspierają nowe technologie, w tym także dyski SSD, to jeszcze niejedno można usprawnić i polepszyć. Tak też jest z obsługą dysków SSD przez współczesne systemy - będą działać, ale dobrze jest kilka rzeczy "podrasować" samemu, co może mieć wpływ nie tylko na żywotność samego dysku, ale także na jego wydajność.
Po wykonaniu migracji z dysku HDD na SSD według powyższego opisu, powinniśmy już móc cieszyć się działającą kopią systemu. Wystarczy tylko zamienić dyski miejscami w portach SATA, ewentualnie zostawić sam SSD. W zależności od konfiguracji zmienić ustawienia startowe w oprogramowaniu wbudowanym komputera i gotowe - system powinien wystartować i wszystkie jego ustawienia, zainstalowane aplikacje powinny pozostać bez zmian, tak jak to mieliśmy na starym poczciwym dysku HDD.
Biorąc jednak pod uwagę kilka różnic w użytkowaniu dysków HDD i SSD, warto jeszcze poświęcić kilka chwil na odpowiednią optymalizację pracy naszego nowego urządzenia. Głównym problemem w użytkowaniu dysku SSD jest jego trwałość - dyski te mają ograniczoną ilość cykli odczytu/zapisu. Producenci prześcigają się i stosują różne rozwiązania, aby wydłużyć trwałość swoich produktów i wraz z nowymi modelami dysków SSD jest to coraz mniejszy problem, ale jednak w mniejszym czy większym stopniu pozostaje. Jak spowodować, aby nasz system bez potrzeby nie sięgał tak często do dysku, wydłużając przez to jego żywotność, opiszę poniżej.
Optymalizacja Ubuntu do pracy z dyskiem SSD
TRIM
Większość dysków SSD wspiera komendę ATA_TRIM, którą system operacyjny informuje dysk, jakie dane z dysku zostały usunięte. Nie zamierzam się tu wdawać w szczegóły działania tej komendy, ani sposobu pracy dysku SSD (choć jest to bardzo ciekawe zagadnienie), należy tylko wiedzieć, że komenda ta potrafi prawie o połowę (w niektórych przypadkach) przyśpieszyć działanie naszego dysku, zmniejszając przy tym szybkość jego zużycia. Dobrze jest więc włączyć obsługę TRIM w naszym systemie operacyjnym, o ile nasz dysk SSD wspiera tą komendę. Jak to sprawdzić? Uruchamiamy terminal...
Wydajemy polecenie: [code=shell]sudo hdparm -I /dev/sda | grep TRIM[/code]
którego wynik powinien wyglądać mniej więcej tak: [code=shell]Data Set Management TRIM supported (limit 8 blocks)[/code]
W moim przypadku widać, że dysk wspiera TRIM i warto obsługę tej komendy włączyć. Włączenie obsługi TRIM na dyskach nie wspierających tej komendy może doprowadzić do utraty danych! Jak włączyć TRIM. Najprościej jest wyedytować plik /etc/fstab
sudo gedit /etc/fstab
i dopisać przy montowanej partycji "discard", co spowoduje ciągłą obsługę TRIM.
EDIT: (uwaga od mm3x) Należy pamiętać, że ciągła obsługa TRIM wiąże się z brakiem możliwości odzyskania przypadkowo usuniętych danych! Na niektórych dyskach SSD może także powodować spadek wydajności. Od Ubuntu 14.10 jest okresowo uruchamiana funkcja fstrim dla dysków wszystkich producentów wspierających polecenie ATA‑TRIM i nie zaleca się już raczej stosowania opcji montowania "discard". Jeśli jednak ktoś chciałby jej użyć, to poniżej instrukcja:
Dla przykładu przytoczę jedną z linii w moim pliku konfiguracyjnym fstab:
UUID=4df57e47-d1da-4ab5-b77a-bd7d27f5a48d / ext4 errors=remount-ro,defaults,noatime,discard 0 1
Pamiętać należy, że funkcja TRIM jest wspierana w linuksach począwszy od kernela 3.8 dla poszczególnych systemów plików (EDIT: uwaga Kaworu): Ext4, Btrfs, JFS, VFAT, XFS, F2FS. TRIM dla NTFS także jest wspierany, ale dopiero od wersji 2015.3.14 pakietu ntfs-3g. Używając flagi "discard" dla systemu plików ext3 partycji root, spowoduje że będzie ona tylko do odczytu - w takim przypadku należy się posiłkować okresowym TRIM (która nie działa dla systemu plików VFAT) dzięki fstrim - ale... to taka ciekawostka ;)
noatime
Kolejną flagą, którą możemy ograniczyć ilość zbędnych zapisów na dysku, jest flaga "noatime". W przeciwieństwie do flagi "relatime", (EDIT: uwaga Kaworu) system nie będzie modyfikował znacznika czasu pliku (znacznik czasu: czas zapisu, odczytu, modyfikacji pliku), kiedy jest on otwierany.
swappiness
Zapewne niejeden czytelnik zauważył, że pozostawiłem partycję swap. Tak, zrobiłem to celowo, choć wielu fachowców uważa, że nie powinno się używać pamięci wirtualnej na dysku SSD. Mój NUC wyposażony jest tylko w 4GB pamięci RAM, więc nie pozwolę sobie na taki luksus, żeby ze swapa całkowicie zrezygnować. Tak na marginesie (według mnie), to dysk jest od tego, aby pracować ;) więc pozostawiłem swapa, ale ograniczyłem systemowi dostęp do niego, aby nie sięgał do tej pamięci bez powodu. Jak to zrobić? Jedna komenda w terminalu załatwi sprawę, mianowicie modyfikacja parametru "swappiness":
sudo bash -c "echo 'vm.swappiness = 1' >> /etc/sysctl.conf"
Ustawiając vm.swappiness=0 możemy całkowicie wyłączyć obsługę pamięci wirtualnej.
Profile Sync Daemon
Jeśli często używamy przeglądarki i mamy swoją ulubioną (a zapewne taką mamy), to znajdzie się kolejny element, który pozwoli ograniczyć ilość odwołań do naszego dysku SSD. Profile Sync Daemon jest narzędziem, które przenosi profil przeglądarki do pamięci RAM, co powoduje zmniejszenie ilości zapisów na dysku (zbawienne dla dysków SSD) i zarazem podnosi wydajność pracy przeglądarki - użytkownicy tradycyjnych dysków HDD także mogą usprawnić tym narzędziem pracę swojej przeglądarki. Jak je zainstalować i skonfigurować? W terminalu wydajemy polecenia:
sudo add-apt-repository ppa:graysky/utils sudo apt-get update sudo apt-get install profile-sync-daemon
w celu konfiguracji narzędzia wpisujemy dalej:
gksu gedit /etc/psd.conf
i szukamy linijki #USERS="", skąd usuwamy znak "#" i pomiędzy cudzysłowia wstawiamy nazwę użytkownika systemu:
USERS="marcin"
Dalej szukamy linijki #BROWSERS="", gdzie wpisujemy najczęściej używane przez nas przeglądarki oddzielając je znakiem spacji:
BROWSERS="firefox chromium"
Plik można zapisać i zamknąć edytor. Przed uruchomieniem serwisu należy zamknąć wszystkie obsługiwane przeglądarki. Następnie w terminalu uruchamiamy serwis:
sudo service psd start
Podsumowanie
Dysk SSD pozwala na komfortowe używanie komputera: wszystkie operacje na dysku wykonywane są błyskawicznie. Należy jednak pamiętać, że dyski te zużywają się i należy zadbać o prawidłową jego eksploatację poprzez: - odpowiednie utworzenie partycji (zwrócenie uwagi na wyrównanie do megabajtów), - odpowiednią konfigurację systemu operacyjnego oraz najczęściej używanych programów, aby ograniczyć ilość odczytów i zapisów na dysku. Dopilnowanie powyższych dwóch zaleceń pozwoli na długie i komfortowe korzystanie z naszego komputera uzbrojonego w dysk SSD.
Wszelka konstruktywna krytyka mile widziana - myślę, że komuś się może przydadzą te moje spostrzeżenia ;) BTW, Grzegorz - dzięki... za wskazanie w końcu dobrego poradnika. Jak widzisz trochę go zmodyfikowałem, parę bug'ów usunąłem i całość podrasowałem ;)