APFS
1. 개요
'''AP'''ple '''F'''ile '''S'''ystemHFS+와 그 시초인 HFS는 30년 이상 되었습니다. 이 파일 시스템은 파일 크기가 킬로바이트 또는 메가바이트 단위로 계산 된 파일을 저장하고 사용하는 플로피 디스크 및 하드디스크 드라이브 시대에 개발되었습니다.
오늘날 많은 사람들은 수백 기가바이트가 되는 수백만 개의 파일을 빠르고, 지연속도가 낮은 플래시 드라이브에 액세스합니다. 사람들은 그 데이터를 가지고 다니며 민감한 정보를 안전하게 저장 할 수 있도록 요구합니다.
Apple File System은 iOS 10.3, macOS 10.13 High Sierra, watchOS, tvOS를 위한 새롭고 현대적인 파일 시스템입니다. Flash / SSD 스토리지에 최적화되어 있으며 강력한 암호화, COW (Copy-On-Write) 메타 데이터, Space sharing, Cloning files and directories, Snapshots, Fast Directory Sizing, Atomic safe-save primitives 및 향상된 파일 시스템 기본 기능을 제공합니다.
HFS+를 대체하는 Apple의 차기 파일 시스템이다.참고
SMB로 대체된 Apple의 네트워크 프로토콜 AFP(Apple Filing Protocol)와는 다르다. 이 포맷은 디스크의 전체를 한 개의 볼륨인 "컨테이너 디스크" 로 포맷한 후 그 컨테이너 볼륨 안에 APFS 볼륨을 생성한다. 컨테이너 안 APFS 볼륨들은 사용량에 따라 볼륨의 용량들을 동적 할당한다. 이 포맷은 전통적인 방식의 하드 디스크 드라이브에 적용된다기보다는 SSD 등의 고속 플래시 저장 장치에 쓰이는 것이 목적이다. HFS+ 볼륨을 APFS 볼륨으로 변환할 수도 있지만, 변환한 볼륨에 해당하는 디스크에 또 다른 포맷의 볼륨이 그 디스크에 있을 경우 그 볼륨들은 APFS 볼륨으로 적용되지 않으며, 컨테이너 디스크는 APFS로 변환시킨 볼륨 이외의 볼륨의 용량을 전체 디스크 용량에서 뺀 만큼의 용량으로 제한된다. macOS Mojave부터는 셋업에서 HFS+로 디스크를 포맷하여 그 볼륨에 설치한다고 하여도 터미널에서 특정 설정들을 끄지 않으면 '''셋업이 APFS로 볼륨을 자동으로 포맷 후 거기다가 macOS를 설치한다.''' 괜히 HFS로 포맷하여 놓고 설치 시간을 증가시키지 말고 그냥 깔끔하게 APFS로 포맷을 하자.
2. 역사
Apple은 '''1985년'''에 출시된 기존의 HFS 파일 시스템을 HFS+로 개량하고 필요한 기능들을 추가하고 꾸준히 개선하여 사용하였으나, 워낙 오래된 파일 시스템이라 개량하는 과정에서 HFS+가 파편화되었고, 근본적으로 HFS는 플래시 메모리를 전제로 개발된 게 아닌 오래된 파일 시스템이어서 개량으로는 발전에 한계가 있었다.
이에 Apple은 썬 마이크로시스템즈의 ZFS를 도입하여 HFS+를 대체하기로 하고 2006년경부터 포팅을 진행한다. 2007년 썬의 CEO는 ZFS가 Mac OS X에서 지원될 예정이라고 미리 흘리기도 했다. # 그러나 이때쯤 ZFS는 NetApp이 제기한 특허소송에 휘말리게 되며, 이와 별개로 썬은 재정 악화로 기업을 매각하는 신세가 된다. 이러한 상황은 Apple로 하여금 ZFS의 전면적인 도입을 망설이게 만들었다. 애플이 iCloud에 쓰일 썬의 스토리지 장비를 구매하는 대신 ZFS의 라이선스를 얻는 거래가 협의되었지만, 오라클이 썬을 인수한 후 이 거래는 2010년에 결렬되었다. 두 회사의 CEO끼리는 절친 관계였지만, 이 거래를 래리 앨리슨이 거절했다는 소문과 스티브 잡스가 거절했다는 소문이 모두 존재한다.
결국, Apple은 HFS+를 대신할 차세대 파일시스템으로 ZFS를 도입하는 대신 완전히 새로운 파일시스템을 자체 개발하는 방향으로 선회한다. Apple 내부에서는 적어도 2개의 파일시스템이 더 개발되었으나 공개를 위한 문턱을 넘지 못했고#, 2014년부터 2년간 개발된 APFS가 2016년 WWDC에서 공개되었다.
2017년 3월 27일 iOS 10.3와 함께 모바일 기기에 출시됐으며, 9월 25일 macOS 10.13으로 맥에도 출시됐다.
3. 특징
별도의 소프트웨어 레이어를 통해 지원하는 기능들을 파일 시스템 단에서 지원하는 등 완전히 새로 설계 및 개발 된 파일 시스템이다. iOS 10.3에서 앱 실행 시간 감소, 가용 용량 증가가 확실히 체감된다.
Copy-on-write[1] , 스냅샷, LVM 등등 ZFS와 Btrfs에 있는 기능을 일부 지원한다. 또한 둘처럼 자체 RAID는 없지만 Apple 고유의 Apple RAID를 통해 RAID에 사용할 수도 있다.
알파벳 대소문자 구분/비구분 모드가 나뉘어졌다. 대소문자를 구분하지 않는 APFS의 경우, Windows나 리눅스에서 사용되는 유니코드 정규화 C방식(Normalization Form Canonical Composition)에 더욱 호환성을 가지게 되었다.
4. 적용된 기기
- iPhone: iOS 10.3 이상이 설치된 64bit AP 탑재 기기[2]
- iPod touch: iOS 10.3 이상이 설치된 64bit AP 탑재 기기
- iPad: iOS 10.3 이상이 설치된 64bit AP 탑재 기기
- Mac: macOS High Sierra(10.13) 이상이 설치된 기기
- Apple Watch: watchOS 3.2 이상이 설치된 기기
- Apple TV: tvOS 10.2 이상이 설치된 기기
5. 문제점
5.1. 해결되지 않은 문제점
5.1.1. 하위호환
HFS+를 APFS로 업그레이드할 수 있지만 반대로는 안 된다. iOS는 macOS보다 더 간단한 환경이라 APFS만 있는 Apple이 짠 파티션만 굴리면 되지만, iOS와 달리 macOS에선 같은 저장소에 APFS와 NTFS, exFAT, HFS+ 등등이 동시에 있을 수 있으며, 사용하던 프로그램이 APFS를 지원하지 않을 수도 있다. 만약 타임머신처럼 HFS+를 요구하는 파티션이 APFS로 전환된다면 망했어요. 데이터를 백업하고 다시 포맷하는 수밖에 없다.
5.2. 해결된 문제점
5.2.1. Fusion Drive의 부재
Fusion Drive는 SSD와 HDD를 한 볼륨으로 합쳐서 SSD에는 자주 쓰는 파일을, HDD에 나머지를 저장해 빠른 스피드와 거대한 저장용량을 모두 잡은 드라이브이다. SSD가 캐시 역할을 하는 하이퍼 드라이브와는 다르다. 공식적으론 Fusion Drive는 APFS를 지원하지 않지만, 문제는 일부 데스크탑 모델이 Fusion Drive를 시스템 파티션으로 사용하기 때문에 APFS로 업그레이드할 수가 없다. 터미널을 이용해 비공식적으로 Fusion Drive를 만들 수 있듯이 같은 방법으로 강제로 APFS로 포맷할 수 있긴 하지만 10.13.4부터 APFS 퓨전 드라이브에 macOS를 설치할 수 없게 막아놨다. 애초에 Fusion Drive를 APFS로 포맷할 경우 SSD 캐시 기능이 제대로 작동하지 않아 용량이 찰수록 버그가 걸리니 권장하지 않는다. 이에 비해 그냥 HDD만 쓴다면 공식적으로 APFS를 지원하며 시스템도 설치할 수 있다.
macOS 10.14 Mojave부터 퓨전 드라이브 지원이 APFS에 추가됐다.
5.2.2. Time Machine 부재
하드링크를 지원하지 않아서 macOS의 핵심 기능 중 하나인 타임머신을 현재 APFS 볼륨에 백업할 수 없다. 타임머신은 각 스냅샷마다 첫 백업 파일의 하드링크를 걸어서 스냅샷 하나하나가 한 시스템의 백업으로 보이게 만들기 때문에 하드링크 지원이 없으면 백업 드라이브로 사용할 수 없다. Macintosh HD 등 백업이 이루어지는 시스템 파티션은 APFS이든 HFS+든 문제가 없다. 백업이 저장되는 디스크, 즉 외장하드 등이 HFS+가 아닌 APFS일 경우, 해당 디스크를 Time Machine 디스크로 사용할 수 없다. 퍼블릭 베타 때도 그랬고 지금도 그렇고, 아직 APFS 볼륨에는 아예 타임머신이 안 먹히게 되어 있다.
그래도 아예 못 쓰는 건 아니고, APFS 볼륨 내에 HFS+로 포맷된 sparsebundle 가상디스크 파일을 사용하면 된다. 이는 NAS 등의 네트워크 백업 방식과 똑같으며, 사실상 HFS+ sparsebundle 이미지만 있으면 저장된 드라이브가 어느 포맷이든 타임머신을 쓸 수 있다. 하지만 이것은 APFS만의 문제라고 볼 수 없다. 하드링크로 파일 시스템의 구조가 꼬일 수 있기 때문에[3] APFS와 마찬가지로 ReFS 같은 일부 차세대 파일 시스템은 하드링크를 지원하지 않는다. 지원한다 해도 안전성을 위해 폴더 사이에 하드링크를 걸 수 없게 하는 파일시스템도 있다. 폴더 하드링크로 작동하는 타임머신은 해당 시스템에 사용할 수 없으며 오히려 하드링크가 일으키는 문제에 더 취약하다는 단점도 있다.
macOS Big Sur Beta에서 APFS 볼륨에 대한 타임머신 백업을 지원한다. RC(Release Candinate) 버전에서도 지원되는 것으로 보아 정식 출시 버전에서 역시 지원할 것으로 보인다. https://9to5mac.com/2020/06/26/apple-apfs-encrypted-drive-support-apfs-time-machine-backups/
macOS Big Sur 정식 출시 버전에서 APFS 볼륨에 타임머신 백업이 가능한것이 확인되었다. 현재는 아예 새로운 타임머신 볼륨을 지정할 때 HFS+인 경우 APFS로 변환하는 듯 하고, Apple 공식 지원 문서에서 APFS를 권장하고 있다. https://support.apple.com/ko-kr/guide/mac-help/mh15139/11.0/mac/11.0
5.3. 일부분만 해결된 문제점
5.3.1. 한글 자소분리 현상
Mac에서 사용하는 유니코드 정규화 D(NFD)로 인하여, macOS를 통해 전송한 한글 파일이 윈도우에서는 자소가 분리되어 보이는 문제가 있다. Windows와 Linux는 정규화 C(NFC)를 사용하기 때문에 다른 코드가 사용되어 OS에서 두 파일명이 다르다고 인식해버리기 때문이다. # 예를 들어 Mac에서 전송한 나무위키.txt를 Windows에서 받아보면 ㄴㅏㅁㅜㅇㅜㅣㅋㅣ.txt로 표기된다. 정확히 말하면 Mac의 '''데스크톱''' 이메일 클라이언트를 사용하여 파일을 전송할 시 이러한 문제가 발생한다. APFS는 HFS+와 달리 더 이상 유니코드 정규화를 하지 않지만, macOS의 API 단에서는 여전히 정규화 D가 사용되고 있기 때문에 근본적인 해결은 아직 이루어지지 않은 상태이다. 이건 Mac 쪽이 Windows, Linux에 맞춰가야 하는 것인데 바꾸려는 움직임을 보이지 않고 있다.
이 문제에 대한 해결책은 데스크톱 클라이언트가 아닌 웹 메일을 이용해 파일을 송신하는 것이다. Microsoft Outlook이나 Gmail, 또는 Dropbox 등을 통해서 파일을 전송하면 한글 자소분리 문제가 발생하지 않는다. 물론 파일 시스템에 의한 강제 정규화가 사라졌으므로, 운영체제 API에 묶여 있는 게 아니라면 APFS 환경에서 자소분리 문제가 자동으로 해결되는 경우도 있을 수 있다. 대표적인 예가 시티즈: 스카이라인인데, HFS+ 시절 도시를 저장하면 ㅅㅐㅈㅓㅈㅏㅇ.crp로 자소가 분리되었지만 APFS에선 새저장.crp로 스팀 클라우드에 저장된다.
6. 기타
- macOS High Sierra로 업그레이드하면 자동으로 시동 디스크를 APFS로 변환한다. 그리고 디스크 유틸리티에서도 HFS+를 APFS로 변환할 수 있는 툴이 있다. 이는 APFS가 HFS+의 기능 +α의 구조이기 때문. 물론 이 탓에 반대로는 변환할 수가 없다.
[1] 파일을 "복사"하면 새 데이터를 디스크에 쓰지 않고 기존 파일과 공유한다. 복사된 파일을 변경해야 데이터가 실제로 복사된다.[2] 10.3 베타버전 공개 당시 전반적인 성능 향상이 있었다는 점을 들어 32bit AP 탑재 기기도 지원하는 것이 아닌가 하는 의견들이 있었으나 이후 버전들 중 일부 복원용 펌웨어 파일을 뜯어본 결과 HFS+ 형식으로 되어있음이 확인 되었다. 속도가 향상된 것은 이전 iPhone 4s의 최신 펌웨어 성능 저하 문제로 집단 소송 등을 받기도 했던 Apple이 구형 기기 최적화에 좀 더 신경썼던 결과로 보인다.[3] 예를 들어 하드링크에 링크가 걸려서 무한 루프가 된다거나.