명령줄에서 btrfs 파티션의 크기를 조정/이동하는 방법은 무엇입니까?

명령줄에서 btrfs 파티션의 크기를 조정/이동하는 방법은 무엇입니까?

내 노트북에는 Linux/Windows 이중 부팅 설정이 있고 두 시스템 모두에서 액세스할 수 있도록 대부분의 데이터를 Windows 파티션에 보관했습니다. Windows를 거의 사용하지 않기 때문에 NTFS 파티션을 축소하고 btrfs 형식의 Linux 파티션으로 데이터를 이동할 계획이었습니다. 현재 사용 가능한 공간이 있는 곳에서 btrfs 파티션을 확장해야 합니다.

fdisk는 파일 시스템에 영향을 주지 않고 파티션의 시작 부분을 이동할 수 있습니다. 버전 3.0부터 parted는 파일 시스템도 처리할 수 없습니다.

문제를 해결하는 한 가지 방법은 여유 공간에 파티션을 생성하고 이를 백업 장치로 btrfs에 추가한 다음 btrfs devicebtrfs에서 원래 btrfs(사용된) 및 파티션 테이블을 제거한 다음 나머지 btrfs+ 파티션을 파티션 끝까지 확장하는 것입니다. 운전하다 . 여기서 문제는 새로운 여유 공간이 btrfs의 모든 파일을 수용할 수 있을 만큼 커야 하고 모든 데이터를 이동해야 한다는 것입니다.

그래서 내 질문은: 우선 btrfs를 확장하는 더 우아하고 보편적으로 적용 가능한 다른 방법이 있습니까?

편집: (해결책)

GParted는 처음에는 파일 시스템을 자동으로 이동하여 크기를 조정할 수 있지만 여유 공간이 있었기 때문에 위 방법을 시도했습니다. 시간이 오래 걸리고(하위 볼륨이 많아서) CPU와 I/O 리소스를 많이 사용하다가 I/O 오류로 중단되었기 때문에 btrfs replace이것을 사용했는데 훌륭하게 작동했습니다. 몇 시간이 걸렸습니다. 몇 시간 동안 컴퓨터를 완전히 사용할 수 있습니다.

답변1

아니요, 다른 방법은 없습니다. 사실, 처음에 크기 조정을 허용하는 파일 시스템은 없습니다.

따라서 데이터를 이동할 필요가 없도록 풀에 새 파티션을 추가하거나 설명한 대로 계속할 수 있습니다.

답변2

문제를 해결하는 한 가지 방법은 여유 공간에 파티션을 생성하고 이를 백업 장치로 btrfs에 추가한 다음 btrfs devicebtrfs에서 원래 btrfs(사용된) 및 파티션 테이블을 제거한 다음 나머지 btrfs+ 파티션을 파티션 끝까지 확장하는 것입니다. 운전하다 . 여기서 문제는 새로운 여유 공간이 btrfs의 모든 파일을 수용할 수 있을 만큼 커야 하고 모든 데이터를 이동해야 한다는 것입니다.

이는 여러 단계로 수행될 수 있습니다. 단계 수는 파일 시스템에서 사용 가능한 여유 공간의 양과 관련 파티션의 크기에 따라 달라집니다. 프로세스는 데이터를 앞뒤로 이동하므로 디스크에 부담을 주고 시간과 노력이 필요하지만 파일 시스템은 항상 온라인 상태입니다.

2TB 정도의 데이터로 한번 해봤습니다. 어쨌든 연중무휴로 작동하는 홈 라우터/서버에 있으므로 몇 시간마다 확인하여 마침내 다음 단계를 시작할 수 있습니다. 일주일 넘게 걸렸던 기억이 어렴풋이 나네요. 여행 비용은 변경될 수 있습니다.

일반적으로 디스크 순서가 아닌 (임시적으로) 많은 파티션을 생성해야 하는데, MBR의 dos 파티션 테이블을 사용하여 쉽게(또는 전혀) 수행할 수 있는지 잘 모르겠습니다. 저는 GPT를 사용하여 이 작업을 수행했는데 귀하께서 사용하시는 유형이 바로 이것이라고 생각합니다.

