Super User is a question and answer site for computer enthusiasts and power users. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

How to move a partition to the beginning of the disk a bit? Parted wants a filesystem for some reason (I don't know why), I want just to shift all sectors left...

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.   
share|improve this question
Are you using the partitions without FS? You can just set the FS to anyone with fdisk and then move them. – Peter Jan 24 '13 at 13:10
Thus is actually a LUKS container. But I don't think a partition mover should ever look inside the filesystem. – Vi. Jan 24 '13 at 13:25
up vote 9 down vote accepted

Manual way with dd and fdisk:

# 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

Now waiting for about 2h. (more looks more like 18h...)

Note: this only moves data back, not forward.


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

# kill -9 907

remember 586921398272/512 = 1146330856


dd conv=notrunc bs=512 iflag=fullblock if=/dev/sdb3  skip=$((1146330856+73402368-73385984)) seek=1146330856 of=/dev/sdb3
share|improve this answer
Lifesaver! Did anyone try to use a larger bs value (for speed reasons)? – David Balažic Nov 22 '13 at 0:24
Ensure you recalculated the values appropriately in case of other bs size. – Vi. Nov 25 '13 at 12:33
why not dd conv=notrunc bs=512 iflag=fullblock if=/dev/sdb skip=73402368 seek=0 of=/dev/sdb3 ? this way it, should work even f start of old sdb3 in not inside new sdb3 – solsTiCe Jun 10 '15 at 14:27
@solsTiCe, What is the difference between your command and my command? – Vi. Jun 10 '15 at 16:36
It copies data from /dev/sdb and not from /dev/sdb3 – solsTiCe Jun 10 '15 at 22:39

You can always use dd.

  • Boot from a liveCD (or any other way which makes sure the partition is not mounted)
  • dd if=/dev/sdc2 of=somefile bs=1M to create a copy of the partition on a file.
  • fdisk (or whatever you like) to delete the partition
  • fdisk (or whatever you like) to create the partition in your desired place.
  • dd of=/dev/sdc2 if=somefile bs=1M to restore the contents from file.
share|improve this answer
How to do it in-place? This partition is almost as large as all other HDDs in my home taked together. – Vi. Jan 24 '13 at 13:24
Can I do something like dd if=/dev/sdb of=/dev/sdb bs=512 skip=N seek=M? – Vi. Jan 24 '13 at 13:26
Might be able tom but test it first. Esp. if you have no backup of the data on the partition. (Also note that if you do have a backup then there are way simpler solutions). – Hennes Jan 24 '13 at 13:40

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .