넥서스 7/2세대/리파티션 및 벽돌 복구

덤프버전 :

상위 문서 : 넥서스 7/2세대

  • 이 문서는 넥서스 7 2세대(2013년 발매)에 커스텀 롬이나 GApps를 설치할 때 system 파티션의 용량 부족으로 설치가 정상적으로 되지 않는 상황에 대응해 충분한 용량을 system 파티션에 할당하는 방법을 기술하는 문서입니다.
  • 리파티션 스크립트를 이용해 system 파티션의 용량을 늘리는 작업은 특별한 설명이 필요치 않고, 스크립트를 수정하지 않는 한 최대 1380MB까지만 확보가 가능하므로 이 문서의 목적에 맞지 않아 별도로 기술하지 않고 링크로 대체합니다. 이 문서는 그 이상의 용량을 확보하는 방법을 기술하려는 목적으로 작성되었습니다.
  • 이 문서는 넥서스 7 2세대(2013년 발매) 32GB LTE 모델(기기명 deb)을 기준으로 작성되었습니다. 16/32GB WiFi 모델(기기명 flo)이더라도 기본적인 파티션 구조 자체는 같으므로 작업 방식 또한 같습니다.
  • 작업 환경은 윈도우 7 이상이 설치된 컴퓨터를 권장하며 윈도우 XP 이하는 드라이버 호환 문제가 있을 수 있어 추천하지 않습니다. 더불어 작업 중 실수나 예상치 못한 문제가 발생하여 기기가 벽돌(Bricked)이 될 경우[1]에 대한 복구 가이드는 윈도우 환경에서 수행 가능한 내용을 포함하고 있습니다. 리눅스가 설치된 컴퓨터에서도 같은 작업이 가능하지만 윈도우 환경과 다른 부분을 병기하기가 곤란한 부분이 있어 기술하지 않습니다.
  • 이 문서에 기술된 작업을 시행하면 기기 내 사용자 데이터가 완전히 지워지므로, 중요한 데이터는 사전에 백업해두시기 바랍니다.
  • 이 문서는 2023년 5월 20일에 작성되었습니다.


1. 작업 목표 및 대상[편집]


  • 작업 목표 : 기기에 설정된 파티션 중 이동이 가능한 파티션을 재배치하고 잉여 공간을 최대한 활용하여 system 파티션에 충분한 용량을 할당하는 것.
  • 작업 대상은 아래의 파티션 레이아웃 정보를 참조한다.
→ 순정 상태의 파티션 레이아웃 정보 [펼치기 / 접기]
Disk /dev/block/mmcblk0: 3093713050B
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start         End           Size          File system  Name      Flags
        5120B         67108863B     67103744B     Free Space                     // Start offset에서 17KB 까지 파티션 할당 불가.
1       67108864B     156745727B    89636864B     fat16        radio             // $$$
        156745728B    201326591B    44580864B     Free Space
2       201326592B    204472319B    3145728B                   modemst1          // $$$
3       204472320B    207618047B    3145728B                   modemst2          // $$$
        207618048B    268435455B    60817408B     Free Space
4       268435456B    283795455B    15360000B     ext4         persist           // $$$
        283795456B    335544319B    51748864B     Free Space
5       335544320B    336343039B    798720B                    m9kefs1           // $$$
6       336343040B    337141759B    798720B                    m9kefs2           // $$$
        337141760B    402653183B    65511424B     Free Space
7       402653184B    403451903B    798720B                    m9kefs3           // $$$
8       403451904B    406597631B    3145728B                   fsg               // $$$
        406597632B    469762047B    63164416B     Free Space
9       469762048B    471298047B    1536000B                   sbl1              // &&&&
10      471298048B    472834047B    1536000B                   sbl2              // &&&&
11      472834048B    474931199B    2097152B                   sbl3              // &&&&
12      474931200B    480174079B    5242880B                   aboot             // &&&&
13      480174080B    480698367B    524288B                    rpm               // &&&&
        480698368B    536870911B    56172544B     Free Space
14      536870912B    553648127B    16777216B                  boot              // $$$
        553648128B    603979775B    50331648B     Free Space
15      603979776B    604504063B    524288B                    tz                // &&&&
16      604504064B    604505087B    1024B                      pad               // &&&&
17      604505088B    606041087B    1536000B                   sbl2b             // &&&&
18      606041088B    608138239B    2097152B                   sbl3b             // &&&&
19      608138240B    613381119B    5242880B                   abootb            // &&&&
20      613381120B    613905407B    524288B                    rpmb              // &&&&
21      613905408B    614429695B    524288B                    tzb               // &&&&
        614429696B    671088639B    56658944B     Free Space
22      671088640B    1551892479B   880803840B    ext2         system            // @
23      1551892480B   2139095039B   587202560B    ext4         cache             // @
        2139095040B   2263875583B   124780544B    Free Space
24      2263875584B   2264924159B   1048576B                   misc              // @
25      2264924160B   2281701375B   16777216B                  recovery          // @
26      2281701376B   2281709567B   8192B                      DDR               // &&&&
27      2281709568B   2281717759B   8192B                      ssd               // &&&&
28      2281717760B   2281718783B   1024B                      m9kefsc           // **
        2281718784B   2348810239B   67091456B     Free Space
29      2348810240B   2348843007B   32768B                     metadata          // **
        2281718784B   2415919103B   134200320B    Free Space
30      2415919104B   30937169407B  28521250304B  ext4         userdata          // **
        30937169408B  30937181695B  12288B        Free Space                     // End offset에서 12KB 전방까지 파티션 할당 불가.

 @    1순위 작업 대상 : system 파티션과 그에 인접한 파티션으로서, 필수적으로 이동시키거나 크기 조절이 필요한 파티션
 **   2순위 작업 대상 : system 파티션 용량 추가 확보를 위해 이동시키거나 크기 조절이 필요한 파티션
 $$$  3순위 작업 대상 : 잉여공간으로 이동이 가능하고 이동하더라도 문제를 일으키지 않는 파티션
 &&&& 작업 불가       : 이동이나 변조 시 부팅이 되지 않고 벽돌 상태를 유발하는 파티션



2. 사전 준비[편집]



2.1. 준비물[편집]


1. 하드웨어
  • 넥서스 7 2세대 기기
  • 윈도우 7 이상이 설치된 작업용 컴퓨터
  • USB A to micro B 데이터 케이블

2. 소프트웨어
  • 최신 버전의 Android platform-tools 링크
    • 적당한 폴더에 압축을 풀고, platform-tools 폴더 내의 파일을 모두 C:\\temp\\ 폴더로 복사한다. 이후 명령 프롬프트에서의 작업은 C:\\temp\\ 디렉토리에서 진행한다.
  • 윈도우용 Android 드라이버(ADB/Fastboot) 링크
    • 적절한 폴더에 압축을 풀어둔다.
  • 최신 버전의 TWRP 리커버리 링크
    • 기기명에 맞게 다운로드하여 C:\\temp\\에 복사한다.
  • 리파티션 스크립트 zip 파일 링크
    • 적당한 폴더에 압축을 풀고, /bin 폴더 내의 parted 파일만 C:\\temp\\에 복사한다. 다른 파일은 필요치 않다.
  • 순정 공장 초기화 이미지 LTE 모델 WiFi 모델
    • C:\\temp\\에 압축을 풀어둔다.

2.2. 작업 환경 준비[편집]


1. 기기를 부트로더로 진입시킨다.
  • 기기 전원 Off → 전원버튼과 Vol Down 키를 동시에 누르고 있으면 부트로더 상태로 진입한다.

2. 기기 OEM lock 상태를 확인한다.
  • 기기 화면 최 하단의 LOCK STATUS가 unlocked라고 표기되어 있는지 확인한다.
  • locked일 경우 다음과 같이 실행한다.
    • 컴퓨터와 기기를 USB 케이블로 연결한다.
    • \[윈도우키+Pause키]를 눌러 시스템 창 호출 → 장치관리자를 호출하여 \[Android Device - Android Bootloader Interface] 항목이 있는지 확인한다.
      만약 \[Other Device]에 노란색 삼각형으로 표기된 Fastboot / Android 등의 장치가 보일 경우 드라이버를 수동으로 설치해준다.
    • 명령 프롬프트를 열고 fastboot devices를 입력하여 정상적으로 연결되어 있는지 확인한다.
      만약 기기 목록이 전혀 뜨지 않을 경우 컴퓨터를 재부팅하고 장치 드라이버가 정상적으로 설치되어 있는지 다시 확인한다.
    • 명령 프롬프트에서 fastboot oem unlock을 입력하면 기기가 완전히 초기화되는 것을 경고하는 화면이 뜬다. 기기의 Vol Up 키와 전원버튼을 한번씩 눌러 Yes를 선택해주면 LOCK STATUS가 unlocked로 바뀐다.

3. 기기에 TWRP 리커버리를 설치한다.
  • 명령 프롬프트에서 fastboot flash recovery C:\\temp\\twrp-3.7.0_9-0-deb_followmsi.img 를 입력한다.

4. 기기를 리커버리로 진입시킨다.
  • 기기의 Vol Up/Down 버튼을 사용해 RECOVERY MODE를 선택 후 전원버튼을 한번 눌러주면 리커버리로 진입된다.

5. ADB 연결 상태를 확인한다.
  • \[윈도우키+Pause키]를 눌러 시스템 창 호출 → 장치관리자를 호출하여 \[Android Device - Android Composite ADB Interface] 항목이 있는지 확인한다.
    만약 \[Other Device]에 노란색 삼각형으로 표기된 Android Device 등의 장치가 보일 경우 드라이버를 수동으로 설치해준다.
  • 명령 프롬프트에서 adb devices 를 입력한다.
    만약 기기 목록이 전혀 뜨지 않을 경우 컴퓨터를 재부팅하고 장치 드라이버가 정상적으로 설치되어 있는지 다시 확인한다.

6. parted 실행파일을 기기에 복사하고 Shell로 진입하여 실행권한을 준다. 기기에 복사한 parted 파일은 기기 재부팅 시점에 삭제되므로 새로이 리커버리에 진입해 parted 작업을 해야 할 경우 반복하여 실행한다.
  • 다음의 명령을 명령 프롬프트에서 입력한다.

adb shell



2.3. 작업 중 사용할 ADB shell 내 명령 숙지[편집]


1. mount/umount 명령
  • 파티션을 특정 디렉토리에 연결시키거나 연결을 해제하는 명령이다. 다음의 예시를 참조한다.
    • mount /dev/block/mmcblk0p22 /mnt : 22번 파티션을 /mnt 디렉토리에 연결한다. 하나의 파티션을 여러 디렉토리에 동시에 연결할 수 있지만 여러 파티션을 하나의 디렉토리에 연결할 수는 없다.
    • umount /mnt : /mnt 디렉토리와의 연결을 해제한다. 파티션 정보는 입력하지 않는다.

2. dd 명령
  • 파티션을 통째로 이미지화해 파일로 저장하거나 파일을 파티션에 덧씌워주는 명령이다.
  • dd if=\[파티션 또는 이미지파일] of=\[이미지파일 또는 파티션] 형식으로 입력되며, 다음의 예시를 참조한다.
    • dd if=/dev/block/mmcblk0p1 of=/sdcard/01radio.img : 1번 파티션 전체를 /sdcard/01radio.img 라는 파일로 이미지화하여 저장한다. 이 때 해당 파티션의 비어있는 공간도 모두 파일 내에 기록된다.
    • dd if=/sdcard/29metadata.img of=/dev/block/mmcblk0p29 : /sdcard/29metadata.img 라는 이미지 파일을 29번 파티션에 덧씌워준다.

3. parted 실행 파일 사용방법
  • GPT 파티션 정보를 다루고 편집하는 실행 파일이다.
  • parted는 두가지 방법으로 사용할 수 있다.
    • parted /dev/block/mmcblk0 을 입력해 (parted) 프롬프트를 호출하여 명령을 입력하는 방법. 이 경우 별도로 설정한 변수는 parted를 종료할 때 까지 유지된다.
    • parted /dev/block/mmcblk0 \[명령] 을 입력하여 명령을 한번만 실행하는 방법. 이 경우는 parted 프로세스가 종료됨과 동시에 변수 설정도 종료된다.
  • (parted) 프롬프트 내 명령은 다음과 같다. 이 명령들은 한번의 명령줄에 연속하여 입력하면 동시에 실행시킬 수 있다.
    • unit \[B/KB/KiB/MB/MiB/GB/GiB/s] : 파티션 정보를 표시할 때 보여줄 용량 단위를 지정한다.
      뒤의 옵션은 바이트를 1 / 10^3 / 2^10 / 10^6 / 2^20 / 10^9 / 2^30 / 512로 나눈 값으로 표시하는 옵션이다.
    • p \[free] : 파티션 레이아웃 정보를 출력한다. free 옵션을 줄 경우 비어있는 잉여 공간을 포함해 출력한다.
    • rm \[파티션 번호] : 해당 번호를 가지는 파티션을 삭제한다. 파티션이 마운트되어 있는 상태에서는 삭제되지 않으며, Shell에서 umount \[마운트 지점] 을 입력하여 마운트를 해제하면 삭제할 수 있다.
    • mkpart primary \[시작 지점] \[끝 지점] : 새로운 파티션을 생성한다.
      시작 지점과 끝 지점은 현재 할당되어 있지 않은 Free space 내 지점을 입력해야 하며, 반드시 단위를 붙여줘야 한다. 단위는 unit 명령 참조.
      새로 생성되는 파티션은 작은 순서대로 비어 있는 번호가 부여된다.
    • name \[파티션 번호] \[파티션 이름] : 해당 번호를 가지는 파티션에 이름을 지정한다.
    • q : (parted) 프롬프트를 종료한다.


2.4. 리커버리 상태에서 기기와 컴퓨터 간 파일 복사 관련 사항 숙지[편집]


  • 기기가 리커버리에 막 진입한 상태이고 컴퓨터와 USB 케이블로 연결되어 있을 경우 \[내 컴퓨터] - \[Nexus 7] - \[내부 저장소]는 기기 내부의 /sdcard와 연결되어 있는 상태가 된다. 일반적인 윈도우 환경 내에서 파일을 다루는 방식을 그대로 쓸 수 있으니, dd 명령으로 만들어진 파티션 이미지 파일을 컴퓨터에 백업하는 데에 유용하다. adb push / adb pull 명령을 쓸 수도 있지만 매우 번거롭다.
  • 만약 리커버리에서 userdata 파티션의 마운트를 해제하고 파티션을 새로 쓰는 작업을 했을 경우 기기를 재부팅해 리커버리로 재진입하기 전에는 컴퓨터에서 내부 저장소에 접근할 수 없다.


2.5. 파티션 이동 방법 숙지[편집]


  • 파티션 이동은 ADB Shell에서 시행하며 다음의 방법으로 실행한다.
    • system/cache/userdata 파티션
      파티션 삭제 → 번호 오름순에 따라 순차적으로 파티션 할당 → 할당된 파티션 이름 지정 → 기기 재부팅 및 리커버리 재진입 → 파티션 포맷
  • 그 외의 파티션
    파티션 이미지 백업 → 파티션 삭제 → 번호 오름순에 따라 순차적으로 파티션 할당 → 할당된 파티션 이름 지정 → 파티션 데이터 복구

3. 실제 작업[편집]



3.1. 기기 파티션 정보 백업[편집]


  • 기기를 리커버리 상태로 진입시키고, 컴퓨터에서는 명령 프롬프트를 열어 adb shell 명령을 입력한다.
  • ADB Shell로 접속이 되면 다음 내용을 복사해 명령 프롬프트에 붙여넣기 한다.
→ [펼치기 / 접기]
dd if=/dev/block/mmcblk0p2 of=/sdcard/02modemst1.img
dd if=/dev/block/mmcblk0p3 of=/sdcard/03modemst2.img
dd if=/dev/block/mmcblk0p4 of=/sdcard/04persist.img
dd if=/dev/block/mmcblk0p5 of=/sdcard/05m9kefs1.img
dd if=/dev/block/mmcblk0p6 of=/sdcard/06m9kefs2.img
dd if=/dev/block/mmcblk0p7 of=/sdcard/07m9kefs3.img
dd if=/dev/block/mmcblk0p8 of=/sdcard/08fsg.img
dd if=/dev/block/mmcblk0p9 of=/sdcard/09sbl1.img
dd if=/dev/block/mmcblk0p10 of=/sdcard/10sbl2.img
dd if=/dev/block/mmcblk0p11 of=/sdcard/11sbl3.img
dd if=/dev/block/mmcblk0p12 of=/sdcard/12aboot.img
dd if=/dev/block/mmcblk0p13 of=/sdcard/13rpm.img
dd if=/dev/block/mmcblk0p14 of=/sdcard/14boot.img
dd if=/dev/block/mmcblk0p15 of=/sdcard/15tz.img
dd if=/dev/block/mmcblk0p16 of=/sdcard/16pad.img
dd if=/dev/block/mmcblk0p17 of=/sdcard/17sbl2b.img
dd if=/dev/block/mmcblk0p18 of=/sdcard/18sbl3b.img
dd if=/dev/block/mmcblk0p19 of=/sdcard/19abootb.img
dd if=/dev/block/mmcblk0p20 of=/sdcard/20rpmb.img
dd if=/dev/block/mmcblk0p21 of=/sdcard/21tzb.img
dd if=/dev/block/mmcblk0p24 of=/sdcard/24misc.img
dd if=/dev/block/mmcblk0p25 of=/sdcard/25recovery.img
dd if=/dev/block/mmcblk0p26 of=/sdcard/26DDR.img
dd if=/dev/block/mmcblk0p27 of=/sdcard/27ssd.img
dd if=/dev/block/mmcblk0p28 of=/sdcard/28m9kefsc.img
dd if=/dev/block/mmcblk0p29 of=/sdcard/29metadata.img

  • 내 컴퓨터 - Nexus 7 - 내부 저장소 내에 생성된 파일들을 컴퓨터에 백업해둔다.(TWRP 폴더는 백업 불요)

3.2. 리파티션 작업[편집]


  • 작업 환경 준비의 6항을 참고하여 parted 파일을 기기에 복사하고 ADB Shell에 접속해 실행권한을 준다.
  • 작업 시퀀스는 두가지 방향으로 나뉜다.
    • 재할당이 가능한 1~8, 23~25, 29번 파티션을 9번 파티션 이전의 공간에 몰아서 할당하고, system 파티션과 userdata 파티션을 기존 공간의 전/후로 확장하여 재할당하는 방식.
      system 파티션 최대 용량은 1590MB, userdata 파티션 최대 용량은 27328MB까지 확보 가능하다.
      28번 파티션은 이동시켜도 무방하지만 1KB밖에 되지 않는 작은 공간이라 별 의미가 없다.
      • 1~8번, 23~25번, 29번 파티션을 9번 파티션 이전의 공간에 할당한다. 이 때, 23번 cache 파티션은 9번 파티션 이전의 Free space 공간이 최대한 남지 않도록 할당한다.
      • 22번 system 파티션을 21번 파티션과 26번 파티션 사이에 Free space가 남지 않도록 할당한다.
      • 30번 userdata 파티션을 28번 파티션 이후부터 eMMC 디스크 끝까지 할당한다.
→ 작업 후 파티션 레이아웃 정보(예시) [펼치기 / 접기]



  • userdata 파티션이 존재하는 공간을 분할하여 일부를 system 파티션에 할당하고 나머지를 userdata 파티션으로 할당하는 방식.
    system + userdata 합산 최대 용량이 27328MB가 되며, system 파티션은 그 범위 내에서 자유롭게 용량 할당이 가능하다.
    • 29번 파티션을 9번 파티션 이전의 공간에 할당한다.
    • 22번 파티션을 삭제한다.
    • 30번 userdata 파티션을 삭제하고, 그 자리를 적절히 분할하여 22번 system 파티션과 userdata 파티션을 할당한다.
    • 23번 cache 파티션을 삭제하고 잉여공간을 충분히 활용할 수 있도록 파티션을 다시 할당한다.
→ 작업 후 파티션 레이아웃 정보(예시) [펼치기 / 접기]



  • 22/23/30번 파티션을 작업하였다면 기기를 재부팅하여 리커버리에 재진입해야 정상적으로 마운트가 가능하고 이후 컴퓨터와의 연동이나 파티션 포맷 작업 등이 가능하다. 리커버리 재진입 시 parted 파일 복사 및 실행권한을 부여하는 작업이 누락되지 않도록 한다.
  • 9~13, 15~21번 및 26~27번 파티션은 이동 작업 시 벽돌이 되므로 작업하지 않는다. 만약 이 파티션들 중 일부라도 건드렸다면 벽돌 복구 항목을 참조하여 복구작업을 진행한 뒤 다시 파티션 할당 작업을 시행한다.
  • 파티션 정리 작업이 끝나면 부트로더로 재부팅해 순정이미지를 적용하거나 리커버리로 재진입해 커스텀롬을 설치한다.

4. 벽돌 복구[편집]



4.1. 벽돌 상태의 정의[편집]


  • 부팅에 필수적인 파티션 중 일부를 건드려 아예 화면이 들어오지 않고 부트로더 상태로도 진입하지 못하는 상태를 이야기한다.
  • 이 문서에서 다루는 대상은 기기의 전원을 켜둔 상태(전원버튼 누른 상태를 10초 이상 유지)에서 컴퓨터에 연결했을 때 USB 장치 연결음이 들리고 장치관리자에 QHSUSB_DLOAD 라는 이름의 기기가 보일 경우로 한정한다.

4.2. 소프트웨어 준비[편집]


  • MiFlash링크
  • Qualcomm Serial Port 드라이버링크
    • 적당한 폴더에 압축을 풀어둔다.
  • 넥서스 7 2세대용 부트로더 플래시 이미지링크
    • 적당한 폴더에 압축을 풀어둔다.
  • 넥서스 7 2세대 eMMC용 GTP 테이블 바이너리링크
    • 적당한 폴더에 압축을 풀고, Restock - data 폴더 내의 gpt_both0.bin 파일만 C:\\temp\\에 복사한다.
  • 순정 공장 초기화 이미지에서 추출한 부트로더 이미지 및 최신 버전의 TWRP 리커버리
    • 준비물 항목의 상태를 그대로 사용한다.

4.3. 작업 순서[편집]


1. 기기를 컴퓨터에서 분리시키고 전원버튼 누른 상태를 10초 이상 유지한다. 기기 화면은 변화가 없으나 재부팅된다.

2. 기기를 컴퓨터에 연결했을 때 USB 장치 연결음이 들리고 장치관리자에 노란색 삼각형과 함께 QHSUSB_DLOAD 라는 장치가 보이면 기기 드라이버(Qualcomm Serial Port)를 설치한다. 장치 관리자에 보여지는 장치 이름에 Qualcomm HS-USB QDLoader 9008 (COMx) 이 보여야 제대로 통신이 가능한 상태이다. 만약 Qualcomm HS-USB Diagnostics 9006 (COMx) 이 보인다면 외장 디스크로 인식되는 상태이니 \[디바이스 제거]-\[기기 재부팅]-\[컴퓨터 재부팅]-\[드라이버 설치] 과정을 반복한다.

3. MiFlash를 설치한다.

4. MiFlash를 실행하고 Refresh 버튼을 눌러 기기 목록이 갱신되는지 확인한다. Device 항목에 COMx 형식으로 표기되어야 하며, ₩?₩... 형식으로 알아보기 어려운 문자열이 뜬다면 2번 항목에서 언급한 외장 디스크 상태이므로 \[디바이스 제거]-\[기기 재부팅]-\[컴퓨터 재부팅]-\[드라이버 설치] 과정을 반복한다.

5. MiFlash의 Browse를 눌러 부트로더 플래시 이미지가 있는 폴더를 지정한다.

6. Flash all except storage를 선택해두고 Flash 버튼을 누른다. 약 85~90초 뒤에 기기를 분리하고 기기 전원버튼과 Vol Down 버튼을 동시에 10초 이상 누르고 있으면 부트로더로 진입하게 된다.

7. 명령 프롬프트에서 GPT 바이너리와 순정 부트로더, TWRP 리커버리를 설치한다.
8. 리커버리로 진입이 가능한지 재차 확인하고, 부트로더로 재부팅해 순정이미지를 적용하거나 리커버리에서 수동 리파티션 작업과 커스텀롬 설치를 진행한다.


5. 참고 사이트 링크[편집]




파일:크리에이티브 커먼즈 라이선스__CC.png 이 문서의 내용 중 전체 또는 일부는 2023-11-07 00:14:24에 나무위키 넥서스 7/2세대/리파티션 및 벽돌 복구 문서에서 가져왔습니다.

[1] 하드웨어적인 문제가 없고 단순히 작업 중 문제가 생겨 부트로더 모드 진입이 되지 않는 경우에 한정