웹사이트 검색

Linux의 스토리지 용어 및 개념 소개


소개

Linux에는 스토리지 드라이브를 비롯한 하드웨어 장치를 관리하기 위한 강력한 시스템과 도구가 있습니다. 이 기사에서는 Linux가 이러한 장치를 나타내는 방법과 원시 스토리지가 서버의 사용 가능한 공간으로 만들어지는 방법을 높은 수준에서 다룰 것입니다.

블록 스토리지란 무엇입니까?

블록 스토리지는 Linux 커널이 블록 장치라고 부르는 또 다른 이름입니다. 블록 장치는 기존의 회전하는 하드 디스크 드라이브(HDD), 솔리드 스테이트 드라이브(SSD), 플래시 메모리 스틱 등과 같이 데이터를 저장하는 데 사용할 수 있는 하드웨어입니다. 커널이 고정 크기 블록 또는 공간 청크를 참조하여 하드웨어와 인터페이스하기 때문에 블록 장치라고 합니다.

즉, 블록 스토리지는 컴퓨터의 일반 디스크 스토리지라고 생각하는 것입니다. 일단 설정되면 현재 파일 시스템 트리의 확장 역할을 하며 각 드라이브에서 정보를 교환하여 쓰거나 읽을 수 있어야 합니다.

디스크 파티션이란 무엇입니까?

디스크 파티션은 스토리지 드라이브를 사용 가능한 더 작은 단위로 나누는 방법입니다. 파티션은 드라이브 자체와 거의 같은 방식으로 취급할 수 있는 스토리지 드라이브의 섹션입니다.

파티셔닝을 사용하면 사용 가능한 공간을 분할하고 각 파티션을 다른 용도로 사용할 수 있습니다. 이것은 사용자에게 더 많은 유연성을 제공하여 잠재적으로 여러 운영 체제, 스왑 공간 또는 특수 파일 시스템에 대해 단일 디스크를 분할할 수 있도록 합니다.

디스크는 분할하지 않고 포맷하고 사용할 수 있지만 일반적으로 운영 체제는 디스크에 기록된 분할 영역이 하나뿐인 경우에도 일반적으로 분할 영역 테이블을 찾을 것으로 예상합니다. 일반적으로 더 큰 유연성을 위해 새 드라이브를 분할하는 것이 좋습니다.

MBR 대 GPT

디스크를 분할할 때 사용할 분할 형식을 아는 것이 중요합니다. 이것은 일반적으로 MBR(마스터 부트 레코드)과 GPT(GUID 파티션 테이블) 중에서 선택하는 것입니다.

MBR은 30년이 넘었습니다. 나이 때문에 몇 가지 심각한 제한 사항이 있습니다. 예를 들어 크기가 2TB를 초과하는 디스크에는 사용할 수 없으며 최대 4개의 주 파티션만 가질 수 있습니다.

GPT는 MBR에 내재된 일부 문제를 해결하는 보다 현대적인 파티셔닝 체계입니다. GPT를 실행하는 시스템은 디스크당 더 많은 파티션을 가질 수 있습니다. 이것은 일반적으로 운영 체제 자체에 의해 부과된 제한에 의해서만 제한됩니다. 또한 GPT에는 디스크 크기 제한이 없으며 파티션 테이블 정보는 손상을 방지하기 위해 여러 위치에서 사용할 수 있습니다. GPT는 MBR 전용 도구와의 호환성을 위해 "보호 MBR\을 작성할 수도 있습니다.

대부분의 경우 운영 체제에서 사용을 금지하지 않는 한 GPT가 더 나은 선택입니다.

포맷팅과 파일시스템

Linux 커널은 원시 디스크를 인식할 수 있지만 사용하려면 포맷해야 합니다. 포맷은 파일 시스템을 디스크에 쓰고 파일 작업을 위해 준비하는 프로세스입니다. 파일 시스템은 데이터를 구조화하고 기본 디스크에서 정보를 쓰고 검색하는 방법을 제어하는 시스템입니다. 파일 시스템이 없으면 표준 파일 시스템 작업에 저장 장치를 사용할 수 없습니다.

운영 체제 지원을 포함하여 각각 장단점이 있는 다양한 파일 시스템 형식이 있습니다. 이들은 모두 사용자에게 유사한 디스크 표현을 제공하지만 지원하는 기능과 플랫폼은 매우 다를 수 있습니다.

