실제 파티션만 있고 그 뒤의 빈 공간은 없는 SD 카드의 이미지를 얻는 방법은 무엇입니까?

실제 파티션만 있고 그 뒤의 빈 공간은 없는 SD 카드의 이미지를 얻는 방법은 무엇입니까?

나는 총 6GB의 두 개의 파티션이 있는 16GB SD 카드(구체적으로 PinePhone용 부팅 가능한 Mobian SD 카드)를 가지고 있습니다. 남은 공간은 할당되지 않았습니다. SD 카드의 6GB 이미지를 어떻게 얻을 수 있나요?

답변1

약간 취약한 명령을 사용하여 요청에 따라 드라이브의 첫 번째 섹션을 이미지 파일에 복사하는 것이 가능합니다. 그러나 알아야 할 몇 가지 사항이 있습니다.

  • 명령줄에서 장치 파일에 직접 액세스해야 하므로 전체 명령을 다음과 같이 실행해야 합니다. root( sudo su솔루션 사용 전 명령)
  • 백업 파티션 테이블(GPT 파티션 테이블인 경우)~ 할 것이다아니다복사되다.
  • "트릭"은 완성된 파티션 테이블에 따라 다릅니다. 즉, 할당되지 않은 공간이 언급되어 있습니다.정말로복사하고 싶지 않은 파티션이 아니라 할당되지 않았습니다.
  • 파티션 또는 파티션은 전면에 수집됩니다. 공백이 있으면 해당 공백이 복사됩니다.
  • fdisk이는 명령(아마도)과 명령(가능한)이 모두 설치된 시스템에 따라 다릅니다 bc. 둘 다 표준이며 필요한 경우 기본 저장소에서 설치할 수 있습니다.
  • 이미지 파일은 루트가 소유하므로 chown사용자에게 전체 액세스 권한이 필요한 경우 루트가 있어야 합니다.

다음은 읽기 쉽도록 줄로 구분된 전체 명령입니다.

dd if=/dev/sdx of=Mobian.img\
    bs="$(fdisk -l /dev/sdx | grep sectors | tail -1 | cut -d' ' -f6)"\
    count="$(echo "$(fdisk -o end -l /dev/sdx | tail -1) + 1"|bc)"\
    status=progress

분석:

먼저, /dev/sdx이전에 연결된 23개의 다른 디스크가 없는 한 올바른 장치 이름을 반영하도록 변경해야 합니다.

첫 번째 줄은 예상되는 dd명령이며 장치 이름과 파일 이름은 현재 요구 사항에 맞게 설정됩니다.

두 번째 줄은 블록 크기를 ddSD 카드의 섹터 크기로 설정합니다. 거의 확실하게 512바이트입니다. 512라고 100% 확신한다면 줄을 bs=512. 안전을 유지하고 향후 모든 장치에서 명령을 사용할 수 있도록 하려면 추가 항목을 거기에 보관하세요. 작업은 다음과 같습니다.

  • fdisk -l /dev/sdx장치에 대한 데이터 보고
  • grep sector출력에 '섹터'가 두 번 나타납니다.
  • tail -1'섹터'가 포함된 마지막 줄만 가져옵니다.
  • cut -d' ' -f6필드 사이에 공백을 사용하면 6번째 필드만 가져옵니다(섹터 크기(바이트))

세 번째 줄은 복사할 dd크기의 '블록' 수를 나타냅니다. bs=다시 말하지만, 해당 숫자가 무엇인지 정확히 아는 경우 명령 대신 해당 숫자를 사용하십시오. '미래 보장'을 위해 다시 한 번 전체 명령을 유지했습니다.

- `fdisk -o end -l /dev/sdx` list the partition information about the device, and only output the ending sector ID of each `-o end`
- `tail -1` it don't matter how many there are, we only need the last sector of the last partion.
- `echo "... + 1" | bc` add one to the last sector ID. Uses the `bc` command, which is in integers unless told otherwise. Sectors are numbered from zero, to to copy sector #10 we have to copy 10 + 1 sectors (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

네 번째 줄은 엔터테인먼트 가치를 위한 것입니다. 좋은 카드인 속도 클래스 10은 6GB의 데이터를 읽는 데 거의 4분이 걸립니다. 옵션 status=progress을 사용하면 dd터미널이 "진행"됨에 따라 업데이트됩니다. 그렇지 않으면 명령이 완료되기를 기다리는 터미널을 갖게 되며, 영원히 느껴질 것입니다.

최종: 복사하는 항목이 적절하게 정렬된 파티션과 정확히 6GiB를 갖춘 표준 표준임을 확실히 알고 있는 경우 다음과 같은 간단한 명령을 사용할 수 있습니다.

dd if=/dev/sdx of=Mobian.img bs=1048576 count=6145 status=progress

물론 일단 새 이미지를 만들고 그 이미지로 전환하면 짧은 버전에 대한 모든 베팅은 취소됩니다. 원래 위쪽 상단은 계속 작동합니다. 나중에 복사해야 할 다른 '이미지'에도 작동합니다.

보너스:

어떤 이유로 든 마음에 들지 않으면 dd동일한 숫자 수집 단계를 사용하고 head대신 명령을 적용할 수 있습니다.

head -c $(\echo "\
    "$(fdisk -l /dev/sdx | grep sectors | tail -1 | cut -d' ' -f6)" *\
    ("$(fdisk -o end -l /dev/sdx | tail -1)" + 1)" | bc)\
    /dev/sdx > Mobian.img

한 줄로 말하면:

head -c $(\echo " "$(fdisk -l /dev/sdx | grep sectors | tail -1 | cut -d' ' -f6)" * ("$(fdisk -o end -l /dev/sdx | tail -1)" + 1)" | bc) /dev/sdx > Mobian.img'

답변2

linux dd 명령을 사용할 수 있습니다. 두 파티션을 개별적으로 읽고 나중에 연결하거나 몇 가지 계산을 수행하여 두 번째 파티션의 마지막 섹터를 결정하도록 선택할 수 있습니다. 그런 다음 bs(블록 크기) 및 count(블록 수) 매개변수를 사용하여 dd 명령을 실행하여 두 번째 파티션 끝에서 복사를 종료합니다.

관련 정보