'갤럭시S7'에 해당되는 글 1건

  1. 2016.04.25 갤럭시 S7에서 SD카드를 내장 메모리처럼 써봅시다. 102
2016. 4. 25. 08:39

갤럭시 S7에서 SD카드를 내장 메모리처럼 써봅시다.

갤럭시 S6에서는 없어졌던 외장 MicroSD 카드(이하 SD카드) 슬롯을 갤럭시 S7에서 되살려준 것은 좋으나... 실사용 시에 꽤 불편하더군요.
어떤 앱들은 외장 SD 카드에 아예 접근을 못하고, 어떤 앱들은 SD에 쓰려고 할 때 별도의 권한 설정을 요청하고,
또 어떤 앱들은 폴더 위치를 기억해줘야 편한데, 최근 폴더가 SD카드에 있을 경우 폴더 위치가 리셋되는 등 가지가지로 불편합니다.
예를 들어 구글 포토에서는 외장 SD카드의 사진을 수정할 수는 있지만 수정된 사진을 다시 SD카드에 저장하지는 못합니다-_-

제가 갤럭시 S3(젤리빈)를 쓸 때는 외장 SD카드를 내장 메모리와 차별 없이 자유롭게 쓸 수 있었더랬는데,
안드로이드 킷캣 버전부터 제약들이 좀 강화됐다더군요.
안드로이드에서 이렇게 SD카드를 차별하는 이유는 SD카드의 파일 시스템 포맷으로 FAT32를 많이 쓰는데,
상당히 오래된 이 포맷은 파일 권한설정 기능이 미비해서 보안 문제를 일으킬 수 있는 잠재적 위험성이 있기 때문입니다.

이 불편사항에 관한 사용자들의 원성이 컸는지
구글은 마시멜로 버전부터 Adoptable Storage라고 해서 외장 SD카드를 내장 메모리처럼 쓸 수 있는 기능을 넣어줬습니다.
그런데 삼성과 LG가 갤럭시 S7과 G5에서는 이 기능을 숨겨놨네요.
아마도 이 기능으로 인해 골치 아픈 고객 지원 문제가 생기지 않을까 걱정해서 그런 것 같습니다.

갤럭시 S7에서 외장 SD카드를 adoptable storage로 사용하고 싶으시면 ADB(Android Debug Bridge)를 통해서 명령을 넣어주면 됩니다.
이 방법의 최초 출처는 ☞MoDaCo☜라는 사이트입니다.
루팅할 필요도 없고, 본작업 자체는 되게 간단한데, 이게 준비과정이 꽤 복잡하더군요.
제 경험을 바탕으로 누구나 쉽게 따라하실 수 있도록 아래에 정리해 놨으니 원하시는 분들은 참고하시기 바랍니다.

그런데 SD카드를 Adoptable Storage로 변환하면 어떤 결과가 발생하는지 정확히 이해하고 계셔야 합니다.
어쩌면 원하시는 결과가 아닐 수도 있거든요.

주의 사항 1. SD 카드를 폰에서 분리할 수 없음

SD카드에서 Adoptable Storage로 설정한 부분은 FAT32가 아닌 EXT4 형식으로 포맷되어 버리고, 암호화까지 되기 때문에
다른 기기에서 그 부분을 읽을 수가 없습니다.
만약 SD카드 전체를 adoptable storage로 할당해버리면
SD 카드를 이동식 디스크 개념으로 갤럭시 S7에 끼웠다가 PC에 끼웠다가, 디카에도 꼈다가 하는 식으로는 쓸 수 없게 됩니다.
이동식 디스크는 둘째 치고 SD카드를 갤S7에서 뽑는 순간 SD카드를 내장 메모리처럼 활용하던 앱들이 죽거나 바보가 될 겁니다.
(그럼 사람들이 다들 삼성 서비스 센터에 달려가거나 전화를 하겠죠? 삼성은 이게 두려워서 이 기능을 숨겼을 것 같습니다)