Linux용으로 널리 사용되는 파일 시스템은 다음과 같습니다.

  • Ext4: 가장 널리 사용되는 기본 파일 시스템은 Ext2 및 Ext3의 후속 제품인 Ext4입니다. Ext4 파일 시스템은 저널링되고 레거시 시스템과 역호환되며 안정적이며 성숙한 지원 및 도구를 갖추고 있습니다. 특별한 요구 사항이 없는 경우 좋은 선택입니다.
  • XFS: XFS는 성능 및 대용량 데이터 파일에 특화되어 있습니다. 대용량 파일을 처리하고 대용량 디스크로 작업할 때 신속하게 포맷되고 우수한 처리량 특성을 갖습니다. 라이브 스냅샷 기능도 있습니다. XFS는 메타데이터와 데이터 모두를 저널링하는 것과는 반대로 메타데이터 저널링을 사용합니다. 이렇게 하면 성능이 빨라지지만 갑작스러운 정전 시 잠재적으로 데이터 손상이 발생할 수 있습니다.
  • Btrfs: Btrfs는 기능이 풍부한 현대식 copy-on-write 파일 시스템입니다. 이 아키텍처를 사용하면 스냅샷 및 복제를 포함하여 파일 시스템 계층 내에서 일부 볼륨 관리 기능을 통합할 수 있습니다. 일부 소비자 및 상업용 NAS(Networked-Attached Storage) 하드웨어에서 기본적으로 사용되며 전용 다중 디스크 어레이에 많이 사용됩니다.
  • ZFS: ZFS는 강력하고 성숙한 기능 세트를 갖춘 또 다른 기록 중 복사 파일 시스템 및 볼륨 관리자입니다. Btrfs와 상당히 직접적으로 경쟁하고, 데이터 무결성 기능이 있으며, 큰 파일 시스템 크기를 처리할 수 있고, 스냅샷 및 복제와 같은 일반적인 볼륨 기능이 있으며, 중복성과 성능 목적을 위해 볼륨을 RAID 및 RAID와 같은 어레이로 구성할 수 있습니다. ZFS는 라이센스 문제로 인해 논란의 여지가 있는 역사를 가지고 있지만 상업적 지원을 고려할 때 Btrfs보다 인기가 많지 않습니다.

또한 Windows는 주로 *NTFS 및 ExFAT를 사용하고 macOS는 주로 HFS+ 및 APFS를 사용합니다. 일반적으로 다른 플랫폼에서 이러한 파일 시스템 형식을 읽고 쓰는 것이 가능하지만 추가 호환성 도구가 필요할 수 있습니다.

Linux가 저장 장치를 관리하는 방법

/dev의 장치 파일

Linux에서는 거의 모든 것이 파일 시스템 계층 구조의 어딘가에 파일로 표시됩니다. 여기에는 시스템에서 /dev 디렉토리의 파일로 표시되는 스토리지 드라이브와 같은 하드웨어가 포함됩니다. 일반적으로 저장 장치를 나타내는 파일은 sd 또는 hd로 시작하고 뒤에 문자가 옵니다. 예를 들어 서버의 첫 번째 드라이브는 일반적으로 /dev/sda와 같습니다.

이러한 드라이브의 파티션에는 드라이브 이름 끝에 파티션 번호를 추가하여 표시되는 /dev 내에 파일이 있습니다. 예를 들어 이전 예에서 드라이브의 첫 번째 파티션은 /dev/sda1입니다.

/dev/sd*/dev/hd* 장치 파일은 드라이브 및 파티션을 참조하는 기존 방식을 나타내지만 이러한 값만 사용하면 상당한 단점이 있습니다. . Linux 커널은 부팅할 때마다 어떤 장치에 어떤 이름을 부여할지 결정하므로 장치가 장치 노드를 변경하는 혼란스러운 시나리오가 발생할 수 있습니다.

이 문제를 해결하기 위해 /dev/disk 디렉토리에는 시스템에서 디스크와 파티션을 식별하기 위한 다양하고 보다 지속적인 방법에 해당하는 하위 디렉토리가 포함되어 있습니다. 여기에는 부팅 시 올바른 /dev/[sh]da* 파일로 생성되는 심볼릭 링크가 포함되어 있습니다. 링크는 디렉토리의 식별 특성에 따라 이름이 지정됩니다(예: /dev/disk/by-partlabel 디렉토리의 파티션 레이블). 이러한 링크는 항상 올바른 장치를 가리키므로 스토리지 공간의 정적 식별자로 사용할 수 있습니다.

