używając dd, aby skopiować partycję na inną partycję, używając dysku fizycznego

17

Nie jestem pewien, jak lepiej to wyjaśnić w temacie, więc „pytanie” może być niewłaściwe. Ale tu idzie. Mam trzy dyski twarde. Dysk A to dysk o pojemności 320 GB, dysk B to dysk o pojemności 80 GB, a dysk C to dysk o pojemności 1 TB. Skopiowałem dane z dysku o pojemności 80 GB na dysk o pojemności 1 TB i zamierzam zmienić rozmiar partycji (aby móc później skopiować dane z dysku o pojemności 320 GB).

Moje pytanie brzmi: jeśli uruchomię system operacyjny na dysku 1 TB, czy mogę użyć dd, aby skopiować dysk 320 GB na inną partycję na tym dysku fizycznym? Wiem, że nie powinienem kopiować partycji na żywo (co oznacza, że ​​nie mogę skopiować danych z dysku 320 GB, jeśli korzystam z tego systemu operacyjnego).

Moje rozumowanie jest następujące: próbowałem użyć Acronis TrueImage, Partition Manager i Image 4 DOS / Linux (obie aplikacje), a skopiowanie danych zajęło mi tydzień. Oznacza to, że przez tydzień nie mogę korzystać z komputera, co jest niedopuszczalne (chyba że jest to moja jedyna opcja). Mam nadzieję, że to zadziała, więc mogę przynajmniej korzystać z komputera podczas kopiowania.

W razie potrzeby mogę albo uruchomić się z Live CD (niezbyt preferowana opcja), albo użyć „Dysku B”, ale chciałbym jak najszybciej usunąć ten dysk.

Der Hochstapler
źródło
Jasne, czemu nie ?
Michael Hampton

Odpowiedzi:

18

Tak, to, co chcesz zrobić, będzie działać dobrze, biorąc pod uwagę następujące dwa warunki:

  1. Nie ma (zamontowane) system plików na partycji, które są dd'ing do .
  2. Partycja jesteś dd'ing do co najmniej taki sam rozmiar jak jeden jesteś dd'ing od (czyli 320 GB).

Powodem, dla którego będzie działać poprawnie, jest to, że partycje są tylko plikami w systemie UNIX. Ich zawartość ma specjalne znaczenie tylko wtedy, gdy zawiera zamontowany system plików.

Zakładając, że masz układ, który wygląda następująco:

1 TB = sda, dwie partycje, sda1, z którego dokonałeś rozruchu, i sda2, do którego chcesz uruchomić

320 GB = sdb, jedna partycja, sdb1, z którego korzystasz

Twoje polecenie wyglądałoby tak:

dd if=/dev/sdb1 of=/dev/sda2 bs=1M

Ten bs=1Mparametr zapewnia, że ​​dd kopiuje dane w dużych porcjach zamiast wydawać żądanie dla każdego sektora.

Michael Fenn
źródło
1
if = źródło = przeznaczenie Myślę, że coś jest nie tak w powyższej radzie.
W powyższym przykładzie sdb1 jest źródłem, a sda2 jest miejscem docelowym. Zredagowałem odpowiedź, aby wyrazić się lepiej.
Michael Fenn,
1
Nie musisz wykonywać resize2fspo kopii? Nawet gdy rozmiary są różne?
Sopalajo de Arrierez
5

Zasadniczo można dodawać dowolną partycję, gdy nie jest ona zamontowana. Jeśli musisz zamontować partycję źródłową do odczytu podczas działania dd, lepiej byłoby zamontować ją tylko do odczytu z parametrem -o ro.

jeśli chcesz najpierw uruchomić na partycji źródłowej amd, a następnie użyj dd, aby go skopiować, możesz wykonać mount -o ro, ponownie zamontować /, aby odczytał się dopiero po uruchomieniu.

powtórna rozgrywka
źródło
Tylko do odczytu nie oznacza, że ​​system plików nie wygłupia się z dziennikiem ani nie reorganizuje wolnego miejsca.
vonbrand
@vonbrand, czy możesz podać przykład implementacji systemu plików linux, który robi to w trybie RO?
Basilevs,
@vonbrand systemy plików w Uniksie, zamontowane istota ro bardzo nie oznacza to, że żadne zapisy powinny być wydawane do urządzenia bazowego.
Michael Fenn