Forum Linux Mint Polska
[Tutorial] Tworzenie bootowalnego pendrive'a za pomocą niskopoziomowego programu dd. - Wersja do druku

+- Forum Linux Mint Polska (https://forum.linuxmint.pl)
+-- Dział: Wsparcie (https://forum.linuxmint.pl/forumdisplay.php?fid=203)
+--- Dział: Poradniki i najczęściej zadawane pytania (https://forum.linuxmint.pl/forumdisplay.php?fid=123)
+--- Wątek: [Tutorial] Tworzenie bootowalnego pendrive'a za pomocą niskopoziomowego programu dd. (/showthread.php?tid=79)



Tworzenie bootowalnego pendrive'a za pomocą niskopoziomowego programu dd. - ciastek1981 - 01-03-2019

Do tworzenia bootowalnego pendrive'a z dystrybucją możemy użyć niskopoziomowego programu dd. Tworzy on kopię 1:1 bit po bicie.

W momencie kiedy zakończy się pobieranie naszego obrazu odpalamy terminal.

Za pomocą polecenia ls wyświetlamy listę folderów w katalogu [ /home/twoja_nazwa_użytkownika ]


Kod:
ciastek@R61i:~$ ls
Dokumenty  Muzyka  Obrazy  Pobrane  Publiczny  Pulpit  Templates  Wideo


Z racji tego, że wiemy iż obraz został zapisany w folderze [ Pobrane ] to wchodzimy do tego katalogu za pomocą polecenia cd [ cd + nazwa katalogu ] (tutaj Pobrane).

Kod:
ciastek@R61i:~$ cd Pobrane

Następnie w katalogu Pobrane wyszukujemy za pomocą polecenia ls twój obraz. Parametr grep służy do zawężenia (szukanie wg wzorca) wyświetlania rekordów z nazwą zawierająca fragment ".iso". Wielkość liter ma znaczenie. Jeżeli chcielibyśmy wyszukać .iso z literami o dowolnej wielkości po grep należy dodać [ -i ] -ignoruje rozróżnianie  wielkości  znaków.


Kod:
ciastek@R61i:~/Pobrane$ ls | grep .iso
netrunner-desktop-1901-64bit.iso
Win10_1809Oct_Polish_x64.iso


Jak widać powyżej w folderze znajdują się dwa obrazy .iso .

Następnie za pomocą polecenia lsblk ustalamy nazwę przypisaną przez system do twojego pendrive'a - [ sdX ]. Tutaj sdb.


Kod:
ciastek@R61i:~/Pobrane$ lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sdb      8:16   1   7,2G  0 disk 
├─sdb2   8:18   1   2,5M  0 part 
└─sdb1   8:17   1   2,7G  0 part /media/ciastek/Netrunner Desktop 20190112.0958
sr0     11:0    1  1024M  0 rom  
sda      8:0    0 465,8G  0 disk 
├─sda2   8:2    0   289G  0 part 
├─sda5   8:5    0 170,8G  0 part /
├─sda1   8:1    0     1K  0 part 
└─sda6   8:6    0     6G  0 part [SWAP]


Po ustaleniu nazwy przypisanej przez system -  - [ sdX ] (tutaj sdb) należy odmontować urządzenie za pomocą polecenia umount. Pomijamy cyfry w drzewku ponieważ chodzi nam o cały pendrive'a a nie konkretną partycję na tym dysku.


Kod:
ciastek@R61i:~/Pobrane$ umount /dev/sdb
umount: /dev/sdb: nie zamontowany


Po odmontowaniu należy sformatować pendrive. Do tej operacji użytkownik powinien posiadać odpowiednie uprawnienia administracyjne. if=/dev/zero znaczy tylko tyle, że dysk of=/dev/sdb zostanie zapisany zerami. Parametr bs = odczytuje i zapisuje BAJTÓW naraz (pożądany rozmiar bloku danych) , count = kopiuje jedynie N wejściowych bloków (ilość kopiowanych bloków danych).


Kod:
ciastek@R61i:~/Pobrane$ sudo dd if=/dev/zero of=/dev/sdb bs=512 count=4096
[sudo] hasło użytkownika ciastek: 
4096+0 przeczytanych rekordów
4096+0 zapisanych rekordów
2097152 bajtów (2,1 MB, 2,0 MiB), 0,29482 s, 7,1 MB/s


Po sformatowaniu urządzenia przystępujemy do tworzenie bootowalnego penrive'a. Z racji tego, że jesteśmy w folderze pobrane to wystarczy podać tylko if=nazwa_pliku.iso . Jeżeli nie weszlibyśmy do tego folderu należało by podać całą ścieżkę do pliku. Flaga sync znaczy tylko tyle, że używa synchronizowanego I/O dla danych.


Kod:
ciastek@R61i:~/Pobrane$ sudo dd if=netrunner-desktop-1901-64bit.iso of=/dev/sdb && sync
5712000+0 przeczytanych rekordów
5712000+0 zapisanych rekordów
2924544000 bajtów (2,9 GB, 2,7 GiB), 770,199 s, 3,8 MB/s
ciastek@R61i:~/Pobrane$ 


Po około 12-15 minutach mamy przygotowany obraz live. Szybkość zależy m. in. od tego jakie parametry zapisu i odczytu ma nasz pendrive'a oraz od tego czy korzystamy z portu USB 2.0 czy też USB >= 3.0  oraz wielkości samego obrazu .iso.


RE: Tworzenie bootowalnego pendrive'a za pomocą niskopoziomowego programu dd. - magnus - 02-03-2019

Istnieją kontrowersje jeśli chodzi o użycie sync. Ta opcja ma za zadanie opróżnić pamięci podręczne zanim dd zakończy działać. Jeśli to się nie stanie niektóre dane mogą nie zostać zapisane na pendrive'a.


Kod:
sudo dd if=netrunner-desktop-1901-64bit.iso of=/dev/sdb && sync


Niektórzy argumentują że użycie sync jako oddzielnej komendy nie spełnia swojego zadania ponieważ dd już zakończy działanie. Zamiast tego powinno się użyć opcji conv=fdatasync albo oflag=sync.


Kod:
sudo dd if=netrunner-desktop-1901-64bit.iso of=/dev/sdb conv=fdatasync


Te opcje wymuszają sync na koniec transferu danych.
Niestety nie podam żadnych źródeł. Wiele lat upłynęło od czasu kiedy używałem tą metodę.

Dodał bym także status=progress, opcja która pokaże postęp całego procesu.


Kod:
sudo dd if=netrunner-desktop-1901-64bit.iso of=/dev/sdb status=progress conv=fdatasync


Dla niektórych 15 minut to wieczność.[Obrazek: biggrin.png]


RE: Tworzenie bootowalnego pendrive'a za pomocą niskopoziomowego programu dd. - morfik - 02-03-2019

Nie wiem co rozumiesz pod pojęciem "pamięć podręczna" ale sync nie służy do opróżniania "pamięci podręcznej", tylko do zapisania dirty pages na dysk. Big Grin

Kod:
# cat /proc/meminfo| grep -i dirty
Dirty:               184 kB

# sync && cat /proc/meminfo| grep -i dirty
Dirty:                 0 kB

Te opcje od dd potrafią nieco dostosować zapis danych na dysk, tu jest wyjaśnienie. Bo standardowo, to linux jak ma dużo dostępnego RAM, to załaduje cały obraz do pamięci i potem będzie go zrzucał na pena parę MiB/s i niby transfer się zakończy a zapis będzie trwał dalej. Niemniej jednak, sync po transferze danych zapewnia, że wszystkie dirty pages z RAM zostały zapisane na dysku/pendrive.


RE: Tworzenie bootowalnego pendrive'a za pomocą niskopoziomowego programu dd. - Ulvhedin - 02-03-2019


  1. Nie "ls|grep iso" tylko "ls *.iso" - grep słuzy do czegos innego... wynik jest podobny ale nie do tego służy grep..
  2. Nie "umount /dev/sdb" tylko "umount /dev/sdbX", mozna zamontowac /odmontowac filesystem a nie urządzenie
  3. bs i count w tej kombinacji jak podales nie ma uzasadnienia, ta operacja to zerowanie, formatowanie jest czymś innym.
   I zerowanie szybkie można sprowadzic do bs=512 count=1 bo zalezy nam na usunieciu mbr i tablicy partycji. Zerowanie/nadpisywanie przypadkowymi       danymi robi się w innym przypadku i koniecznie na calym urzadzeniu blokowym. Zreszta zerowanie przy wgrywaniu iso tez nie ma sensu, bo i tak nadpisane to bedzie informacją z iso. Na jedno wyjdzie. [Obrazek: wink.png]
Przy wgrywaniu iso bym ustawil wiekszy blok danych i użył flagi: oflag=direct, np.

Kod:
sudo dd if=netrunner-desktop-1901-64bit.iso of=/dev/sdb bs=8M oflag=direct

No i do tego wypowiedz jeszcze @morfika, tak jak napisał..
Sync zasadniczo działa, ale jak nie zadziała to trzeba wiedzieć czemu (i nie obwiniac popsutego pendrive'a) Wink


ps. dobór optymalnego bs zalezy od wielu czynników, temat raczej na cały tutek.  Smile


RE: Tworzenie bootowalnego pendrive'a za pomocą niskopoziomowego programu dd. - morfik - 02-03-2019

Cytat:Nie "umount /dev/sdb" tylko "umount /dev/sdbX", mozna zamontowac /odmontowac filesystem a nie urządzenie

Zależy jak jest sformatowanie urządzenie. Windows tworzy system plików bezpośrednio na pendrive (sdb, itp ) i nie tworzy dodatkowych partycji, tak jak to jest w standardzie na linux (w myśl zasady, że pendrive pod windows mają mieć tylko jedną partycję). Na linux tez możesz sobie utworzyć system plików bezpośrednio na sdb i będzie działał. :]


Cytat:Zreszta zerowanie przy wgrywaniu iso tez nie ma sensu, bo i tak nadpisane to bedzie informacją z iso. Na jedno wyjdzie. [Obrazek: wink.png]

Ja miewałem przypadki, że po wgraniu obrazu na pena, linux ciągle widział stary układ partycji i tylko wyzerowanie początkowego obszaru pendrive było w stanie to zmienić, także czasem zerowanie pierwszych MiB może przynieść jakiś wymierny efekt. I też nie pierwszych 512 bajtów, bo linux jest inteligentny i potrafi czasem odszukać pierwszą partycję jeśli jest wyrównana do 1MiB i potraktować ją jako dostępną i nieważne co tam było w MBR. Big Grin Także ja bym zalecał zerować pierwsze 4 MiB, tak na wszelki wypadek. Big Grin


RE: Tworzenie bootowalnego pendrive'a za pomocą niskopoziomowego programu dd. - ciastek1981 - 02-03-2019

Merytorycznie trochę dałem ciała, ponieważ skupiłem się na samym przykładzie Big Grin

Co do zerowania, wg tego schematu co zaproponowałem trwa to kilka sekund.

Sam układ partycji tego obrazu wygląda tak (obrazek niżej). Użycie samego dd powinno nadpisać obraz, ale ja mam zawsze jakieś dziwne akcje, dlatego dałem ten przykład.

Spróbujcie sformatować taki obraz (niżej) programem Dyski - mi sypie błędami Big Grin

[Obrazek: WdnConXl.png]


RE: Tworzenie bootowalnego pendrive'a za pomocą niskopoziomowego programu dd. - Ulvhedin - 02-03-2019

(02-03-2019, 15:37)morfik napisał(a): [...] I też nie pierwszych 512 bajtów, bo linux jest inteligentny i potrafi czasem odszukać pierwszą partycję jeśli jest wyrównana do 1MiB i potraktować ją jako dostępną i nieważne co tam było w MBR. Big Grin Także ja bym zalecał zerować pierwsze 4 MiB, tak na wszelki wypadek. Big Grin

Słuszna uwaga. Zapomniałem o wyrównywaniu.

Co do przykładu z brakiem partycji. Mozecie podac realny przyklad zastosowania filesystemu na całym urzadzeniu bez tworzenia partycji ?
Wiem ze mozna, ale nigdy się nie spotkalem z realnym przypadkiem użycia.


RE: Tworzenie bootowalnego pendrive'a za pomocą niskopoziomowego programu dd. - magnus - 02-03-2019

(02-03-2019, 15:16)morfik napisał(a): Nie wiem co rozumiesz pod pojęciem "pamięć podręczna" (...)

Rozumiem to jako podręczną pamięć stron i podręczną pamięć buforową.


Cytat:(...) sync nie służy do opróżniania "pamięci podręcznej", tylko do zapisania dirty pages na dysk. (...) Bo standardowo, to linux jak ma dużo dostępnego RAM, to załaduje cały obraz do pamięci i potem będzie go zrzucał na pena parę MiB/s i niby transfer się zakończy a zapis będzie trwał dalej. Niemniej jednak, sync po transferze danych zapewnia, że wszystkie dirty pages z RAM zostały zapisane na dysku/pendrive.

Czy czasem nie opisałeś tu opróżniania podręcznej pamięci stron i podręcznej pamięci buforowej?[Obrazek: biggrin.png]


RE: Tworzenie bootowalnego pendrive'a za pomocą niskopoziomowego programu dd. - morfik - 02-03-2019

@magnus  -- no nie. Jak sobie zajrzysz w free to tam masz:

Kod:
$ free -m

              total        used        free      shared  buff/cache   available
Mem:          3.6Gi       1.4Gi       880Mi       146Mi       1.3Gi       1.8Gi
Swap:         6.0Gi          0B       6.0Gi
Total:        9.6Gi       1.4Gi       6.9Gi


Jak wydasz sync, to nic się w kwestii buff/cache nie zmieni. Jeśli chcesz opróżnić bufory, to od tego jest plik /proc/sys/vm/drop_caches . Dirty pages to jest całkiem inny rodzaj stron pamięci i tego nie można po prostu wywalić z pamięci, bo takie zachowanie skutkuje uszkodzeniem pliku, np. spróbuj wyłączyć kompa wyciągając kabel z gniazdka. Big Grin Jak będziesz miał sporo dirty pages w RAM, to fsck ci zaraz sporo plików wywali podczas startu systemu. Big Grin