다음 하위 디렉토리 중 일부 또는 전부가 /dev/disk 아래에 있을 수 있습니다.

  • 레이블별: 대부분의 파일 시스템에는 디스크 또는 파티션에 대한 임의의 사용자 지정 이름 할당을 허용하는 레이블 지정 메커니즘이 있습니다. 이 디렉토리는 이러한 사용자 제공 레이블의 이름을 딴 링크로 구성됩니다.
  • by-uuid: UUID 또는 범용 고유 식별자는 저장소 리소스의 ID로 사용할 수 있는 길고 고유한 문자 및 숫자 문자열입니다. 일반적으로 사람이 읽을 수는 없지만 거의 항상 시스템 간에 고유합니다. 따라서 이름 충돌 가능성이 적기 때문에 UUID를 사용하여 시스템 간에 마이그레이션할 수 있는 스토리지를 참조하는 것이 좋습니다.
  • by-partlabelby-partuuid: GPT 테이블은 식별에도 사용할 수 있는 고유한 레이블 및 UUID 세트를 제공합니다. 이것은 이전 두 디렉터리와 거의 동일한 방식으로 작동하지만 GPT 관련 식별자를 사용합니다.
  • by-id: 이 디렉토리에는 하드웨어 자체 일련 번호와 연결된 하드웨어에서 생성된 링크가 포함되어 있습니다. 기기가 시스템에 연결되는 방식에 따라 by-id 이름이 변경될 수 있기 때문에 완전히 영구적이지 않습니다.
  • by-path: by-id와 마찬가지로 이 디렉토리는 시스템 자체에 대한 저장 장치의 연결에 의존합니다. 여기에 있는 링크는 장치에 액세스하는 데 사용되는 하드웨어에 대한 시스템의 해석을 사용하여 구성됩니다. 장치를 다른 포트에 연결하면 이 값이 변경될 수 있으므로 by-id와 동일한 단점이 있습니다.

일반적으로 레이블별 또는 uuid별은 특정 장치를 지속적으로 식별하는 데 가장 적합한 옵션입니다.

참고: DigitalOcean 블록 스토리지 볼륨은 운영 체제에 보고되는 장치 일련 번호를 제어합니다. 이렇게 하면 by-id 분류가 이 플랫폼에서 안정적으로 지속될 수 있습니다. 이는 최초 부팅 시 지속적이고 예측 가능하기 때문에 DigitalOcean 볼륨을 참조하는 데 선호되는 방법입니다.

마운팅 블록 장치

Linux 및 기타 Unix 계열 운영 체제에서 전체 시스템은 관련된 물리적 장치 수에 관계없이 단일 통합 파일 트리로 표시됩니다. 드라이브 또는 파티션의 파일 시스템을 사용하려면 기존 트리에 연결해야 합니다. 마운트는 포맷된 파티션이나 드라이브를 Linux 파일 시스템 내의 디렉토리에 연결하는 프로세스입니다. 그러면 해당 디렉토리에서 드라이브의 내용에 액세스할 수 있습니다.

드라이브는 거의 항상 전용 빈 디렉터리에 마운트됩니다. 비어 있지 않은 디렉터리에 마운트하면 드라이브가 마운트 해제될 때까지 디렉터리의 일반적인 내용에 액세스할 수 없습니다. 마운트된 장치의 동작을 변경하도록 설정할 수 있는 다양한 마운트 옵션이 있습니다. 예를 들어, 내용이 변경되지 않도록 드라이브를 읽기 전용 모드로 마운트할 수 있습니다.

Filesystem Hierarchy Standard는 일시적으로 마운트된 파일 시스템에 대해 /mnt 또는 그 아래의 하위 디렉토리를 사용할 것을 권장합니다. 더 많은 영구 스토리지를 마운트할 위치에 대한 권장 사항이 없으므로 원하는 방식을 선택할 수 있습니다. 많은 경우에 /mnt 또는 /mnt 하위 디렉토리는 보다 영구적인 저장을 위해 사용됩니다.

/etc/fstab을 사용하여 마운트를 영구적으로 만들기

