GNU / Linux'ta bir bölüm nasıl taşınır?


17

Bir disk bölümünü diskin başına nasıl taşıyabilirim? Parted bir sebepten dolayı bir dosya sistemi istiyor (nedenini bilmiyorum), sadece tüm sektörleri sola kaydırmak istiyorum ...

r@l:15:32:45:~# parted /dev/sdb
GNU Parted 2.3
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) p                                                                
Model: HGST HTS 541010A9E680 (scsi)
Disk /dev/sdb: 1000GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type     File system  Flags
 1      1049kB  32.2GB  32.2GB  primary  fat32
 2      32.2GB  37.6GB  5360MB  primary
 3      37.6GB  1000GB  963GB   primary

(parted) move 3                                                           
WARNING: you are attempting to use parted to operate on (move) a file system.
parted's file system manipulation code is not as robust as what you'll find in
dedicated, file-system-specific packages like e2fsprogs.  We recommend
you use parted only to manipulate partition tables, whenever possible.
Support for performing most operations on most types of file systems
will be removed in an upcoming release.
Error: Could not detect file system.   

FS olmayan bölümleri mi kullanıyorsunuz? FS'yi herhangi birine ayarlayabilir fdiskve daha sonra taşıyabilirsiniz.
Peter

Böylece aslında bir LUKS konteyner. Ancak bir bölüm taşıyıcısının dosya sistemine hiç bakması gerektiğini düşünmüyorum.
Vi.

gpartedbunu simüler bir durumda benim için iyi yaptı.
palacsint

Belki sonunda bunu uyguladılar?
Vi.

1
Ayrıştırılmış sürüm 3.2 seçenek olarak "hareket" yoktur.
Lenne

Yanıtlar:


4

sfdisk, betiklenebilir bir fdisk olmaya niyetlidir, bazı versiyonlardan beri --move-dataseçeneği vardır. Kılavuz sayfalarından örnek :

echo '+100M,' | sfdisk --move-data /dev/sdc -N 1

16

DD ve fdisk ile manuel yol:

# fdisk -l /dev/sdb | grep sdb3
/dev/sdb3        73402368  1953525167   940061400   83  Linux

# fdisk /dev/sdb
Command (m for help): d
Partition number (1-4): 3
Command (m for help): n
Partition number (1-4, default 3): 3
First sector (73385984-1953525167, default 73385984): 
Using default value 73385984
Last sector, +sectors or +size{K,M,G} (73385984-1953525167, default 1953525167): 
Using default value 1953525167
Command (m for help): w
The partition table has been altered!

# fdisk -l /dev/sdb | grep sdb3
/dev/sdb3        73385984  1953525167   940069592   83  Linux

# dd conv=notrunc bs=512 iflag=fullblock if=/dev/sdb3 count=100 skip=$((73402368-73385984)) seek=0 2> /dev/null | file -s -
/dev/stdin: LUKS encrypted file, ver 1 [aes, cbc-essiv:sha256, sha1] UUID: af1c47f0-4ca5-4ea7-a091-065bd263653f

# dd conv=notrunc bs=512 iflag=fullblock if=/dev/sdb3  skip=$((73402368-73385984)) seek=0 of=/dev/sdb3

# file -s /dev/sdb3
/dev/sdb3: sticky LUKS encrypted file, ver 1 [aes, cbc-essiv:sha256, sha1] UUID: af1c47f0-4ca5-4ea7-a091-065bd263653f

Şimdi yaklaşık 2 saat bekliyorum. (daha fazla 18 saat gibi görünüyor ...)

Not: Bu yalnızca verileri ileriye değil geri taşır.

duraklatma:

# pidof dd
907
# kill -STOP 907
# cat /proc/907/fdinfo/1
pos:    586921398272
flags:  0100001

# kill -9 907

remember 586921398272/512 = 1146330856

Sürdürme:

dd conv=notrunc bs=512 iflag=fullblock if=/dev/sdb3  skip=$((1146330856+73402368-73385984)) seek=1146330856 of=/dev/sdb3

2
Cankurtaran! Herkes daha büyük bir bs değeri (hız nedenleriyle) kullanmaya çalıştı mı?
David Balažic

Başka bir bsboyutta değerleri yeniden hesapladığınızdan emin olun .
Vi.

3
neden olmasın dd conv=notrunc bs=512 iflag=fullblock if=/dev/sdb skip=73402368 seek=0 of=/dev/sdb3? bu şekilde çalışmalı, hatta yeni sdb3 içinde eski sdb3 başlaması gerekir
solsTiCe

@solsTiCe, Komutunuz ile komutum arasındaki fark nedir?
Vi.

3
Ancak daha büyük bir bs kendi başına bana yardım bs=1M iflag=direct oflag=directetmedi. SSD'mde 40 MB / s'den 400 MB / s'ye gitti. Ayrıca, kullanınstatus=progress
Aleksandr Dubinsky

3

Her zaman kullanabilirsiniz dd.

  • Bir liveCD'den (veya bölümün monte edilmediğinden emin olan başka bir yoldan) önyükleme yapın
  • dd if=/dev/sdc2 of=somefile bs=1M dosyadaki bölümün bir kopyasını oluşturmak için.
  • bölümü silmek için fdisk (veya istediğinizi)
  • fdisk (veya istediğinizi) bölümü istediğiniz yerde oluşturun.
  • dd of=/dev/sdc2 if=somefile bs=1M içeriği dosyadan geri yüklemek için.

Yerinde nasıl yapılır? Bu bölüm, evimdeki diğer tüm HDD'lerin bir araya getirdiği kadar büyük.
Vi.

Gibi bir şey yapabilir miyim dd if=/dev/sdb of=/dev/sdb bs=512 skip=N seek=M?
Vi.

Tom olabilir ama önce test edin . Esp. bölümdeki verilerin yedeği yoksa. (Ayrıca bir yedeğiniz varsa, daha basit çözümler olduğunu unutmayın).
Hennes

3
@Vi. Bir yanıtın bu doğru, ilk cevabı kimsenin aşağı oyunu hak etmiyor, çünkü bu “yerinde yap” şartı sorunun hiçbir yerinde yok.
zero2cx
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.