http://blog.naver.com/dowkim10?Redirect=Log&logNo=120119813742 에서 참조하였습니다.
이전글에서 설명했다시피 갤럭시s는 oneNAND와 moviNAND로 구성되어 있다.
내부적으로 oneNAND는 12개의 파티션과 moviNAND는 2개의 파티션으로 구성되어 있으며, rfs나 fat32로 포맷이 되어 있는상태이다.
kies를 통한 새로운 펌웨어 업데이트, 공장초기화, odin을 통한 플래시의 과정에서도 어떠한 파티션의 변경및 포맷은 하지 않는다.
만약, 이런저런 이유로 포맷을 하고자 하는 경우는 직접 내부 유틸을 사용하여 작업해야 한다.
하지만, 내부구성및 파라미터를 알지 못하는 상황에서 잘못 사용되는 경우 폰이 부팅을 하지 못하며 복구하기가 힘들다.
(odin으로 순정 펌웨어 전체를 써넣으도 복구가 안된다.)
따라서, 상당히 조심스러운 작업이 필요한 내용이다.
먼저 삼성에서 설명하는 oneNAND, moviNAND, rfs에 대한 설명이다.
http://www.samsung.com/global/business/semiconductor/products/fusionmemory/Products_RFS_Brochure.html
oneNAND가 SLC고 moviNAND가 MLC로 되어 있다.
갤럭시s의 moviNAND가 MLC로 되어 있어 느리긴 하지만 (MAX 52M/s), 일반적으로 사용하는 SD카드보다는 훨씬 빠르다.
(본인은 /data를 외장sd에 ext3로 사용하지만, 내장sd(moviNAND)를 ext3나 ext4로 사용하면 훨씬 빠를것으로 생각된다.)
oneNAND의 파티션및 포맷
oneNAND는 bml(block managemet layer)과 stl(section transection layer)로 구성되어 있다.
참고)
http://movitool.ntd.homelinux.org/trac/movitool/wiki/RFS
현재로서는 bml과 stl이 1:1의 관계로 되어 있으며, 필요에 따라서 1개의 bml을 쪼개어 여러개의 stl로 만들수는 있을것으로 보인다.
이를 위해서 삼성에서 제공하는 파티션 툴 (ffdisk)가 있어야 하나, 프로요에서 제거된것으로 보인다. - 이클레어때는 있었던것으로 기억한다. (/sbin/ffdisk)
(bml이 12개로 된것은 커널에서 한것으로 바꿀수 없다. 아마도 fsr.ko나 fsr_stl.ko에서 한것으로 보인다.)
현재까지는 bml을 여러 stl로 쪼갤필요가 없고, stl의 파티션의 사이즈를 조절할 필요도 없기 때문에 자세한 내용은 생략한다.
bml1-7까지는 펌웨어, bootloader, 커널등이 위치하므로 건드리지 않는것이 좋으며, 나머지 일부 영역에 대해서는 rfs대신 ext계열로 바꿔어 쓸수 있다.
stl10 (/dbdata)
stl11 (/cache)
그리고, /system(stl9)는 정식 업데이트(kies)나 odin을 통한 rfs 업데이트(factoryrfs.img)시 bml에 대해 직접 이미지를 쓰는것이기 때문에 포맷이 필요하지 않다. (rfs로 된 이미지 파일이다)
oneNAND의 stl 9-11는 rfs로 되어 있는데, 이것으로 ext로 바꾸거나 아니면 외장sd에 파티션을 만들어서 대체한다면 사용상의 체감성능이 달라질수 있다.
파티션은 /system/bin/fat.format 을 사용한다.
http://forum.xda-developers.com/showthread.php?t=797672&page=68
위 내용에 따르면, stl (oneNAND)의 경우 FAT16, logical sector size (4096), sector per cluster(1)로 하거나 인자를 주지 않고 한다.
예)
fat.format -F 16 -S 4096 /dev/block/stl10 또는 fat.format /dev/block/stl10
(인자를 주지 않으면 fat.format자체에서 적당한 파라미터를 대입한다고 하니 인자를 주지않는게 낳을듯)
moviNAND의 파티션 포맷
moviNAND는 첫번째는 fat32이므로 윈도우 상에서도 포맷이 가능하다. 두번째 파티션은 rfs이므로 갤럭시 내부에서 fat.format을 사용하여야 한다.
예)
# fat.format /dev/block/mmcblk0p2
위와 같이 /data 파티션을 포맷하게 되면 어플이나 환경이 사라지고 공초된 형태가 된다.
(/data 부분이 이상하다고 판단되면 포맷을 해볼수도 있다.
단, 폰이 동작하는상태에서 하면 안된다. 엄밀하게 얘기하면 /data가 마운트된 상태에서 하면 안된다.)
만약 파티션의 크기나 사이즈를 조절하고자 한다면, fdisk를 사용하면 되는데, fdisk는 순정에서 포함되어 있지 않으므로 arm용을 구해서 사용해야 한다.
(인터넷을 돌아다 보면 갤럭시에서 사용하는 fdisk를 구할 수 있다.)
(fdisk를 통한 파티션 위치 변경은 /data 파티션의 bad block문제만 아니라면 특별히 사용할 일이 없을듯)
만약 내부 /data를 rfs가 아닌 ext계열로 바꾸고자 한다면 다음과 같이 ext계열로 바꿀수 있지만, ramdisk의 init.rc도 수정해야 한다.
(다음 명령은 폰이 일반 모드로 부팅한 상태에서 하면 안된다. recovery mode에서 하거나 외장 sd가 패치된 커널에서 사용해야 한다.)
예)
$ su
# busybox tar cvf /sdcard/data.tar /data/* (백업)
# umount /data
# mkfs.ext3 /dev/block/mmcblk0p2 (또는 mke2fs -t ext3 /dev/block/mmcblk0p2)
# mkdir /skttmp/tmp
# mount -t ext3 /dev/block/mmcblock0p2 /skttmp/tmp
# cd /skttmp/tmp
# tar xvf /sdcard/data.tar (복원)
# cd /
# umount /skttmp/tmp
init.rc의 수정
# mount rfs /dev/block/mmcblk0p2 /data nosuid nodev check=no,iocharset=cp437 (원본)
mount ext3 /dev/block/mmcblk0p2 /data nosuid nodev
위의 내용은 본인이 직접 해본것은 아니므로 잘 판단해 보시기 바란다.
(프로요때 딱 한번 공초했던 적이 있는데, 여간 불편한게 아니라서 폰은 왠만하면 안 건드린다.)
'Linux 일반' 카테고리의 다른 글
git diff 한 것을 patch하기 (0) | 2011.10.27 |
---|---|
Beyond compare 리눅스에서 30일 제한 풀기 (1) | 2011.10.27 |
ubuntu 11.04에서 teamviewer 64bit 설치하기 (0) | 2011.07.12 |
Ubuntu 11.04에 eclipse 설치하기 (0) | 2011.07.05 |
64bit Ubuntu 에서 Beyond compare 설치 방법 (0) | 2011.06.06 |