Linux 시스템은 /etc/fstab(파일 시스템 테이블)라는 파일을 사용하여 부팅 프로세스 중에 마운트할 파일 시스템을 결정합니다. 이 파일에 항목이 없는 파일 시스템은 다른 소프트웨어에서 스크립팅하지 않는 한 자동으로 마운트되지 않습니다.

/etc/fstab 파일의 각 줄은 마운트해야 하는 다른 파일 시스템을 나타냅니다. 이 줄은 블록 장치, 부착할 마운트 지점, 드라이브 형식, 마운트 옵션 및 기타 몇 가지 정보를 지정합니다.

더 복잡한 스토리지 관리

많은 사용 사례가 이러한 핵심 기능에 의해 수용되지만 여러 디스크, 특히 RAID를 결합하는 데 사용할 수 있는 보다 복잡한 관리 패러다임이 있습니다.

RAID란 무엇입니까?

RAID는 독립 디스크의 중복 배열을 나타냅니다. RAID는 드라이브를 함께 그룹화하고 추가 기능이 있는 단일 장치로 관리할 수 있는 스토리지 관리 및 가상화 기술입니다.

RAID 어레이의 특성은 어레이의 디스크가 서로 관련되는 방식을 정의하는 RAID 수준에 따라 다릅니다. 보다 일반적인 수준은 다음과 같습니다.

  • RAID 0: 이 수준은 드라이브 스트라이핑을 나타냅니다. 이는 데이터가 어레이에 기록될 때 분할되어 세트의 디스크 간에 선형으로 분산됨을 의미합니다. 여러 디스크를 동시에 쓰거나 읽을 수 있으므로 성능이 향상됩니다. 단점은 하나의 디스크에 재구축할 콘텐츠에 대한 충분한 정보가 포함되어 있지 않기 때문에 단일 드라이브 오류로 전체 어레이의 모든 데이터가 손실될 수 있다는 것입니다. RAID 0은 비교 대상으로 유용할 수 있지만 일반적으로 이러한 이유로 프로덕션 환경에서 사용되지 않습니다.
  • RAID 1: RAID 1은 드라이브 미러링을 나타냅니다. RAID 1 어레이에 기록된 모든 내용은 여러 디스크에 기록됩니다. 주요 장점은 데이터 중복성으로, 미러 양쪽에서 하드 드라이브가 손실되더라도 데이터가 살아남을 수 있습니다. 여러 드라이브에 완전히 동일한 데이터가 포함되므로 사용 가능한 용량이 절반 이상 줄어듭니다.
  • RAID 5: RAID 5는 RAID 0과 유사하게 여러 드라이브에 데이터를 스트라이핑합니다. 그러나 이 수준은 드라이브 전체에 분산된 패리티도 구현합니다. 즉, 드라이브에 오류가 발생하면 나머지 드라이브는 서로 공유되는 패리티 정보를 사용하여 어레이를 재구축할 수 있습니다. 일반적으로 이것은 하나의 디스크를 재구축하기에 충분합니다. 즉, 어레이는 하나의 디스크 손실에서 살아남을 수 있습니다. RAID 5는 디스크 하나의 용량만큼 어레이의 사용 가능한 공간을 줄입니다.
  • RAID 6: RAID 6은 RAID 5와 속성이 동일하지만 이중 패리티를 제공합니다. 이것은 RAID 6 어레이가 2개의 드라이브 손실을 견딜 수 있음을 의미합니다. 어레이의 용량은 다시 패리티 양의 영향을 받습니다. 즉, 사용 가능한 용량이 2개의 디스크 공간만큼 줄어듭니다.
  • RAID 10: RAID 10은 레벨 1과 0의 조합입니다. 먼저 두 세트의 미러링 어레이가 만들어집니다. 그런 다음 데이터가 스트라이프됩니다. 이렇게 하면 우수한 성능을 제공하면서 약간의 중복 특성이 있는 어레이가 생성됩니다. 그러나 여기에는 꽤 많은 드라이브가 필요하며 총 용량은 여전히 결합된 디스크 공간의 절반 미만입니다.

다음에 어디로 가야합니까?

Linux 시스템에서 사용하려는 새 저장 장치가 있는 경우 Linux에서 저장 장치에 대한 기본 관리 작업을 수행하는 방법.