단계:

  1. N설명한 대로 새 파티션( )을 이전 파일 시스템에 추가합니다 btrfs device add … /the/mountpoint.
  2. 특히 O이전 파티션( )에서 파일 시스템을 축소합니다 btrfs filesystem resize <devid>:-… /the/mountpoint. 이를 찾으려면 <devid>실행 에 대한 올바른 항목을 지정해야 합니다 . btrfs filesystem show /the/mountpoint파일 시스템의 여유 공간보다 훨씬 작게 축소하는 것이 좋습니다(이 내용은 11단계에서 명확해집니다. 계속 읽으세요).
  3. 끝 섹터를 변경하여 이전 파티션을 같은 양만큼 축소합니다. 시작 섹터를 변경하지 마십시오.
  4. 이제 이전 파티션 뒤에 여유 공간이 있습니다. 거기( )에 새 임시 파티션을 만듭니다 A.
  5. 파일 시스템에 새 임시 파티션을 추가합니다.
  6. 이전 파티션(크기를 계속해서 조정한 후)이 파일 시스템에서 삭제할 수 있을 만큼 충분히 작아질 때까지(파일 시스템의 여유 공간과 비교하여) 2단계부터 반복합니다. 이 루프에서는 여러 개의 임시 파티션( B, C, D, ...) 을 생성합니다 .
  7. 파일 시스템에서 이전 파티션을 삭제합니다 btrfs device remove /dev/… /the/mountpoint.
  8. O파티션 테이블( )에서 이전 파티션을 제거합니다.
  9. N새 파티션을 최대한 오른쪽으로 확장합니다( ).
  10. 새 파티션에서 파일 시스템 크기를 최대화합니다 btrfs filesystem resize <devid>:max /the/mountpoint.
  11. 파일 시스템에서 새 파티션에 인접한 임시 파티션을 삭제합니다. 파일 시스템에 여유 공간이 충분하지 않으면 이 단계가 실패할 수 있습니다. 이것이 2단계에서 파일 시스템을 너무 많이 축소해서는 안 되는 이유입니다. 파일 시스템에서 사용 가능한 공간보다 상당히 작은 파티션을 사용하면 안전 여유를 확보할 수 있습니다. 특히 파일 시스템이 활발히 사용되고 있고 사용 가능한 공간이 변동될 수 있는 경우에는 더욱 그렇습니다.
  12. 파티션 테이블에서 새 파티션에 인접한 임시 파티션을 삭제합니다.
  13. 임시 파티션이 남아 있지 않아 11단계를 수행할 수 없을 때까지 9단계부터 반복합니다.

아래 이미지는 이 과정을 시각화한 것입니다. 디스크는 왼쪽에서 오른쪽으로 뻗어 있고 시간은 위에서 아래로 흐릅니다. 전설:

  • O– 오래된 파티션
  • N– 새로운 파티션
  • A, B, C, ... – 임시 파티션
  • -– 할당되지 않은 공간
  • – 간결성을 위해 단계가 생략되었습니다.
NNNNNNNNOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
NNNNNNNNOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO----
NNNNNNNNOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOAAAA
NNNNNNNNOOOOOOOOOOOOOOOOOOOOOOOOOO----AAAA
NNNNNNNNOOOOOOOOOOOOOOOOOOOOOOOOOOBBBBAAAA
NNNNNNNNOOOOOOOOOOOOOOOOOOOOOO----BBBBAAAA
NNNNNNNNOOOOOOGGGGFFFFEEEEDDDDCCCCBBBBAAAA
NNNNNNNNOO----GGGGFFFFEEEEDDDDCCCCBBBBAAAA
NNNNNNNNOOHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA
NNNNNNNN--HHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA
NNNNNNNNNNHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA
NNNNNNNNNN----GGGGFFFFEEEEDDDDCCCCBBBBAAAA
NNNNNNNNNNNNNNGGGGFFFFEEEEDDDDCCCCBBBBAAAA
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNBBBBAAAA
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN----AAAA
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNAAAA
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN----
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN

완벽한. 전체 파일 시스템은 원하는 위치에서 시작하고 끝나는 파티션 내부에 있습니다.

관련 정보