Btrfs send/receive
500GB 하드디스크 두 개에 Btrfs RAID1 볼륨으로 루트파일시스템이 설치되어 있는 상태인데
이 부트파티션을 다른 테스트PC로 간단히 복제해 쓰고 싶어서 했던 작업 기록.
작업 며칠 뒤에 편집하고 재구성한 것이라서 기록이 좀 미비하다.
설치되어 있던 배포판은 CentOS-7.

볼륨 구성은 아래와 같다.

$ lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 465.8G  0 disk
├sda1   8:1    0   500M  0 part
├sda2   8:2    0 457.4G  0 part /home/chanik/a
└sda3   8:3    0   7.9G  0 part [SWAP]
sdb      8:16   0 465.8G  0 disk
└sdb1   8:17   0 457.4G  0 part

$ sudo fdisk -l
Disk /dev/sda: 500.1 GB, 500107862016 bytes, 976773168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000724aa

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     1026047      512000   83  Linux
/dev/sda2         1026048   960258047   479616000   83  Linux
/dev/sda3       960258048   976773119     8257536   82  Linux swap / Solaris

Disk /dev/sdb: 500.1 GB, 500107862016 bytes, 976773168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000a6749

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048   959234047   479616000   83  Linux

sda1은 원래는 /boot 용도였지만 지금은 쓰지 않는 파티션.
sda2는 sdb1과 함께 Btrfs RAID1 볼륨. CentOS-7 설치된 상태.
sda3은 SWAP 파티션.

$ sudo btrfs fi df /
Data, RAID1: total=99.00GiB, used=98.39GiB
System, RAID1: total=32.00MiB, used=16.00KiB
Metadata, RAID1: total=1.00GiB, used=401.73MiB
GlobalReserve, single: total=144.00MiB, used=0.00

$ sudo btrfs fi show /
Label: 'cl_dev-xt'  uuid: 8352dc38-bf60-4ecd-a84e-452f67c9b78b
        Total devices 2 FS bytes used 98.78GiB
        devid    1 size 457.40GiB used 100.03GiB path /dev/sda2
        devid    2 size 457.40GiB used 100.03GiB path /dev/sdb1


#
# 원본 Btrfs 파티션 마운트
#

$ mkdir a
$ sudo mount /dev/sda2 a
$ cd a
$ ls -l
drwxr-xr-x. 1 root root 1326 Nov  9 14:02 boot
drwxr-xr-x. 1 root root   12 Nov  6 19:02 home
dr-xr-xr-x. 1 root root  188 Nov 13 20:31 root


#
# 각 서브볼륨에 대해 snapshot 을 작성하고, snapshot 들을 읽기전용으로 변경
# 읽기전용이 아니면 send 시도할때 오류가 생긴다.
#

$ sudo btrfs subvolume snapshot boot boot_
$ sudo btrfs subvolume snapshot root root_
$ sudo btrfs subvolume snapshot home home_

$ sudo btrfs subvolume snapshot -r boot boot_
$ sudo btrfs subvolume snapshot -r root root_
$ sudo btrfs subvolume snapshot -r home home_

$ ls -l
drwxr-xr-x. 1 root root 1326 Nov  9 14:02 boot
drwxr-xr-x. 1 root root 1326 Nov  9 14:02 boot_
drwxr-xr-x. 1 root root   12 Nov  6 19:02 home
drwxr-xr-x. 1 root root   12 Nov  6 19:02 home_
dr-xr-xr-x. 1 root root  188 Nov 13 20:31 root
dr-xr-xr-x. 1 root root  188 Nov 13 20:31 root_

$ cd ..


#
# - 새 하드디스크 /dev/sdc 연결하고 파티션테이블 레이아웃 복제 (새 디스크도 500GB 짜리)
# - /dev/sdc3에 SWAP 파티션 생성
# - /dev/sdc2에 Btrfs 파일시스템 생성 (원본은 RAID1볼륨이지만 새 볼륨은 단일디스크 볼륨)
#

$ sudo sfdisk -d /dev/sda | sudo sfdisk /dev/sdc
$ sudo mkswap /dev/sdc3
$ sudo mkfs.btrfs /dev/sdc2


#
# 새로 만든 Btrfs 파티션을 마운트하고 마운트 디렉토리로 이동
#

$ mkdir c
$ sudo mount /dev/sdc2 c
$ cd c


#
# 원본 Btrfs 서브볼륨들에 대해 만들어둔 읽기전용 스냅샷을 하나씩 send 하고
# 새로 만든 Btrfs 파티션에서 receive.
#

$ for v in ../a/*_; do sudo btrfs send $v | sudo btrfs receive .; done


#
# 이제 새 디스크의 새 Btrfs 파티션에 서브볼륨들이 복제된 상태다.
# 원본은 RAID1 볼륨이었으나 새 볼륨은 단일디스크 볼륨이며, 내용물은 동일한 상태가 된다.
# 각 서브볼륨 이름을 변경하고, 읽기전용 속성도 풀어준다.
#

$ sudo mv boot_ boot
$ sudo mv root_ root
$ sudo mv home_ home
$ sudo btrfs property set -ts boot ro false
$ sudo btrfs property set -ts root ro false
$ sudo btrfs property set -ts home ro false


#
# 새 볼륨의 boot/grub2/grub.cfg 파일 적당히 편집하고
# chroot해서 grub2-install 등도 해 준다.
# 이제 새 디스크에 부트파티션의 Btrfs 볼륨이 복제되었고 grub2도 설치되었으므로
# 새 PC로 가져가서 부팅용으로 쓰면 된다.
#
# 해보니 일단 부팅은 잘 되는데,
# 일부 패키지들의 실행파일 setuid 비트가 제대로 옮겨지지 않아서 자잘한 문제가 생겼다.
# 이를테면, hostnamectl로 기기명을 변경해도 재부팅하면 다시 원래대로 되돌아가버린다든지..
#
# 아래 명령으로 전체 패키지를 재설치시켜서 해결했다. 물론 시간이 좀 걸린다.
#

$ sudo yum reinstall `rpm -qa`


by 시험さま | 2015/12/01 10:34 | 컴퓨터 | 트랙백 | 덧글(0)
트랙백 주소 : http://chanik.egloos.com/tb/4101316
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]

:         :

:

비공개 덧글

< 이전페이지 다음페이지 >