Skip to main content

챕터 0 : 소개

대부분의 시스템 관리 교육은 파일시스템에 초점을 맞춥니다. 컴퓨터의 파일시스템은 컴퓨터의 성능과 동작의 많은 부분을 좌우합니다. 지난 수십 년 동안 우리는 주요 파일시스템이 잘못 구성되었거나, 선택한 파일시스템이 작업에 적합하지 않았거나, 파일 전체에 미묘한 파일시스템 손상이 확산되어 운영체제와 함께 제공된 기본 프로그램조차 신뢰할 수 없게 되어 시스템 전체를 재구축한 적이 있습니다. 시스템 관리자로 몇 년 이상 근무한 사람이라면 누구나 파일 시스템을 복구하고, 파일 시스템을 재구성하고, 성가신 버그부터 치명적인 버그까지 해결하고, 파일 시스템 제한을 지원하기 위해 디스크를 재정렬하고, 9개 이상의 언어로 파일 시스템에 대해 광범위하게 욕하는 방법을 배웠을 것입니다.

오늘날 가장 널리 사용되는 파일시스템 중 일부는 컴퓨팅 규모로 볼 때 오래된 것입니다. 우리는 5년이 지나 너무 느리다는 이유로 하드웨어를 폐기하고 그 자리에 30년 된 파일시스템을 설치합니다. extfs, UFS2, NTFS와 같은 최신 파일시스템도 그 핵심에 오래된 아이디어를 사용합니다. Z 파일 시스템, 즉 ZFS는 이 모든 것을 바꾸기 위해 등장했습니다.

ZFS란 무엇인가?

ZFS는 파일시스템이 데이터 무결성을 보장할 수 있어야 한다는 핵심 아이디어로 구축된 최신 파일시스템입니다. ZFS는 디스크의 모든 데이터에 대해 체크섬을 계산하여 스토리지 미디어에 오류가 발생하여 데이터가 손상된 시점을 식별할 수 있습니다. 모든 메타데이터에 대해 동일한 암호화 서명을 수행합니다. 기본 하드웨어에 문제가 발생하거나 오작동이 발생하면 ZFS는 검색한 데이터가 기록과 일치하지 않음을 인식하고 조치를 취할 수 있습니다. 심지어 ZFS는 발견된 오류를 자동으로 수정하기도 합니다! ZFS는 손상된 것으로 확인된 데이터의 제공을 거부합니다.

파일시스템 설계자들은 30년 전에 이러한 아이디어를 가지고 있었지만, 당시의 하드웨어로는 이 정도의 오류 검사를 적절한 성능으로 수행할 수 없었습니다. ZFS의 개발자들은 현재의 하드웨어와 하드웨어의 발전 방향을 살펴본 후, ZFS가 새로운 하드웨어를 최대한 활용하기로 결정했습니다. 그 결과 기존 파일시스템보다 더 안정적일 뿐만 아니라 더 빠른 파일시스템이 탄생했습니다.

오늘날의 전통적인 파일시스템은 "지금은 이 정도면 충분하다"는 철학으로 작성된 것으로 보입니다. 많은 파일시스템은 임의의 크기 제한으로 인해 5년, 10년, 심지어 20년 동안은 충분했지만 결국 재작성 및 재작업이 필요했습니다. 많은 구형 파일시스템은 2기가바이트보다 큰 파티션을 처리할 수 없었는데, 요즘은 병따개에 부착해 무료로 제공하는 플래시 드라이브보다 작은 크기입니다. (실제로는 병따개가 필요해서 구입한 것입니다.) 하지만 1980년대 초 UFS가 처음 출시되었을 때 2기가바이트는 수백만 달러에 달하는 엄청나게 큰 용량의 스토리지였습니다. FAT와 같은 파일시스템은 360KB 플로피 디스크의 공간을 효율적으로 사용해야 했습니다. UFS는 당장은 물론 앞으로도 당분간 '충분'했습니다.

ZFS는 가까운 미래에도 살아남을 수 있도록 의도적으로 설계되었습니다. 많은 새로운 파일시스템은 내부적으로 64비트 식별자와 인덱스를 사용하므로 향후 10년 또는 20년 동안 변경 없이 사용할 수 있습니다. ZFS는 내부적으로 128비트 식별자를 사용하므로 향후 수천 년 동안 스토리지 시스템에서 작동할 수 있는 충분한 용량을 제공합니다. 스타트렉에 등장하는 엔터프라이즈호의 컴퓨터는 아마도 ZFS를 실행할 것입니다. ZFS의 기본 제공 제약을 초과하는 디스크, 파티션 및 파일을 처리해야 하는 미래의 시스템 관리자는 우리를 원시인 및 최초의 성간 여행자들과 함께 역사에 남게 될 것입니다.

