ext4 파일 시스템을 /dev/sdb에서 /dev/sdb1로 이동하는 방법은 무엇입니까?

ext4 파일 시스템을 /dev/sdb에서 /dev/sdb1로 이동하는 방법은 무엇입니까?

어쨌든 /dev/sdb에 ext4 파일 시스템이 있습니다. 나는 그것이 /dev/sdb1일 것이라고 예상했습니다.

수동으로 마운트할 수 있고, 데이터에 액세스할 수 있으며 /etc/fstab 등에서 참조할 수 있지만 표준 파티션에 두기를 원합니다.

데이터를 잃고 싶지 않고 드라이브에 다른 파티션에 복사할 공간이 부족합니다. 데이터가 많지는 않습니다. 언제든지 외부 장치로 옮기고, 파일 시스템을 복구하고, 다시 이동할 수 있었는데, 이제는 궁금합니다 :)

데이터를 /dev/sdb1(아직 존재하지 않음)로 다시 매핑하거나 이동하는 방법이 있습니까?

fdisk는 다음을 제공합니다:

$ sudo fdisk /dev/sdb1
fdisk: cannot open /dev/sdb1: No such file or directory

$ sudo fdisk /dev/sdb
Device /dev/sdb already contains a ext4 signature.
The signature will be removed by a write command.

Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0x4096cdf8.

Command (m for help): p
Disk /dev/sdb: 200GiB, 214748364800 bytes, 419430400 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
Disklabel type: dos
Disk identifier: 0x4096cdf8

예, 아주 작은 드라이브입니다! VirtualBox 가상 머신에서 Debian Stretch를 사용하고 있습니다.

df에 답장하다:

$ df -h
Filesystem Size  Used  Avail  Use%  Mounted on
/dev/sdb   196G  116G   71G    63%  /media/mymountdir

@MarkPlotnick이 말했듯이 가상 머신에 있기 때문에 이 작업을 상당히 쉽게 수행할 수 있다는 것을 알고 있습니다. 하지만 cli 기반 방법이 있는지 알고 싶습니다. 감사해요!

답변1

할 수 있는전체 디스크(파티션 아님)에 ext4(또는 기타) 파일 시스템을 작성합니다. 하지만 이렇게 하면 전체 원시 장치를 사용하는 파티션 테이블이 없다는 의미입니다.

디스크에서 부팅하는 경우 가능합니다.그리고파티션 테이블을 만든 다음 실수로(디스크 정보가 여전히 메모리에 있는 상태에서) ext4로 포맷하여 파티션 테이블을 덮어씁니다(예: mkfs.ext4 /dev/sdb대신 사용 mkfs.ext4 /dev/sdb1). 결과적으로 디스크에는 유효한 파티션 테이블이 없지만(이제 ext4 시작 블록이 있음) 파일 시스템은 크기를 독립적으로 저장하므로 여전히 작동합니다(일부 외부 디스크에서도 수행됨). 장치를 파티션처럼 마운트하면 됩니다. sdb다른 방법으로 사용하던 곳에서 사용 하면 됩니다 sdb1.

다음은위험한당신이 상상할 수 있는 것처럼. 이미 백업이 있어야 합니다. 그렇지 않은 경우 백업을 받으세요.지금. 반면에 백업이 없다면 해당 데이터에 별로 관심이 없다는 의미입니다(하드웨어 오류, 소프트웨어 오류 또는 경우에 따라 커피를 쏟거나 파이프가 터질 위험이 있음). , 도난, 자연재해, 부자연재해)이므로 최악의 상황이 발생하더라도 큰 해를 끼치지는 않습니다.

고쳐 쓰다: 당신이 무료라면백업하기, 다시 포맷하고 다시 설치하세요. 교대근무 방식과 정확한 타이밍은 동일하지만 데이터 보안이 100% 강화됩니다. 백업 복사본을 삭제하지 않으면 업데이트된 백업 이미지를 무료로 받을 수 있습니다.

첫 번째 단계:크기 조정ext4 파일 시스템을 사용하여 전체 디스크 실린더만큼 단축합니다. 파티션 테이블에서 실린더 크기를 가져오는 hdparm것은 존재하지 않습니다(fdisk는 섹터의 구성 방식이 아닌 총 섹터 수를 알려줍니다). 일부 외부 USB 드라이버에서는 디스크 제조사와 모델을 읽고 이를 사용하여 인터넷에서 정보를 검색해야 할 수도 있습니다. SATA 드라이버는 괜찮을 것입니다.

이제 얼마만큼인지 알았으므로 파일 시스템의 크기를 조정하고 전체 파티션을 디스크 끝으로 "오른쪽" 이동하여 처음에 파티션 테이블과 시작 빈 공간이 있는 실린더를 확보할 수 있습니다( 난 별로 명확하지 않아LBA 디스크에서 sdX1은 파티션 테이블 다음에 실린더(또는 트랙)를 시작해야 하지만 시도해 볼 가치가 있는 것을 본 적이 없습니다.

파티션을 이동하려면 매우 위험한 방법을 사용할 수 있습니다.버퍼 전략또는취소옵션 dd_rescue(이 옵션이 작동하지 않는다는 버그 보고서를 본 것 같습니다).

더 큰 파일(예: 1GB)을 시도하고 두 옵션 중 하나가 작동하는지 확인하고 파일 크기가 동일하게 유지되도록 데이터가 파일 시작 부분에서 16MB 이동되도록 내용을 이동할 수 있습니다. 이런 일이 일어나고 있는지 확인합니다. 그런 다음 /dev/sdb적절한 오프셋을 사용하여 반복합니다.

그런 다음 를 fdisk사용하여 파티션 테이블을 다시 만듭니다.

행운을 빌어요!

답변2

보시다시피 실제 블록 장치에 파일 시스템을 생성하면 fdisk해당 파일 시스템은 데이터가 다른 곳으로 이동될 때까지 더 이상 친구가 되지 않습니다. 파일 시스템을 마운트하고 데이터를 복사한 다음 마운트 해제해야 합니다. 그런 다음 fdisk블록 장치를 올바른 방법으로 분할하고, mkfs파티션에서 사용하고, 마운트하고, 데이터를 다시 이동할 수 있습니다.

$ sudo -s
# mkdir -p /mnt/export
# mount /dev/sdb /mnt/export
# exit
$ rsync -a /mnt/export/ /path/to/backup/
$ sudo -s
# umount /mnt/export
# fdisk /dev/sdb  # create your partitions
# mount /dev/sdb1 /mnt/export
# exit
$ rsync -za /path/to/backup/ /mnt/export/

답변3

이미 가지고 있는 구성은 가상 머신에 적합하지 않습니다. 이를 통해 시스템에 더 많은 디스크를 쉽게 추가할 수 있습니다.

분할된 테이블이 있는 경우 다음 접근 방식을 고려하세요.

  • 관리자가 가상 ​​머신에 대한 디스크 할당을 늘립니다.
  • 가상 디스크를 다시 검색하거나 가상 시스템을 다시 시작합니다.
  • 파티션 항목을 삭제하고 더 큰 크기로 다시 생성합니다.
  • 파일 시스템 크기를 조정합니다.

파일 시스템이 파티션 테이블 없이 디스크에 직접 위치하는 경우 지루한 세 번째 단계는 생략할 수 있습니다.

관련 정보