F2FS (한국어)

From ArchWiki

This article or section needs to be translated.

Notes: Significantly differs from the english article. (Discuss in Talk:F2FS (한국어))

F2FS (Flash-Friendly File System) 는 플래시 변환 레이어 (Flash Translation Layer:FTL) 를 탑재한 낸드 플래시 메모리용으로 설계된 파일 시스템이다. JFFS나 UBIFS와 달리 F2FS는 쓰기 작업 분배를 위해 FTL에 의존한다. 리눅스 커널 3.8 이후로 지원되고 있다.

FTL은 기초적인 낸드 플래시와 스마트미디어카드와 달리 SCSI/SATA/PCIe/NVMe 인터페이스를 사용하는 모든 플래시 메모리에서 사용된다 [1][2].

경고: F2FS 파티션들에 보관된 데이터는 운용중인 기기가 해당 파티션을 생성할 때 사용된 커널 버전보다 오래된 커널 버전을 사용하고 있다면 불안정해질 수 있다. 예를 들어, 이 현상은 linux에서 제공된 메인라인 커널에서 F2FS 파티션을 만들었는데 linux-lts에서 제공된 옛 커널로 커널 버전을 다운그레이드해야 할 때 발생할 수 있다. FS#69363을 참고해라.

알려진 문제들

fsck 복구 실패

F2FS는 순간적인 정전 시 데이터 손상으로 이어질 수도 있는 별로 좋지 못한 fsck 복구툴을 가지고 있다 [3][4].

만약 정전 내지 전력 손실이 자주 발생하는 환경이라면, 대안 파일 시스템을 고려하라.

GRUB 지원

GRUB 자체는 버전 2.0.4 이후로 F2FS를 지원하지만, extra_attr 플래그가 활성화된 상태로 생성된 F2FS 파티션에서는 자신의 부트 파일들을 정확히 읽지 못한다 [7].

F2FS 포맷 파티션 생성

F2FS 파티션을 만들기 위해서는 공식 저장소에서 f2fs-tools설치한다.

mkfs.f2fs를 사용한 파티션 생성:

# mkfs.f2fs -l mylabel -O extra_attr,inode_checksum,sb_checksum /dev/sdxY

/dev/sdxY 부분에는 F2FS으로 포맷할 볼륨명을 넣는다.

참고: 위 예시는 f2fs.fsck가 몇몇 종류의 파일 시스템 손상을 감지하고 수정하는 데 도움을 주는 최소 권장 플래그입니다. mkfs.f2fs(8)를 참고하여 더 많은 플래그들을 살펴보아라.

F2FS 파티션 마운트하기

마운트 전에 사용자가 수동으로 F2FS 커널 모듈을 로드해야 한다. root 권한으로 다음 명령어를 실행한다:

# modprobe f2fs

커널 모듈 로드 후, 다음과 같이 마운트를 할 수 있다.

# mount -t f2fs /dev/sdxY /mnt

F2FS 파티션에 아치리눅스 설치하기

최신 설치 미디어 파일로써 F2FS 파티션에 루트가 설정된 아치리눅스를 설치할 수 있다.

  1. #F2FS 포맷 파티션 생성에서 기술된 것을 참고하여 F2FS로 루트 파티션을 제작한다.
  2. ext2 포맷 또는 다른 부트로더가 지원하는 파일시스템으로 /boot 파티션을 생성한다.
  3. chrooted 전까지 Installation guide#Mount the file systems에서의 설치 과정을 따른다.
  4. f2fs-tools를 설치한다.
  5. chroot 상태에서 initramfs를 다시 생성한다.

부팅 과정에서 CRC32 모듈 로드에 실패하는 경우는 약간의 작업이 필요하다. 4.6 버전의 커널에 포함된 드라이버는 CRC32를 위해 Crypto API를 사용하므로 crc32_genericcrc32-pclmul/etc/mkinitcpio.confMODULES에 추가한 뒤 initramfs를 재생성한다.

부팅 과정에서 파티션을 찾지 못한다면 다른 디스크로 부팅 한 후 /boot/grub/grub.cfg 를 열어 root=/dev/sdXx 등으로 표기된 파티션 명을 blkid /dev/sdXx 를 입력하여 나온 UUID를 가져와 root=UUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX 꼴로 변경하면 된다. Persistent block device naming 를 참조할 수 있다.