엄밀히 말하면 ZFS는 단순한 파일 시스템이 아닙니다. 파일시스템과 볼륨 관리자가 결합된 형태입니다. 이 두 가지 기능을 하나의 소프트웨어에 결합하면 나중에 설명하겠지만 몇 가지 제한이 따르지만 매우 흥미로운 작업도 가능합니다. ZFS는 디스크에서 데이터가 어디로 가는지 정확히 알고 있기 때문에 파일과 스트라이프를 위에서 아래로 최적으로 배열할 수 있습니다. ZFS는 보조 고속 스토리지를 특수 목적의 캐시로 사용하여 성능을 더욱 향상시킬 수 있습니다. FreeBSD 마스터리: ZFS 에센셜은 이 최신의 고성능 미래형 파일 시스템을 실행하기 위해 반드시 알아야 할 사항을 안내합니다.

ZFS 역사

매트 아렌스와 제프 본윅은 썬 마이크로시스템즈의 솔라리스® 운영 체제용 ZFS를 만들었습니다. Sun은 모든 규모의 시스템을 판매했지만, 주로 하이엔드 서버 하드웨어에 주력했습니다. Sun 하드웨어는 전 세계 대부분의 대형 데이터베이스를 구동했습니다. Sun은 공통 개발 및 배포 라이선스(CDDL)에 따라 ZFS 소스 코드를 전 세계에 제공했습니다. 사람들은 FreeBSD를 비롯한 다른 운영 체제로 ZFS를 포팅하고 변경 사항을 다시 Sun에 기여하기 시작했습니다.

그러던 중 오라클이 썬 마이크로시스템을 인수했습니다. 오라클은 MySQL과 같은 일부 오픈 소스 소프트웨어를 보유하고 있지만, 대부분의 소프트웨어는 독점 소프트웨어입니다. 오라클은 ZFS 개발을 완전히 사내로 가져왔고 오픈 소스 라이선스에 따른 소스 코드 제공을 중단했습니다.

하지만 ZFS 코드는 이미 공개되어 있었고, CDDL 라이선스 조건에 따라 오라클은 사람들이 이를 사용하는 것을 막을 수 없었습니다. 다양한 오픈 소스 프로젝트가 자체적인 ZFS 개발 노력을 시작했습니다.

