Linux – How to move Linux to another partition

backupcpiolinux

I need to make a copy of a working linux system, which (being contained in /, and the new place is prepared in /mnt/sdb5) seems to contain considerable amount of hard-, soft-links and special files in /dev; would cpio handle this job without applying additional magic?

Currently known safeguards:

  • not going to remove/modify running system until the moment the copy is considered bootable and working with root=/dev/sdb5; before removing, take a full partition backup.
  • will use cpio for archiving each root directory separately, thus will unpack it from LiveCD environment so donor partition will not be harmed

But still, not going to lose time just because cpio missed some flag and crippled the permissions/node type/soft or hardlink.

Which tool to use / which underwater rocks to avoid?

Best Answer

To answer the actual question regarding cpio: These are the flags I would use for cpio:

find / -xdev -depth \! -path ./lost+found -print0 | cpio --pass-through --null --dot --make-directories --unconditional --preserve-modification-time --sparse /mnt/sdb5

Of course, since you're not copying over the network, I would just use cp:

cp --archive --sparse=always --verbose --one-file-system --target-directory=/mnt/sdb5 /

And if you want to be able to do the copying several times, rsync is a better choice for its resuming capabilities. (It also, like cp, handles ACLs and extended attributes and can optionally work over the network like cpio. So it's the most useful option, except for doing the first copy locally, which I prefer to do using cp.)

rsync --archive --inplace --hard-links --acls --xattrs --devices --specials --one-file-system --8-bit-output --human-readable --progress / /mnt/sdb5

Don't Forget to copy /boot and /dev!

/boot is easy, just copy it. But /dev is much trickier nowadays since it's hidden by udev. I recommend the following procedure:

  1. mkdir /tmp/dev
  2. mount --move /dev /tmp/dev
  3. Copy /dev to /mnt/sdb5 using one of the above commands
  4. mount --move /tmp/dev /dev
  5. rmdir /tmp/dev