애플 파일 시스템
1. 개요
애플 파일 시스템(APFS)은 2016년 애플이 HFS+를 대체하기 위해 발표한 파일 시스템이다. 2017년 iOS 10.3과 macOS 10.13부터 64비트 iOS 및 macOS 기기에 도입되었다. APFS는 64비트 아이노드, 복제, 스냅샷, 암호화, 데이터 무결성, 충돌 보호, 압축, 공간 공유 등의 기능을 제공하며, HFS+의 싱글 스레드 지원과 달리 멀티 스레드를 지원한다. APFS는 macOS 11 이전 타임 머신과의 호환성 문제, 사용자 데이터 무결성 검사 제한, 하드 디스크 드라이브에서의 성능 저하 등의 한계가 지적되기도 했다. macOS, iOS, tvOS, watchOS, iPadOS, visionOS 등에서 지원되며, 타사 유틸리티를 통해서도 접근할 수 있다.
| 이름 | APFS (Apple File System) |
|---|---|
| 개발사 | 애플 |
| 정식 명칭 | Apple File System |
| 소개 운영체제 | iOS 10.3 macOS 10.13 |
| 소개 날짜 | iOS: macOS: |
| 이전 파일 시스템 | HFS Plus |
| 파티션 ID | 7C3457EF-0000-11AA-AA11-00306543ECAC (GPT) |
| 디렉터리 구조 | B 트리 |
| 최대 파일 수 | 9,223,372,036,854,775,808 |
| 최대 파일 크기 | 8 엑사바이트 (9,223,372,036,854,775,808 바이트) |
| 날짜 범위 | – |
| 날짜 해상도 | 1 나노초 |
| 파일 이름 문자 집합 | UTF-8로 인코딩된 유니코드 9.0 |
| 기록되는 날짜 | 접근, 속성 수정, 콘텐츠 수정, 생성 |
| 파일 시스템 권한 | 유닉스 권한, NFSv4 ACL |
| 압축 | 부분적 (decmpfs) |
| 암호화 | 지원 |
| 카피 온 라이트 | 지원 |
| 지원 운영체제 | macOS iPadOS iOS tvOS watchOS |
-
애플의 소프트웨어 -
아이튠즈
아이튠즈는 애플이 개발한 멀티미디어 플랫폼이자 디지털 미디어 플레이어 소프트웨어로, 초기에는 음악 재생 및 관리에 집중했으나 이후 기능이 확장되어 macOS Catalina부터는 개별 앱으로 기능이 분리되었고 윈도우에서는 'Apple 기기' 앱에 관련 기능이 통합되었다. -
애플의 소프트웨어 -
사파리 (웹 브라우저)
사파리는 애플이 개발한 웹 브라우저로, 2003년 처음 출시되어 웹킷 엔진을 기반으로 빠른 속도와 웹 표준 지원을 제공하며, macOS, iOS, iPadOS 등에서 기본 브라우저로 사용된다. -
IOS -
Face ID
Face ID는 애플이 개발한 얼굴 인식 시스템으로, 3차원 얼굴 데이터를 활용하여 사용자를 인증하며, 기기 잠금 해제 및 Apple Pay 결제 등에 사용되지만, 일란성 쌍둥이 인식 문제, 마스크 착용, 법 집행 기관의 접근 등 논란과 이슈도 존재한다. -
IOS -
Touch ID
-
파일 시스템 -
부트 섹터
부트 섹터는 시스템 부팅 코드를 담은 저장 매체의 특정 영역으로, 볼륨 부트 레코드(VBR)와 마스터 부트 레코드(MBR)로 나뉘며, BIOS는 이를 실행하고 UEFI는 부트로더를 직접 로드하지만 바이러스 공격에 취약하다. -
파일 시스템 -
ZFS
ZFS는 Jeff Bonwick 등이 설계하고 구현한 파일 시스템으로, 데이터 무결성, 스냅샷, RAID-Z 등의 기능을 제공하며, 썬 마이크로시스템즈에서 개발되어 OpenZFS 프로젝트를 통해 다양한 운영체제에서 사용된다.
2. 역사
애플은 HFS+를 대체하기 위해 ZFS를 고려했지만, 라이선스 문제로 인해 채택하지 못했다. 2016년 세계 개발자 회의에서 애플은 자체 모바일 환경에 맞는 새로운 파일 시스템인 애플 파일 시스템을 발표했다.
2016년 6월 애플은 개발자 컨퍼런스(WWDC)에서 1998년부터 사용되어 온 HFS+를 대체하는 애플 파일 시스템(APFS)을 발표했다. 2017년 3월 27일 iOS 10.3 출시와 함께 64비트 iOS 기기에, 2017년 9월 25일 macOS 10.13 출시와 함께 macOS 기기에 APFS가 도입되었다.
2018년 9월에는 암호화되지 않은 비 퓨전(non-Fusion) 저장 장치에서 APFS에 대한 읽기 전용 접근을 지원하는 부분적인 사양이 공개되었다. 소프트웨어 암호화에 대한 사양은 이후에 문서화되었다.
2.1. 개발 배경
애플은 HFS+를 대체하기 위해 ZFS를 고려했다. 그러나 ZFS는 라이선스 문제로 채택되지 못했다. 이후 애플은 2016년 세계 개발자 회의에서 자체 모바일 환경에 적합한 새로운 파일 시스템인 애플 파일 시스템을 공개했다.
HFS+는 싱글 스레드만 지원했지만, APFS는 멀티 스레드를 지원하며, 파일의 타임스탬프를 나노초 단위로 관리한다. 파일 공유 프로토콜은 AFP를 지원하지 않으므로, SMB 사용이 권장된다.
2014년부터 도미니크 잠파올로(Dominic Giampaolo)를 중심으로 코어 스토리지와는 다른 새로운 파일 시스템 개발이 시작되었다.
2.2. 도입 및 발전
애플은 2016년 애플 세계 개발자 컨퍼런스(WWDC)에서 HFS+를 대체하는 새로운 파일 시스템인 애플 파일 시스템(APFS)을 발표했다. 2017년 3월 27일, iOS 10.3과 함께 64비트 iOS 기기에 처음 도입되었고, 같은 해 9월 25일 macOS 10.13과 함께 macOS 기기에도 도입되었다.
2018년, 애플은 암호화되지 않은 비 퓨전(non-Fusion) 저장 장치에서 APFS에 대한 읽기 전용 접근을 지원하는 부분적인 사양을 공개했다. macOS 시에라 10.12.4 버전에서는 제한적인 기능을 가진 실험적인 APFS 버전이 `diskutil` 명령줄 유틸리티를 통해 제공되었다. 이 버전은 유니코드 정규화를 수행하지 않아 영어가 아닌 다른 언어에서 문제가 발생할 수 있었고, 타임 머신, FileVault 볼륨, 퓨전 드라이브와는 함께 사용할 수 없었다.
macOS 10.13 하이 시에라부터 플래시 스토리지가 있는 모든 장치가 자동으로 APFS로 변환되었으며, macOS 10.14 모하비부터는 퓨전 드라이브 및 하드 디스크 드라이브도 설치 시 APFS로 업그레이드되었다. macOS 하이 시에라 이후 APFS는 이전 버전의 macOS에서 읽을 수 없게 되었다. 사용자는 `startosinstall` 유틸리티(명령줄)에 `--converttoapfs NO`를 전달하여 APFS 변환을 비활성화할 수 있었다.
macOS 빅 서부터 APFS 볼륨을 타임 머신 백업 대상으로 사용할 수 있게 되어 더 빠르고 콤팩트하며 신뢰성이 향상되었다.
3. 설계
APFS는 애플 워치에서 맥 프로에 이르기까지 다양한 장치에서 사용될 수 있도록 설계되었다. 64비트 아이노드 번호를 사용하고 데이터 보호 기술을 통해 안전한 저장을 지원한다. APFS 코드는 HFS+와 마찬가지로 TRIM 명령어를 사용하여 공간 관리 및 성능을 향상시킨다. iOS 및 macOS에서 읽기/쓰기 속도를 높이고, iOS 장치에서는 사용 가능한 데이터를 계산하는 방식 개선으로 저장 공간을 늘릴 수 있다.
3.1. 주요 기능
APFS는 다음과 같은 주요 기능을 제공한다.
* 64비트 아이노드(inode): 64비트 아이노드 번호를 사용하여 단일 볼륨에서 900경 개 이상의 파일을 지원한다.
* 파티션 구성: GPT 파티션 방식을 사용하며, 컨테이너 내에 여러 볼륨을 생성하여 공간을 공유할 수 있다.
* 복제(Clones): 운영 체제가 추가 저장 공간을 차지하지 않고 동일 볼륨에서 효율적인 파일 복사본을 만들 수 있도록 한다. 변경 사항은 델타 익스텐트 또는 차분 데이터로 저장되어 문서 개정 및 복사본에 필요한 저장 공간을 줄인다.
* 스냅샷(Snapshots): 파일 시스템의 특정 시점의 읽기 전용 인스턴스를 생성한다.
* 암호화(Encryption): 기본적으로 전체 디스크 암호화를 지원하며, 파일 암호화에는 다음과 같은 옵션을 선택할 수 있다.
* 암호화 없음
* 단일 키 암호화
* 다중 키 암호화 (각 파일은 별도의 키로 암호화되고, 메타데이터는 다른 키로 암호화된다)
* 데이터 무결성(Data integrity): 체크섬을 사용하여 메타데이터의 무결성을 보장하지만 사용자 데이터에 대해서는 보장하지 않는다.
* 충돌 보호(Crash protection): 시스템 충돌로 인한 메타데이터 손상을 방지하도록 설계되었다. 기존 메타데이터 레코드를 제자리에서 덮어쓰는 대신, 완전히 새로운 레코드를 작성하고, 새로운 레코드를 가리킨 다음, 이전 레코드를 해제하는 쓰기 시 리디렉션 방식을 사용한다.
* 압축(Compression): 개별 파일에 대해 Deflate(Zlib), LZVN(libFastCompression) 및 LZFSE를 사용하여 투명한 압축을 지원한다.
* 공간 공유(Space sharing): 동일한 컨테이너 내의 여러 볼륨이 사용 가능한 여유 공간을 공유한다.
* TRIM 명령어: APFS 코드는 HFS+ 코드와 마찬가지로 더 나은 공간 관리와 성능을 위해 TRIM 명령어를 사용한다.
3.2. 볼륨 그룹 (macOS 카탈리나 이후)
macOS 카탈리나(macOS 10.15)부터 Finder에서 여러 볼륨을 하나의 볼륨으로 표시하는 볼륨 그룹이 도입되었다. System 볼륨 역할(보통 "Macintosh HD"로 명명)은 읽기 전용이며, macOS 빅 서(macOS 11)에서는 서명된 시스템 볼륨(SSV)으로 마운트되어 볼륨 스냅샷만 마운트된다. Data 볼륨 역할(보통 "Macintosh HD - Data"로 명명)은 System 볼륨의 오버레이 또는 섀도우로 사용되며, System 및 Data 볼륨은 모두 동일한 볼륨 그룹에 속하며 Finder에서 하나로 표시된다.
4. 한계 및 비판
APFS는 이전 버전인 HFS+에 비해 많은 개선 사항을 포함하고 있지만, 몇 가지 제한 사항이 지적되었다. 사용자 메타데이터는 체크섬 대상에 포함되지 않아 손상 시 데이터 손실 위험이 있다.
4.1. 사용자 데이터 무결성 검사 제한
애플 파일 시스템(APFS)은 무결성을 보장하기 위해 메타데이터에는 체크섬을 사용하지만, 사용자 데이터에는 체크섬을 제공하지 않는다. 따라서 사용자 데이터가 손상될 위험이 있다. 또한 바이트 단위의 비휘발성 임의 접근 메모리를 활용하지 않는다.
4.2. 하드 디스크 드라이브(HDD) 성능
APFS가 하드 디스크 드라이브에 위치할 경우 파일과 모든 아이노드 메타데이터를 열거하는 속도가 HFS+보다 느리다. APFS는 HFS+와 같이 고정된 위치에 메타데이터를 저장하는 대신 실제 파일 데이터와 함께 저장하기 때문이다. 이러한 메타데이터의 단편화는 파일을 나열할 때 더 많은 탐색 시간을 필요로 하는데, 이는 SSD에는 허용되지만 HDD에는 허용되지 않는다.
4.3. macOS 11 이전 타임 머신(Time Machine)과의 호환성
APFS는 디렉터리에 대한 하드 링크를 지원하지 않는다. Mac OS X 10.5(레오파드)부터 macOS 10.15(카탈리나)까지 포함된 타임 머신 백업 소프트웨어는 디렉터리에 대한 하드 링크에 의존했기 때문에 APFS는 처음에 백업 볼륨으로 지원되지 않았다. 이 제한은 macOS 11 빅 서부터 해결되었으며, APFS는 새로운 타임 머신 백업의 기본 파일 시스템이 되었다(기존 HFS+ 형식의 백업 드라이브도 여전히 지원된다).
4.4. 기타
초기 버전의 APFS에서는 메타데이터에 대해 체크섬을 사용하여 완전성을 검증할 수 있지만, 사용자 데이터에 대해서는 할 수 없다. 또한, 바이트 주소 지정이 가능한 불휘발성 메모리의 이점을 활용할 수 없다. 투명 압축은 GUI를 통해 이용할 수 없지만, AppleFSCompression.framework를 통해 CUI에서 이용할 수 있다.
5. 보안 문제
2018년 3월, 하이 시에라의 APFS 드라이버에서 디스크 암호화 비밀번호가 일반 텍스트로 기록되는 버그가 발견되었다.
2021년 1월, iOS < 14.4, macOS < 11.2, watchOS < 7.3, tvOS < 14.4의 APFS 드라이버에서 로컬 사용자가 권한에 관계없이 임의의 파일을 읽을 수 있는 버그가 발견되었다.
6. 지원
macOS 시에라 10.12.4 버전부터 APFS의 실험적인 버전을 제한적인 기능으로 제공했다. 이 버전은 명령줄 `diskutil` 유틸리티를 통해서 사용할 수 있었고, 유니코드 정규화를 지원하지 않아서 영어가 아닌 다른 언어에서 문제가 발생할 수 있었다. 시에라 버전의 APFS로 포맷된 드라이브는 이후 버전의 macOS 또는 APFS와 호환되지 않을 수 있으며, 타임 머신, FileVault 볼륨, 퓨전 드라이브와 함께 사용할 수 없었다.
macOS 10.13 하이 시에라부터는 플래시 스토리지가 장착된 모든 기기가 자동으로 APFS로 변환되었고, macOS 10.14 모하비부터는 퓨전 드라이브 및 하드 디스크 드라이브도 설치할 때 APFS로 자동 변환되었다. APFS 변환은 명령줄 설치 프로그램의 `startosinstall` 유틸리티에 `--converttoapfs NO`를 전달하여 비활성화할 수 있다. macOS 빅 서 (11)부터 APFS 볼륨을 타임 머신 백업 대상으로 사용할 수 있게 되었다.
iOS 10.3, tvOS 10.2, watchOS 3.2 이후 버전부터 호환되는 기기에서 기존의 HFSX 파일 시스템을 APFS로 변환한다. iPadOS, visionOS는 APFS를 표준으로 지원한다.
Paragon Software Group은 APFS 드라이브의 읽기 전용 액세스를 지원하는 소프트웨어 개발 키트를 4-Clause BSD 라이선스로 게시했다. Joachim Metz가 개발한 독립적인 읽기 전용 오픈 소스 구현인 libfsapfs는 GNU Lesser General Public License v3으로 출시되었다. 이 소프트웨어는 Debian, Fedora Linux, Rocky Linux, Red Hat Enterprise Linux, Ubuntu 소프트웨어 저장소에 패키지화되었다. 이 두 가지 모두 일반적인 파일 시스템 드라이버 인터페이스를 노출하지 않는 명령줄 도구이다. apfs-fuse라는 Linux용 사용자 공간 파일 시스템 (FUSE) 드라이버가 있으며 읽기 전용 액세스를 지원한다. "APFS for Linux" 프로젝트는 APFS 지원을 Linux 커널에 통합하기 위해 노력하고 있다.
Paragon의 상용 제품인 APFS for Windows는 Windows 7부터 Windows 11까지, Windows Server 2008 R2부터 Windows Server 2022까지 모든 버전의 Windows에서 APFS 볼륨에 대한 읽기 및 쓰기 지원을 제공한다. 그러나 APFS 볼륨을 포맷하거나 검증할 수 없으며, Apple T2 보안 칩으로 암호화된 APFS 볼륨은 읽을 수 없다.
각종 Linux에서는 파라곤 소프트웨어(Paragon Software)사가 제공하는 APFS for Linux by Paragon Software를 설치하여 APFS로 포맷된 볼륨을 읽고 쓸 수 있다.
6.1. macOS
macOS 시에라 10.12.4 버전부터 제한적인 기능의 실험적인 APFS 버전을 제공했다. 이 버전은 명령줄 `diskutil` 유틸리티를 통해 사용할 수 있었으며, 유니코드 정규화를 지원하지 않아 영어가 아닌 다른 언어에서 문제가 발생할 수 있었다. 시에라 버전의 APFS로 포맷된 드라이브는 이후 버전의 macOS 또는 APFS와 호환되지 않을 수 있으며, 타임 머신, FileVault 볼륨 또는 퓨전 드라이브와 함께 사용할 수 없었다.
macOS 10.13 하이 시에라부터는 플래시 스토리지가 장착된 모든 기기가 자동으로 APFS로 변환되었다. macOS 10.14 모하비부터는 퓨전 드라이브 및 하드 디스크 드라이브도 설치 시 APFS로 자동 변환되었다. 사용자는 명령줄 설치 프로그램의 `startosinstall` 유틸리티에 `--converttoapfs NO`를 전달하여 APFS 변환을 비활성화할 수 있다.
macOS 빅 서 (11)부터 APFS 볼륨을 타임 머신 백업 대상으로 사용할 수 있게 되었다.
6.2. iOS, tvOS, watchOS, iPadOS, visionOS
iOS 10.3, tvOS 10.2, watchOS 3.2 이후 버전부터 호환되는 기기에서 기존의 HFSX 파일 시스템을 APFS로 변환한다. iPadOS, visionOS는 APFS를 표준으로 지원한다.
6.3. 타사 유틸리티
Paragon Software Group은 APFS 드라이브의 읽기 전용 액세스를 지원하는 소프트웨어 개발 키트를 4-Clause BSD 라이선스로 게시했다. Joachim Metz가 개발한 독립적인 읽기 전용 오픈 소스 구현인 libfsapfs는 GNU Lesser General Public License v3으로 출시되었다. 이 소프트웨어는 Debian, Fedora Linux, Rocky Linux, Red Hat Enterprise Linux 및 Ubuntu 소프트웨어 저장소에 패키지화되었다. 이 두 가지 모두 일반적인 파일 시스템 드라이버 인터페이스를 노출하지 않는 명령줄 도구이다. apfs-fuse라는 Linux용 사용자 공간 파일 시스템 (FUSE) 드라이버가 있으며 읽기 전용 액세스를 지원한다. "APFS for Linux" 프로젝트는 APFS 지원을 Linux 커널에 통합하기 위해 노력하고 있다.
Paragon의 상용 제품인 APFS for Windows는 Windows 7부터 Windows 11까지, Windows Server 2008 R2부터 Windows Server 2022까지 모든 버전의 Windows에서 APFS 볼륨에 대한 읽기 및 쓰기 지원을 제공한다. 그러나 APFS 볼륨을 포맷하거나 검증할 수 없으며, Apple T2 보안 칩으로 암호화된 APFS 볼륨은 읽을 수 없다.
각종 Linux에서는 파라곤 소프트웨어(Paragon Software)사가 제공하는 APFS for Linux by Paragon Software를 설치하여 APFS로 포맷된 볼륨을 읽고 쓸 수 있다.