즉 adoptable storage를 적용하면 외장 SD카드를 갤S7에 그냥 계속 꼽아두고 쓰셔야 한다는 말씀입니다.
SD카드의 데이터를 PC로 옮기고 싶다면 폰에 꼽힌 상태 그대로 폰을 USB로 PC에 연결하거나, AirDroid 같은 앱으로 WiFi로 옮겨야 됩니다.


주의 사항 2. 사용자 데이터는 외장 SD 카드에만 저장 가능

Adoptable storage를 적용하면 내맘대로 이 파일은 내장 메모리로, 저 파일은 SD 카드로 지정해서 저장할 수가 없게 되고,
미디어 파일과 사용자 데이터의 저장 위치가 외장 SD카드로 강제 고정돼 버립니다.

좀더 설명하자면 SD카드를 기존의 휴대용 저장공간으로 사용하면 갤S7에서 /storage/****-****(여기서 *는 랜덤한 16진수)라는 폴더로 보입니다.
제 경우 아래 그림에서 보듯이 /storage/29DD-4099라는 폴더였습니다.
그리고 공용 앱 데이터, 미디어 파일, 사용자 데이터를 저장할 수 있는 내장 메모리 폴더는 /sdcard(실제로는 /storage/emulated/0)였습니다.

그러니까 사용자 데이터 중 내장 메모리에 저장하고 싶은 것은 /sdcard 아래의 폴더에 넣으면 됐었고,
외장 SD에 저장하고 싶은 것은 /storage/29DD-4099 아래의 폴더에 넣으면 됐었습니다.

그런데 SD카드를 adoptable storage로 만들고 나면 /storage/****-**** 폴더가 사라져 버리고,
대신에 아예 /sdcard 폴더가 통째로 외장 SD카드로 들어옵니다(폴더가 드디어 제 이름을 되찾은 거죠^^).
사용자 데이터를 저장할 수 있는 위치가 하나로 합쳐져버리고, 내장 메모리에는 사용자 데이터를 저장할 수 없게 되는 것입니다.

Adoptable storage의 이런 저장공간 할당은 게임처럼 용량이 큰 앱을 많이 설치하는 사용자나,
내장 메모리 두 배 이상의 대용량 외장 SD 카드를 사용하는 경우에는 적합합니다.
반대로 외장 SD 카드의 용량이 작은 동시에 사용자 데이터가 많다면 애로사항이 꽃피게 됩니다.
극단적인 경우 내장 메모리는 텅텅 비어있는데 사용자 데이터를 조그만 SD 카드에 쑤셔넣느라 매번 지우고 정리해야 될 수도 있습니다.
이런 분들은 SD카드를 adoptable storage로 사용하지 말고 기존 방식대로 휴대용 저장장치로 사용하는 것이 낫습니다.

위 내용을 인지하셨고, 불편을 감수하고도 외장 SD카드를 내장 메모리처럼 사용하길 원하신다면 아래 내용을 차근차근 따라 하시면 됩니다.
저는 어차피 SD 카드 뺄 일도 없고(갤럭시 S7에서 SD 카드를 빼려면 뾰족한 바늘 같은 게 필요한데, 생각만 해도 귀찮겠더라고요),
SD카드 용량도 128GB로 넉넉해서 adoptable storage를 바로 적용했고, 아직까지는 만족하며 사용하고 있습니다.


준비 1. PC에 ADB 설치

작업의 본게임은 명령 프롬프트 창에서 명령어 몇 줄만 쳐넣으면 되는데, 그걸 위한 준비가 좀 복잡합니다.
일단 PC에 ADB를 설치하는 것부터가 간단치가 않더군요.
ADB는 Android Debug Bridge의 약자인데, 안드로이드 개발자가 안드로이드 폰을 PC에 연결해서 테스트할 때 쓰는 프로그램입니다.
ADB 최신 버전을 설치하시려면 Android 사이트에서 SDK(Software Development Kit)를 다운로드 받아야 합니다.
adbshell.com이란 곳에서도 다운로드 받을 수 있긴 하던데 저 사이트에는 구글 copyright 표시도 없고 왠지 좀 수상쩍어서 안 받았습니다.

일단 ☞구글 공식 Android 개발자 사이트☜에서 SDK Platform-Tools를 사용하시는 운영체제에 맞게 다운로드 받습니다.

예전에는 다운로드 받는 페이지도 다르고 설치 방법도 번거로웠는데,

지금은 그냥 Terms and Conditions에 동의하고 ZIP 압축 파일을 받은 후, 그냥 원하시는 directory에 옮겨놓으면 되더라고요.

그러면 ADB를 포함한 Platform-tools가 설치되며, 이제 1단계 준비 완료입니다.


준비 2. PC에 갤럭시 S7용 USB 드라이버 설치

폰과 PC를 연결하고 파일 전송을 하는 것은 삼성폰 전용 USB 드라이버를 따로 설치하지 않고 범용 USB 드라이버로도 가능합니다.
하지만 ADB 접속을 위해서는 전용 USB 드라이버를 설치하시는 게 가장 좋습니다.
알고 보면 정말 간단하고 당연한 준비 과정인데, 사실 제가 가장 많이 삽질-_-했던 부분이 바로 이 부분이었습니다.

삼성폰 전용 USB 드라이버는 ☞삼성 공식 사이트☜에서 '통합 USB 드라이버'를 받아서 설치하시면 됩니다.
드라이버를 설치하실 때는 폰을 PC에 연결하지 않은 상태로 하는 것이 좋답니다.


준비 3. 갤럭시 S7의 디버그 모드 활성화

PC의 ADB로부터 명령을 받기 위해서는 갤럭시 S7 쪽에서도 준비가 필요합니다.
일반 사용자들이 막 개발자 모드에서 이상한 세팅 건드리고 하면 안 되니까 안드로이드 폰의 개발자 모드는 숨겨져 있는데요.
갤럭시 S7의 설정 맨 아래의 디바이스 정보 > 소프트웨어 정보 메뉴를 열어서 '빌드번호'란을 대여섯 번 탭하면 개발자 모드가 활성화됩니다.

그럼 이제 설정 페이지의 디바이스 정보 바로 위에 '개발자 옵션' 항목이 새로 보일 텐데요, 거기 들어가서 'USB 디버깅' 항목을 켜시면 됩니다.


준비 4. 외장 SD 카드 내용 백업

Adoptable storage로 만드는 과정에서 SD카드는 Linux EXT4 형식으로 다시 포맷되기 때문에 기존 데이터는 모두 날아갑니다.
중요한 데이터라면 작업 이전에 PC나 구글 드라이브 등에 옮겨놓도록 합시다.


자, 이제 준비를 다 하셨으면 본게임에 들어가볼까요?
준비 과정에 비해 본 작업과정은 너무나도 간단해서 좀 허무할 지경입니다.

1. 갤럭시 S7을 USB 케이블로 PC에 연결합니다.
만약 처음 연결한다면 아래와 같이 USB 드라이버 설치 화면이 뜹니다.
SAMSUNG_Android라고 써있는 저것이 ADB용 드라이버입니다.

아마도 폰에는 USB를 통한 디버깅을 허용하겠냐는 질문이 뜰 겁니다.
'확인'을 눌러주시면 됩니다.


2. ADB를 띄웁니다.
ADB는 윈도우 프로그램이 아니고 커맨드 라인 툴이기 때문에 먼저 윈도우에서 명령 프롬프트를 띄우셔야 합니다.
윈도우 시작 버튼을 누르고 '프로그램 및 파일 검색' 창 혹은 '웹 및 Windows 검색' 창에 'cmd'라고 치시든가,
'보조프로그램 > 명령 프롬프트' 혹은 'Windows 시스템 > 명령 프롬프트'를 클릭하시면 됩니다.

그리고 이젠 ADB 설치 폴더로 이동하셔야겠죠?
제 경우 C:\Program Files (x86)\Android\android-sdk\platform-tools 폴더에 깔았기 때문에
  cd "C:\Program Files (x86)\Android\android-sdk\platform-tools"
라고 입력했습니다.

그리고 거기서
  adb shell
이라고 입력하시면 프롬프트가 바뀌며 갤럭시 S7에 명령을 입력할 수 있는 ADB Shell 모드로 들어갑니다.
프롬프트의 hero2는 갤럭시 S7 엣지의 코드네임이고, ltelgt는 예상하시다시피 LGU+ LTE 모델을 나타냅니다.
adb devices는 폰이 잘 연결됐는지 확인하는 command일 뿐입니다. 굳이 입력하실 필요 없습니다.


3. SD 카드의 ID를 알아냅니다.
SD 카드를 adoptable storage로 만들기 위해서는 먼저 대상 SD 카드의 ID를 알아내야 합니다. 위에서 언급된 29DD-4099와는 다릅니다.
ADB Shell에서
  sm list-disks
라고 입력하면 됩니다. sm은 Storage Manager의 약자인 것 같습니다.
제 SD카드의 ID는 'disk:179,0'이네요.

4. SD 카드를 파티셔닝합니다.
이것이 바로 갤럭시 S7의 외장 SD카드를 adoptable storage로 만드는 바로 그 단계입니다.
외장 SD카드 전체를 adoptable storage로 만들려면
  sm partition <DISK> private
이라고 입력하면 됩니다.
<DISK> 자리에는 위 3번에서 알아낸 SD카드의 ID를 넣으면 되며, 제 경우
  sm partition disk:179,0 private
이 되네요.

자, 이제 폰 설정화면 아래쪽에서 '저장공간' 메뉴를 열어 보시면
기존에 '휴대용 저장공간'으로 표시되었던 SD 카드가 '디바이스 저장공간' 안에 표시 됩니다.
용량은 좀 잘못 표시됩니다. 너무 놀라지 마시고요.
용량 표시 버그인 듯한데, adoptable storage를 공식 지원하지 않기 때문에 버그를 고치지 않은 것 같습니다.
  sm partition <DISK> mixed <비율>
처럼 입력하면 SD카드 용량의 일부는 휴대용 저장장치로, 일부는 adoptable storage로 쓸 수 있습니다. 제 경우
  sm partition disk:179,0 mixed 10
이라고 한다면 용량의 10%는 일반 SD카드가, 나머지 90%만 adoptable storage가 됩니다.

주의사항 1에서 얘기했듯이 폰에서 adoptable storage를 뽑으면 폰의 몇몇 앱이 오동작을 할 테니 어차피 휴대용으로 쓰기는 어렵습니다.
개인적으로 mixed보다는 private을 추천합니다.
만약 adoptable storage를 원래대로 일반적인 휴대용 저장장치로 되돌리고 싶다면
  sm partition <DISK> public
이라고 입력하시면 됩니다.

5. 데이터를 이전합니다.
4단계까지만 했을 경우 SD카드를 adoptable storage로 선언만 한 것이고, 실제로 데이터를 저장하려면 /sdcard 폴더를 옮겨줘야 합니다.
이 작업은 당장 할 필요는 없습니다.
내장 메모리가 외장SD보다 훨씬 빠르니까 일단은 이 상태로 사용하시다가 내장 메모리 용량이 부족해지려 할 때 데이터를 이전하시면 됩니다.

설정 화면의 '저장 공간' 메뉴에서 SD 카드를 선택하고 오른쪽 위의 '더보기'를 탭하면 위 그림과 같이 추가 메뉴가 뜹니다.
여기서 '데이터 이전'을 선택하시면 됩니다.
그러면 안드로이드가 앱 데이터, 사진, 음악, 동영상, 기타 사용자 데이터가 저장된 /sdcard 폴더를 내장 메모리에서 SD카드로 내보내 줍니다.
이 작업이 몇 분 걸리는데, 이게 끝나고 나면 정말로 외장 SD 카드를 내장 메모리처럼 쓸 수 있게 된 겁니다.


속도 비교

Adoptable storage는 파일을 AES 128bit 표준으로 암호화해서 저장합니다.
파일을 읽을 때마다 암호를 풀어야 하고, 쓸 때마다 암호를 걸어야 하고... 왠지 파일 읽고 쓰기 속도가 저하되지 않을까 걱정 되는데요.
확인을 위해 벤치마크도 돌려보고, 직접 파일 복사 시간도 비교해봤습니다.

A1 SD Bench라는 벤치마크를 돌려봤는데, 결과는 SD카드를 일반 SD카드로 쓸 때나 암호화된 adoptable storage로 쓸 때나 거의 같았습니다.
위 그림 중 왼쪽이 일반적인 휴대용 저장장치로 사용할 때, 오른쪽이 adoptable storage로 사용할 때입니다.
맨 윗 줄이 외장 SD카드의 속도이며, 읽기 속도 38MB/s, 쓰기 속도 18MB/s로 오차범위 수준 내에서 동일합니다.
즉, 암호화로 인한 속도 저하는 없습니다.

제가 사용한 SD카드는 삼성 MicroSD EVO 128GB 제품이었습니다.
현재 시판 중인 삼성 SD 카드는 속도와 내구성에 따라 EVO, EVO+, PRO, PRO+의 네 등급이 있는데, 그 중 가장 싼 놈입니다.

어쩌면 싼 놈이라 원체 느려서 암호화에 의한 추가 속도 저하가 느껴지지 않는 것이 아닐까 하고 생각할 수도 있지만...
가장 비싼 PRO+라고 한들 EVO보다 읽기 속도 두 배, 쓰기 속도 네 배 빠른 정도입니다.
비싼 SD카드라도 암호화로 인한 속도 차이가 막 느껴지고 그러지는 않을 것 같네요.

그런데 실제로 파일 복사를 해보니 갤럭시 기본 파일 탐색기에서는 속도가 같았지만 ES 파일 탐색기에서는 adoptable storage 쪽이 느렸습니다.
큰 파일 하나를 옮길 때보다 작은 파일 여러 개를 옮길 때 차이가 더 확연했습니다.
파일 137개가 들어있는 1GB짜리 폴더 하나 복사하는 데 adoptable storage 적용 전에는 1분 37초, 적용 후에는 정확히 2분이 걸리더군요.
파일 암호화 자체는 문제 없는데, 앱에 따라서 ES 파일 탐색기처럼 adoptable storage에서 파일 열기 시간이 느려지는 것으로 추측됩니다.
뭐, 이 정도 차이는 참아줄 만하네요.

하지만 무시할 수 없는 사실이 한 가지 있습니다.
위 벤치마크 결과를 보시면 아시겠지만 내장 메모리가 외장 SD카드 대비 8배쯤 빠릅니다.
Adoptable storage를 적용한 순간 내장 메모리의 /sdcard에 들어있던 파일들의 읽기쓰기 속도가 8배쯤 느려지는 겁니다.
/sdcard 폴더의 파일을 빈번하게 사용하는 앱이라면 adoptable storage 적용으로 성능저하가 있을 수 있습니다.


내장/외장 용량 분배


주의사항 2에서도 언급했지만 adoptable storage를 사용하면 사용자 데이터는 무조건 외장 SD카드에 저장이 되고,
사용자가 내장 메모리에 접근할 수 있는 방법은 아주 제한됩니다.
그래서 adoptable storage를 쓰다 보면 내장 메모리가 부족할 일은 별로 없습니다.


내장 메모리와 외장 SD카드 중 어디에 저장할지 사용자의 선택권이 있는 부분은 오로지 앱 설치 위치밖에 없는데요.
앱 실행속도 향상을 위해 앱 설치는 가급적이면 고성능의 내장 메모리에 하는 것이 좋습니다.
Clean Master는 새로 앱을 설치할 때 SD카드로 옮기라고 부추기던데, 내장 메모리가 가득 찬 게 아닌 이상 SD카드 설치는 바람직하지 않습니다.
고성능의 내장 메모리는 팽팽 놀리면서 앱 실행속도까지 손해 보는 바보짓이죠.


그래도 게임 등 고용량 앱들을 많이 깔다 보면 내장 메모리가 가득 차버릴 수도 있겠죠.
그럴 경우 용량이 크고 속도가 별로 중요하지 않은 앱부터 외장 SD로 옮기시면 됩니다.
앱 설치 위치를 SD 카드로 옮기는 방법은 설정의 저장공간 메뉴에서 디바이스 저장공간 > 애플리케이션을 선택하셔서 앱 이름을 탭하시면
아래 그림처럼 저장 위치 변경 메뉴가 있습니다.

한 번 해보시면 아시겠지만 저장 위치 변경은 모든 앱이 가능한 것은 아니고,
시스템과 관련성이 적고 앱 제작사에서 SD카드 설치를 허용한 앱들만 가능합니다.
Adoptable storage 사용 시 내장 메모리와 외장 SD 카드 간에 저장 용량을 배분할 수 있는 방법은 이정도가 고작입니다.


원상 복구

위의 주의 사항에도 썼지만 adoptable storage가 모든 사람에게 맞는 방법은 아닙니다.
SD 카드를 이 기기 저 기기로 옮겨가면서 써야 하신다든지, 쓰다 보니 내장 메모리는 용량이 남아도는데 SD카드만 용량에 허덕인다든지,
아니면 SD 카드를 업그레이드해야 한다거나 할 때는 adoptable storage를 원 상태로, 즉 휴대용 저장장치로 되돌려야 할 필요가 있겠죠.

원상 복구 시에도 외장 SD카드를 다시 포맷하기 때문에 데이터가 안 날아가게 주의하셔야 합니다.
다음 순서대로 따라하시면 무리 없이 원상복구하실 수 있을 겁니다.

  1. 폰을 USB로 PC에 연결하든지 해서 /sdcard 폴더를 백업해 둡니다.
  2. SD 카드로 저장 위치를 변경했던 앱들을 모두 다시 내장 메모리로 복귀시킵니다. 내장 메모리 공간이 모자랄 경우 어쩔 수 없이 용량 크고 활용도 떨어지는 앱은 삭제하셔야 합니다.
  3. 디바이스 저장공간 사용량 + SD 카드 사용량이 디바이스 저장공간의 총 용량을 넘지 않도록 /sdcard의 사용자 데이터들을 지웁니다.
  4. 설정 화면의 저장공간 > 디바이스 저장공간 > 오른쪽 위의 '더보기' > 데이터 이전을 선택해서 /sdcard 폴더를 원래대로 내장 메모리로 옮깁니다. 사실 이 과정이 원상복구에서 가장 중요한 부분으로, 이것을 생략할 경우 /sdcard에 데이터를 저장해 놓은 일부 앱이 바보가 될 수 있습니다.
  5. 설정의 저장공간 > SD 카드 > 오른쪽 위의 '더보기' > '휴대용 저장공간으로 포맷'을 선택합니다.
  6. SD카드 포맷이 끝나면 1번 과정에서 백업했던 데이터 중 필요한 사용자 데이터를 SD카드로 다시 옮겨옵니다.



이상입니다.
갤럭시S7의 외장 SD 카드를 내장 메모리처럼 써보시기를 원하시는 분들께 도움이 좀 되면 좋겠습니다.
LG G5 등 마시멜로가 적용됐으면서 adoptable storage를 지원하지 않는 다른 폰들도 유사한 방법으로 적용하면 된다고 하더군요.