답변1
개요
소스를 살펴본 후 blocks
수행되는 작업은 다음과 같습니다.
- LV 파일 시스템 축소 LVM PE 축소
- LV 자체를 1 LVM PE로 축소합니다(이것은
bcache
헤더에 대해 1개의 무료 PE를 보장합니다). - VG 구성을 편집하고 이전 단계에서 릴리스된 PE인 크기 1의 새로운 첫 번째 세그먼트를 삽입합니다.
--data-offset
LVM PE 크기의 BCache 백업 장치를 만듭니다.
데이터를 수집하고 백업 VG 구성을 줄입니다.
먼저 VG의 PE 크기(일반적으로 4MiB)를 가져옵니다.
sudo vgdisplay /dev/mapper/VG | grep 'PE Size'
LV의 파일 시스템을 이 양만큼 축소합니다(파일 시스템에 따라 다름). 4MiB와 4MB를 혼동하지 않도록 주의하세요.
그런 다음 LV 자체를 축소하십시오. lvresize
^2개 단위를 사용하므로 4M=4MiB입니다.
sudo lvresize -L -4M /dev/mapper/VG-LV
Start
다음으로 할당되지 않은 새 PE를 찾습니다 .
sudo pvs --segments -o +lv_name,seg_start_pe,seg_size_pe,seg_pe_ranges,seg_le_ranges
내 (매우, 매우 추악한) 배포판에서 원하는 Start
열 번호는 다음과 같습니다 177406
.
PV VG Fmt Attr PSize PFree Start SSize LV Start SSize PE Ranges LE Ranges
/dev/sdb1 2TB lvm2 a-- <693.00g 4.00m 0 177406 backup 299499 177406 /dev/sdb1:0-177405 /dev/sdb1:0-177405
/dev/sdb1 2TB lvm2 a-- <693.00g 4.00m 177406 1 0 1
/dev/sdb2 2TB lvm2 a-- <662.96g 0 0 149749 backup 149750 149749 /dev/sdb2:0-149748 /dev/sdb2:0-149748
/dev/sdb2 2TB lvm2 a-- <662.96g 0 149749 19968 backup 129782 19968 /dev/sdb2:149749-169716 /dev/sdb2:149749-169716
/dev/sdb3 2TB lvm2 a-- 506.96g 0 0 129782 backup 0 129782 /dev/sdb3:0-129781 /dev/sdb3:0-129781
또한 이 값은 177406
내 LV 의 가장 높은 숫자(이름이 지정된)보다 LE Ranges
1 더 큽니다 backup
.
편집할 예정이므로 VG를 비활성화합니다.
sudo vgchange -an VG
VG 구성 덤프:
sudo vgcfgbackup --file vg-config VG
sudo chown $USER vg-config
이 지점에서백업하기구성되었습니다.
VG 구성을 편집하고 새로 출시된 PE를 첫 번째 LE로 삽입합니다.
logical_volumes
구성 파일 섹션에서 LV를 찾으세요.
segment_count
새로 해제된 범위를 사용하여 새 세그먼트를 생성할 수 있도록 하는 증분입니다 .
모든 기존 세그먼트를 늘립니다(예: 이전 세그먼트는 segment1
) segment2
.
다음에 의해 해제된 단일 논리적 범위를 포함하는 새로운 첫 번째 세그먼트를 만듭니다 lvresize
.
segment1 {
start_extent = 0
extent_count = 1
type = "striped"
stripe_count = 1 # linear
stripes = [
"pv2", 177406
]
}
이 숫자 177406
는 위의 LV를 축소하여 해제된 PE입니다. 옆에 있는 항목이 프로필 섹션 pv#
의 올바른 물리적 장치와 일치하는지 확인하세요.physical_volumes
Segment2 이상의 경우 start_extent
s에 1을 추가하면 됩니다. 이는 에 삽입한 새로운 논리적 범위를 보여줍니다 segment1
. (팁: 인적 오류를 방지하려면 ^A를 사용하세요 .) ( LV가 축소된 후에 백업이 수행되므로 vi
마지막 단락은 이미 정확합니다.)extent_count
내 VG 구성에 대한 패치를 볼 수 있습니다.여기.
새로운 VG 구성 확인
VG 메타데이터에 새 구성을 작성합니다.
sudo vgcfgrestore --file vg-config
VG를 다시 활성화합니다.
sudo vgchange -ay VG
문제가 발생하지 않는지 확인하려면 단일 PE 오프셋 루프백을 사용하여 LV를 설치하십시오.
sudo losetup --find --show --offset 4M --read-only /dev/mapper/VG-LV
(위에서는 PE 크기가 4MiB인 예를 사용했습니다.)
fsck
모두VG의 파일 시스템에서 세그먼트 매핑에 문제가 발생하지 않았는지 확인합니다.
문제가 발생하면 롤백 섹션(아래)을 참조하세요. 기타,sudo losetup --detach /dev/loop#
bcache
헤더 쓰기
bcache
장치가 LVM PE와 일치하는 적절한 블록 크기와 데이터 오프셋을 갖도록 만듭니다 .
섹터에서 데이터 오프셋을 가져옵니다.
sudo vgdisplay --units s 2TB | grep 'PE Size'
일반적인 4MiB PE 크기의 경우 이는 8192입니다.
BCache 8KiB 헤더를 작성합니다.
dev=/dev/mapper/VG-LV
make-bcache --bdev --data-offset 8192 --block "$(blockdev --getpbsz "$dev")" "$dev" # --writeback --cset-uuid # see `make-bcache --help`
새로 설정된 지원 장치를 캐시 장치에 연결합니다.
fsck
LV 전용 파일 시스템(다른 VG 파일 시스템은 지난번 이후로 변경되지 않았습니다 fsck
)
자랑스럽게도 이는 fsck
이전 실행 시간의 일부만 소요됩니다 :)
롤백
fsck
문제가 발생하고 VG 구성 파일의 오류를 파악할 수 없는 경우 만든 백업을 복원할 수 있습니다.
sudo vgcfgrestore -f vg-config.orig