마지막에 분할되지 않은 공간이 포함 된 16Gb 카드 이미지 : 잘림?


18

친구를 위해 배포판을 준비하고 싶었습니다.
주위에 다른 것이 없었기 때문에 16Gb SD 카드를 사용했습니다.

기본 Debian Weezy 2Gb 이미지로 시작하여 크기 조정을 수행하지 않았습니다.
이제, 내가 한 일의 이미지를 만들고 싶었지만 마지막에 14Gb의 파티션되지 않은 (파티션되지 않은 여유 공간 )을 포함하는 16Gb 파일을 얻습니다 .

[지금 당장 rPI를 고수 할 것이 없기 때문에 Windows // Win32DiskImager를 사용했습니다.]

분할 된 공간 바로 뒤에서 이미지 파일을 잘라 내고 선행 부분을 더 작은 카드로 옮길 수 있습니까?


2
Linux 컴퓨터에 액세스 할 수있는 dd if=/dev/path/to/SD/card of=~/SpecialImage.img경우을 실행 한 다음 GParted를 설치하고 실행하십시오 gparted ~/SpecialImage.img. GParted가 .img파일을 열면 원하는대로 파티션 크기를 조정하십시오! (두 명령 모두 루트로 실행 sudo su해야하고 필요한 것을 가져와야합니다.로 $전환 하면 #루트입니다.주의해서 Linux와 동일합니다.) GParted는 기본적으로 비전 파티 관리를위한 GUI 프론트 엔드입니다. 필요한 도구. GParted를 사용하면 모든 것이 훨씬 간단하고 성공할 수 있습니다.
JamesTheAwesomeDude

Plese는 내 질문을주의 깊게 읽습니다.
Nippey

예, 귀하의 질문을 읽었으며 디스크 이미지를 자르는 것만으로도 위험하다고 말할 수 있습니다. 물론, 이미지의 마지막 바이트를 잘라낼 수는 있지만, 특히 Linux가 의도적으로 파일의 간격을 두기 때문에 실수로 파일을 제거하지 않을 것이라는 보장은 없습니다 . 또한 파일 시스템 끝에 중요한 메타 데이터가있을 수 있습니다. 적절한 파일 시스템 크기 조정 유틸리티를 사용하는 것이 파일의 끝 부분을 직접 제거하는 것보다 전체적으로 더 안전합니다.
JamesTheAwesomeDude

1
글쎄, 나는 파티션되지 않은 공간에 대해 이야기하고 있습니다. Linux조차도 파티션되지 않은 것으로 표시된 디스크 공간에 데이터를 넣지 않지만 파티션 테이블에 기록 된대로 블록 내에 남아 있습니다. 이미지 파일 형식으로 인해 문제가 발생했습니다. 이미지 파일에 파일 끝에 메타 데이터가있을 수 있으므로 파일 정보가 잘리지 않을까 걱정했습니다. (내 이전의 의견이 너무 세게 들리지 않았 으면
좋겠습니다

오, 지금 네가하는 말을 알아 손상된 후행 여유 공간이 걱정되면 이미지를 자른 후 이미지에서 GParted를 실행하십시오. 아마도 마지막 영역을 "할당되지 않은"또는 "손상된"으로 나열 할 것입니다. 해당 공간에 새로운 "형식화되지 않은"파티션을 만듭니다. 그러면 아무런 문제가 없습니다. :)
JamesTheAwesomeDude

답변:


33

마침내 내 질문을 설명하는 자료를 찾았습니다.

http://softwarebakery.com/shrinking-images-on-linux

짧은:

예, 잘릴 수 있습니다!

프로세스 요약 :

사용하여 이미지에서 파티션 정보를 추출 fdisk:

$ fdisk -lu image.img
Disk image.img: 4096 MB, 4096000000 bytes, 8000000 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 identifier: 0x000a1bc7

      Device Boot      Start         End      Blocks   Id  System
image.img1              2048     5872026     5869978    b  W95 FAT32

우리는 파티션의 크기가 약 2,8Gb (5872026 * 512)이고 나머지는 파티션되지 않은 것을 알 수 있습니다.

따라서 파티션 종료 후의 모든 것을 제거 할 수 있습니다.
이 도구로 수행됩니다 truncate. 블록 번호가 0에서 시작하므로 섹터 수에 1을 추가하는 것을 잊지 마십시오.

$ truncate --size=$[(5872026+1)*512] image.img


편집하다:

사람들을 위해 리눅스로 전환 너무 게으른 것 :
또한 함께 윈도우에서 작동 Cygwin에서fdisk.exetruncate.exe!

Cygwin은 무엇입니까?

"Cygwin : Windows에서 Linux 사용하기"( https://www.cygwin.com/ )를 인용 할 수 있습니다 .
Windows에서 실행할 수 있지만 Linux에서 일반적으로 알고있는 모든 명령 줄 프로그램을 제공하는 실행 파일 세트입니다. 설치 중에 모든 패키지를 선택하면 Cygwin을 설치하는 데 시간이 오래 걸릴 수 있지만이 예제를 따르려면 기본 구성 외에 패키지 util-linux(fdisk) 및 coreutils(잘라 내기)도 선택되어 있는지 확인하십시오 .
사용자의 환경에 따라 사람의 필요 추가 /usr/bin하고 /usr/sbin당신을에 $PATH.


1
어떤 패키지를 얻기 위해 설치 내가 필요합니까 fdisk.exetruncate.exe?
PythonNut

1
안녕하세요 @PythonNut, 위의 답변을 업데이트하고 필요한 패키지를 추가했습니다 : o)
Nippey

파티션의 크기가 디스크 사용량이 적더라도 어떻게됩니까?
piegames

5

나는 이것이 오래된 질문이라는 것을 알고 있지만 Mac 에서이 프로세스를 수행하는 방법을 보여 드리고 싶습니다. 쉽지 fdisk않습니다. -l옵션 truncate이 없으며 기본적으로 설치되지 않습니다.

1. 1 단계 : Mac OS X에서 잘라 내기 설치 :

이를 위해서는 MacPorts 또는 Homebrew가 필요합니다. MacPorts를 사용합니다. 이 중 하나가 없으면 먼저 설치하십시오. MacPorts에 연결

이제 truncate 를 설치할 수 있습니다 . 터미널을 열고 다음을 입력하십시오.

sudo port install truncate

Brew 설치의 경우 :

brew install truncate

그렇게해야합니다.

2. 디스크 유틸리티를 사용하여 diskutil 터미널 명령에 표시되도록 IMG를 마운트하십시오 .

이 단계가 왜 필요한지 잠시 후에 알게 될 것입니다. 디스크 유틸리티 앱을 엽니 다. 파일 (상단 표시 줄) -> 디스크 이미지 열기를 클릭하고 IMG 파일을 선택하십시오.

3. IMG의 파티션 크기와 마운트 위치를 확인하십시오.

터미널에서 다음을 입력하십시오.

diskutil list

그리고 그것은 결국 어딘가에 다음과 같이 보일 것입니다 :

/dev/disk3 (disk image):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        +16.0 GB    disk3
   1:             Windows_FAT_32 boot                    62.9 MB    disk3s1
   2:                      Linux                         3.9 GB     disk3s2

따라서 약 12GB가 분할되지 않은 것으로 나타났습니다. 우리는 그것들을 잘라야합니다.

이 명령이 필요한 이유는 디스크 이미지가 마운트 된 위치를 확인하기위한 것입니다. 내 경우에는 / dev / disk3 아래에 있습니다.

4. 실제 파티션 크기를 찾으십시오.

3.9GB 및 62.9MB는 잘라 내기에서 작동하지 않는 값입니다. 파티션 크기를 바이트 단위로 찾아야합니다.

5. fdisk를 실행하십시오 .

터미널에서 다음 명령을 실행하십시오.

   fdisk /dev/diskX

여기서 X 는 이전 단계에서 찾은 숫자입니다. 결과는 다음과 같습니다.

         Starting       Ending
 #: id  cyl  hd sec -  cyl  hd sec [     start -       size]
------------------------------------------------------------------------
 1: 0C    0 130   3 -    8  40  32 [      8192 -     122880] Win95 FAT32L
 2: 83    8  40  33 -  478  79  49 [    131072 -    7553024] Linux files*
 3: 00    0   0   0 -    0   0   0 [         0 -          0] unused      
 4: 00    0   0   0 -    0   0   0 [         0 -          0] unused      

6. 잘릴 시간 !

터미널에서 cd이미지가있는 디렉토리로 이동하십시오. 그런 다음 다음을 작성하십시오.

truncate FILE SIZE

FILE은 물론 파일입니다.

SIZE는 바이트 단위의 크기입니다. 내가 한 것은 명령 의 크기 열에 시작 열을 추가하고 512를 곱하는 것입니다. 따라서 필자의 경우 SIZE는 512 * (7553024 + 131072) = 3934257152 이며 대략 3.9GB입니다.fdisk

당신은해야합니다 시작크기마지막 파티션 으로 표시됩니다 fdisk. (반드시 가장 큰 것은 아니지만 IMG 파일의 끝에있는 것)

나는 약간의 실험을했고 7553024 * 512 또는 (7553024 + 1) * 512 바이트를 입력 할 때마다 IMG 파일이 손상되었습니다. 따라서 위의 지시대로 수행하십시오. 실제로 필요한 것 이상을 추가 할 수도 있지만 안전한 옵션입니다.

7. (선택 사항) IMG가 손상되지 않았는지 쉽게 테스트합니다.

디스크 유틸리티에서 한 번 더 가서 이전과 같이 새 IMG 파일을 열어보십시오. 마운트되면 새로운 (더 작은) 크기 도 볼 수 있습니다 . 마운트되지 않으면 문제가 발생한 것입니다. ( truncate명령 에서 크기를 늘려보십시오 )

이것은 최상의 테스트는 아니지만 새 IMG가 손상되었는지 확인하는 확실한 방법입니다. 따라서 실제로 그것에 의존하지는 않지만 시도해 볼 가치가 있습니다 ...

누군가가 도움이되기를 바랍니다.


1
좋은 것! 지식을 확장 해 주셔서 감사합니다. :) 512*(Size+1)작동하지 않는 것이 좋습니다. 보시다시피, 두 개 이상의 파티션이있는 경우 두 파티션을 모두 유지해야하므로 사용 End하지 않았습니다 Size. 따라서 7553024 + 131072( +1)를 사용하면 100 % 정확합니다!
Nippey

1

최근 Win32DiskImager에는 실제로 디스크 이미지에 할당 된 파티션 만 포함하는 옵션이 있습니다. 한 번의 클릭으로 트리밍이 수행됩니다.

여기에 이미지 설명을 입력하십시오


훌륭합니다. Windows에서 훨씬 더 쉽습니다!
Nippey

0

배포를 위해 RPI 이미지를 백업하기 위해이 Win32diskimg 작업을 많이 수행하면서 최근에 알게 된 것입니다. 나는 최근 이론적 인 마모 레벨링에 사용되지 않는 SD 카드의 일부를 청소하기 위해 SD "트리밍"fstrim 테스트를 시작했습니다. 16GB SD 파티션을 이미지화 한 다음 7zip을 사용하여 압축했을 때의 효과에 대해서는 확실하지 않지만 한 가지 부작용이있었습니다. 나는 보통 16GB에서 9.5GB로 2.5GB 파일로 갔다. 아무 문제가 없는지 지금 테스트 중이지만 TRIM을 사용하여 사용하지 않는 공간을 0으로 표시하면 이미지 압축이 훨씬 효율적입니다 (이치가있는 것 같습니다). 이 작업을 매우 쉽게 수행 할 수 있고 여러 단계를 거치지 않았다고보고하고 싶었습니다.


틀리지는 않지만 실제로 질문을 다루지는 않습니다.
RalfFriedl
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.