현재 OpenZFS 프로젝트(http://open-zfs.org)가 오픈 소스 버전의 ZFS를 총괄하고 있습니다. OpenZFS는 Linux, OS X, Illumos, FreeBSD를 비롯한 여러 회사 및 운영 체제의 ZFS 개발자를 한데 모으고 있습니다. 매트 아렌스가 이 프로젝트를 이끌고 있습니다.

다른 FreeBSD와 달리, ZFS는 제한적인 라이선스를 가지고 있습니다. CDDL은 특허 소송을 제기할 수 있는 능력을 제한하며, ZFS에 대한 기여는 자동으로 CDDL의 적용을 받습니다. FreeBSD의 2항 BSD 라이선스는 누구나 특허 소송을 포함한 모든 용도로 코드를 사용할 수 있도록 허용합니다. 그러나 CDDL은 코드의 재사용, 재배포 및 변경을 허용하므로 일반적인 기업 환경에서는 누구나 코드를 사용할 수 있습니다. 하지만 ZFS를 기반으로 제품을 만들거나 다른 제품에 ZFS를 포함하려면 변호사와 상담하세요.

사전 요구 사항

이 책은 ZFS에 관심이 있는 FreeBSD 시스템 관리자를 위해 작성되었습니다. 우리는 여러분이 설치, 사용자 구성, GEOM 기반 스토리지 관리 등 FreeBSD의 기본 사항에 익숙하다고 가정합니다. "스토리지 제공자"가 무엇이며 왜 우리가 이 용어를 사용하는지 알고 계실 것입니다. 자신의 기술에 대해 확신이 서지 않는다면, Absolute FreeBSD(No Starch Press, 2007)와 같은 책이나 다른 FreeBSD 마스터리 타이틀을 구입하여 지식을 보강하거나 온라인 문서와 매뉴얼 페이지를 참조할 수 있습니다.

FreeBSD가 아닌 다른 운영 체제에서 OpenZFS를 사용하는 경우, 이 책은 실용적인 ZFS 지식과 경험을 많이 제공합니다. FreeBSD와 관련된 내용은 무시해도 되지만, ZFS를 최적화하고 관리하는 방법을 배울 수 있습니다.

이 책은 오라클 ZFS에 대해 테스트하지 않았습니다. 오라클은 비공개 소스인 ZFS를 독자적인 방향으로 발전시켜 왔으며, 오라클 솔라리스를 실행해야 하는 경우 오라클의 공식 문서를 읽는 것이 더 좋습니다.

디스크 기술에 대해 알아야 합니다. FreeBSD의 ZFS는 모든 GEOM 제공업체에서 실행할 수 있지만, 원시 디스크에서 실행하면 특정 이점이 있습니다. RAID 컨테이너에서 ZFS를 실행하면 이러한 이점이 사라집니다.

RAID 컨트롤러를 여러 개의 디스크처럼 작동하도록 설정할 수 있어야 합니다. 또한 ZFS를 플레이할 수 있는 테스트 머신이 있어야 합니다. 이 책을 구입하고 바로 메인 데이터베이스 서버를 ZFS로 마이그레이션하지 마세요! 테스트 머신에 ZFS를 설치한 다음 덜 중요한 머신에 설치하세요. 시스템 용도에 맞게 ZFS를 가장 잘 구성할 수 있다는 확신이 들 때까지 ZFS 기능을 실험해 보세요. ZFS는 빠르지만, 시스템 관리자가 성능을 저하시키도록 구성할 수 없을 정도로 내성이 강한 파일 시스템은 없습니다.

ZFS는 어디에서 사용하나요?

ZFS는 어디에서나 사용할 수 있지만 일부 환경에서는 제대로 작동하지 않을 수 있습니다.

특정 가상화 시스템에서는 ZFS가 최선의 선택이 아닐 수도 있습니다. 저희는 ZFS 파일 시스템에 막히는 Linux KVM 기반 가상화 시스템을 두 개 이상 사용해 보았으며, 다른 시스템에서도 비슷한 문제가 발생한다고 해도 놀라지 않을 것입니다. 호스트 간 마이그레이션이나 이미지 기반 백업에서 복원하는 것과 같은 기능은 문제가 될 수 있습니다. 가상화 시스템에서 ZFS를 사용하기 전에 가상화 시스템에서 충분히 테스트하는 것이 좋습니다. Lucas는 이러한 시스템에 ZFS를 배포했지만 다른 백업 및 마이그레이션 전략을 사용합니다. 

ZFS는 최신 하드웨어용으로 작성되었습니다. 최소한 몇 기가바이트의 RAM이 있어야 합니다. 라즈베리 파이와 같은 임베디드 시스템은 UFS2와 같은 기존 파일시스템에 더 적합합니다.

특정 하드웨어의 특정 고강도 워크로드는 특히 실제 512바이트 블록이 있는 하드 드라이브가 있는 경우 ZFS보다 UFS2에서 더 잘 수행됩니다. 데이터베이스의 성능을 최대한 끌어올리고 싶다면 UFS2와 ZFS 모두에서 성능을 테스트해 보세요.

ZFS 하드웨어

많은 사람들이 ZFS에 하이엔드 하드웨어를 추천합니다. 저희도 하이엔드 하드웨어를 좋아합니다. 멋지죠. 하지만 하드웨어의 한계를 이해한다면 일반 하드웨어에서도 ZFS가 잘 작동합니다. 인터넷에서 찾을 수 있는 대부분의 ZFS 문서에는 최신 ZFS에 적용되지 않거나 FreeBSD에 적용되지 않는 권장 사항이 포함되어 있습니다.

RAM

Sun의 문서에서 ZFS를 잘 사용하려면 ECC RAM이 필요하다고 말한 것은 놀라운 일이 아닙니다. 썬은 하이엔드 서버를 판매했기 때문입니다. 하지만 매트 아렌스에 따르면, "ECC가 없는 시스템의 ZFS는 ECC가 있는 시스템의 다른 파일 시스템보다 더 위험하지 않다"고 합니다. ZFS에 내장된 오류 수정 기능은 메모리로 인한 오류를 대부분 보정하지만 모든 오류를 보정하지는 않습니다.

물론 ECC RAM을 선호하는 일반적인 논거는 여전히 유효합니다. 비 ECC 메모리가 장착된 시스템에서는 메모리 손상이 발생할 수 있으며, 이러한 오류 중 일부가 디스크에 기록될 수 있습니다. 그러나 이러한 오류는 사용 중인 파일시스템에 관계없이 발생할 수 있으며, ZFS 체크섬을 통해 문제를 식별할 수 있습니다. 고가용성 서비스를 실행하는 경우, 일반적인 모든 이유로 ECC가 필요합니다. 하지만 ZFS 노트북이나 홈 무비 서버는 일반 RAM으로도 정상적으로 작동합니다. 

RAID 컨트롤러

하드웨어 RAID 컨트롤러를 사용하지 마세요. 절대로. 하드웨어 RAID 장치 위에서 ZFS를 실행하면 RAID의 모든 단점과 ZFS의 모든 단점이 있는 구성이 만들어집니다. 디스크 컨트롤러에는 RAID가 아닌 HBA(호스트 버스 어댑터)를 사용하십시오.

모든 RAID는 소프트웨어 RAID입니다. 하드웨어 RAID 컨트롤러는 사용자 지정 운영 체제를 실행하여 RAID 작업을 수행하며, 이 과정에서 운영 체제에서 하드웨어를 가립니다. 이는 스토리지 관리를 위해 소비자 운영 체제를 신뢰할 수 없었던 상업용 컴퓨팅이 널리 보급되던 초창기에는 의미가 있었습니다. Windows 3.1에서 OS 수준의 소프트웨어 RAID를 실행하는 것에 대해 3초만 생각해 보면 하드웨어 RAID가 왜 그렇게 보편화되었는지 이해할 수 있을 것입니다.

운영 체제가 개선되었습니다. 하드웨어는 수십억 배 더 강력해졌습니다. 환경이 바뀌었습니다.

ZFS는 하드웨어에 직접 액세스할 수 있도록 설계되었습니다. 의도적으로 중요한 메타데이터를 여러 디스크에 저장합니다. 그리고 이러한 디스크에 오류가 있는지 감시하고 오류를 기반으로 결정을 내립니다. 하드웨어 RAID 장치는 운영 체제에서 이 모든 걱정스러운 세부 사항을 숨겨서 ZFS가 스스로 복구할 수 있는 기능을 제거합니다. 하드웨어 RAID는 경쟁 기능이 없습니다.

ZFS 어레이를 재구축하는 것이 RAID 어레이를 재구축하는 것보다 훨씬 빠르며, 이는 파일 시스템과 중복성을 통합한 ZFS의 기능 덕분입니다. 하드웨어 RAID로 중복성을 관리하면 이러한 속도를 잃게 됩니다.

그러나 많은 RAID 컨트롤러는 일종의 RAID가 없는 디스크를 사용할 수 없습니다. 컨트롤러에 "디스크만 여러 개", 즉 JBOD를 구성하더라도 이러한 컨트롤러는 실제로 각 드라이브를 단일 디스크 RAID-0으로 포맷합니다. 이렇게 하면 운영 체제에서 블록 크기 및 여러 디스크 오류와 같은 특정 정보가 가려집니다. 더 나쁜 것은 이러한 컨트롤러에서 사용되는 디스크는 이 브랜드의 컨트롤러에서만 읽을 수 있으며, 때로는 이 모델의 RAID 컨트롤러에서만 읽을 수 있다는 것입니다! ZFS에 이러한 RAID 컨트롤러를 사용하면 새 박스에 정확히 동일한 RAID 카드가 있는 경우가 아니라면 하드 드라이브를 다시 포맷하지 않고는 다른 컴퓨터로 옮길 수 없습니다. 이렇게 하면 ZFS의 모든 풀 이동성이 사라집니다.

일부 하드웨어 RAID 카드는 재플래시하여 JBOD 컨트롤러로 사용할 수 있습니다. 불량 플래시는 RAID 카드를 망가뜨릴 수 있습니다. 두 저자 모두 하드웨어 RAID를 다시 사용하지 않을 것이므로 이 위험을 감수합니다.

전생에 아주 나쁜 사람이었기 때문에 하드웨어 RAID를 사용할 수밖에 없다면 운영 체제에 단일 디스크를 제시하세요.

RAID 컨트롤러가 각 디스크를 RAID 0으로 포맷해야 한다고 고집하면 문제가 발생합니다. 컨트롤러에서 "다시 쓰기" 모드를 비활성화하세요. 그렇지 않으면 컨트롤러의 쓰기 캐시로 인해 파일 시스템이 손상될 수 있습니다. 복잡성 증가, 성능 저하, 위험 증가를 감수하세요. 피할 수 없는 장애가 발생했을 때 "내가 말했잖아"라고 말하며 백업에서 복원하는 수고로움을 보상받을 수 있도록 이 모든 것을 경영진에게 이메일로 문서화하세요.

호스트 버스 어댑터는 RAID 카드보다 비용뿐 아니라 시간 면에서도 훨씬 저렴합니다. 사용하세요.

SATA 대 SAS 대 SSD

데이터 저장 장치는 다양한 유형으로 제공됩니다. ZFS는 SAS 드라이브, SATA 드라이브, 회전식 플래터, SSD 장치 또는 운영 체제에서 지원하는 기타 모든 저장 매체를 사용할 수 있습니다.