[Storage 이론] NFS를 이용한 자동 마운트
자동 마운터를 이용한 NFS export 마운트 자동 마운터는 파일 시스템 및 NFS export를 온디맨드로 자동 마운트하고, 마운트된 리소스가 현재 더 이 상 사용되지 않는 경우 파일 시스템 및 NFS export를 자동으로 마운트 해제하는 서비스(autofs)다. 자동 마운터 기능은 권한이 없는 사용자에게 mount 명령을 사용할 수 있는 충분한 권한이 없는 문제를 해결 하기 위해 고안되었다. 일반 사용자가 CD, DVD와 같은 이동식 미디어 및 이동식 디스크 드라이브에 액세 스하려면 mount 명령을 사용해야 한다. 또한 부팅 시 /etc/fstab 구성을 사용하여 로컬 또는 원격 파일 시스템을 마운트해야 일반 사용자가 마운트 해제된 파일 시스템을 마운트하고 해당 시스템에 액세스할 수 있다. 자동..
2023.03.25
no image
[Storage 이론] NFS(Network File System)를 이용한 스토리지 관리 + fstab 편집 요령
목차 NFS 주요 기능 fstab 수정 요령 NFS를 통한 설정 NFS NFS(Netwrok File System)는 컴퓨터가 로컬 하드 드라이브에 있는 것처럼 네트워크를 통해 파일에 액세스하고 공유할 수 있도록 하는 분산 파일 시스템 프로토콜이다. NFS는 1980년대에 Sun Microsystems에서 개발했으며 현재 Unix 및 Linux 기반 시스템은 물론 macOS 및 Windows(추가 소프트웨어 포함)와 같은 다른 운영 체제에서도 널리 사용되고 있다. NFS는 클라이언트-서버 모델에서 작동한다. 여기서 NFS 서버는 네트워크를 통해 이러한 공유 리소스를 마운트하고 액세스하는 클라이언트로 디렉토리와 파일을 내보낸다(공유). 이를 통해 여러 사용자와 시스템이 동시에 공유 파일에 대해 작업할 수 ..
2023.03.25
[Storage 이론] 스토리지 스택이란?
스토리지 스택은 컴퓨터 시스템의 데이터 스토리지를 관리하고 액세스하기 위해 함께 작동하는 하드웨어, 소프트웨어 및 프로토콜 모음을 나타낸다. 스토리지 스택은 데이터 구성, 검색 및 관리와 같은 다양한 스토리지 관련 작업을 처리하고 데이터 안정성, 성능 및 확장성을 보장한다. 쉽게 이야기하자면 하드웨어부터 소프트웨어까지의 구성이 어떤지라고 보아도 무방할듯하다. 구성요소 저장 장치 여기에는 하드 디스크 드라이브(HDD), 솔리드 스테이트 드라이브(SSD), USB 드라이브 및 데이터를 저장하는 기타 물리적 장치가 포함됩니다. 스토리지 스택의 기초를 형성한다. 스토리지 인터페이스 및 프로토콜 컴퓨터 시스템과 스토리지 장치 간의 통신을 가능하게 한다. 예를 들면 SATA(Serial ATA), SAS(Seria..
2023.03.24
[Hardware] 디스크의 종류와 특징
디스크란 운영 체제, 응용 프로그램 및 사용자 데이터와 같은 디지털 정보를 저장하고 검색하는 데 사용되는 저장 장치를 말한다. 디스크는 하드 디스크 드라이브(HDD)와 솔리드 스테이트 드라이브(SSD)의 두 가지 주요 유형으로 분류할 수 있다. 두 가지 유형의 디스크 모두 컴퓨터 및 기타 디지털 시스템에서 기본 또는 보조 저장 장치 역할을 하여 사용자가 데이터를 저장, 액세스 및 관리할 수 있도록 한다. 하드 디스크 드라이브(HDD) HDD는 Hard Disk Drive의 약자로 컴퓨터 및 기타 전자 장치에서 일반적으로 사용되는 데이터 저장 장치 유형이다. 하드 디스크 드라이브는 기본이며 일반적으로 컴퓨터에서 가장 중요한 데이터 스토리지 하드웨어 장치다. HDD는 데이터를 저장하는 표면에 작은 트랙이 새..
2023.03.24
[공통 이론] Race Condition이란?
목차 들어가며 Race Condition 원인 비유를 통한 예시 Race Condition의 결과 방지 및 완화 오늘은 강의 중 강사님께서 참고하라고 알려주신 Race Condition에 대해 추가로 알아보았다. 지금은 리눅스를 배우고 있지만 최종적으로는 클라우드를 다룰 수 있게 되는 것이다 보니 점점 알아야할 범위가 소프트웨어에서 하드웨어로까지 이동하는 것 같은 느낌이다. 클라우드 엔지니어는 슈퍼맨, 슈퍼우먼인걸까? 새삼 IT 업계 종사들이 존경스럽다. 사담은 여기까지하고 얼른 들어가보자! Race Condition Race Condition은 컴퓨터 시스템, 특히 동시 또는 병렬 컴퓨팅에서 프로그램 또는 시스템의 동작이 스레드 또는 프로세스가 실행되는 순서와 같은 이벤트의 상대적 타이밍에 따라 달라지..
2023.03.21
[공통 이론] File discription이란?
File discription 파일 디스크립터는 운영 체제 내에서 열려 있는 파일 또는 파이프나 네트워크 소켓과 같은 기타 입/출력(I/O) 리소스에 대한 식별자 역할을 하는 음수가 아닌 정수이다. 파일 설명자는 운영 체제의 커널에서 열린 파일 및 I/O 리소스를 추적하고 관리하는 데 사용된다. 프로그램이 파일을 열거나 새 I/O 리소스를 만들 때 운영 체제는 해당 리소스에 고유한 파일 설명자를 할당한다. 그런 다음 프로그램은 이 파일 설명자를 사용하여 파일 또는 리소스에 대한 작업을 참조하고 수행한다. 특징 1. 표준 파일 설명자 기본적으로 Unix 계열 시스템의 모든 프로세스에는 생성 시 할당된 세 가지 표준 파일 설명자가 있다. 0(stdin): 표준 입력, 일반적으로 키보드에 연결됨 1(stdou..
2023.03.21
반응형
자동 마운터를 이용한 NFS export 마운트

자동 마운터는 파일 시스템 및 NFS export를 온디맨드로 자동 마운트하고, 마운트된 리소스가 현재 더 이 상 사용되지 않는 경우 파일 시스템 및 NFS export를 자동으로 마운트 해제하는 서비스(autofs)다.

 

자동 마운터 기능은 권한이 없는 사용자에게 mount 명령을 사용할 수 있는 충분한 권한이 없는 문제를 해결 하기 위해 고안되었다. 일반 사용자가 CD, DVD와 같은 이동식 미디어 및 이동식 디스크 드라이브에 액세 스하려면 mount 명령을 사용해야 한다. 또한 부팅 시 /etc/fstab 구성을 사용하여 로컬 또는 원격 파일 시스템을 마운트해야 일반 사용자가 마운트 해제된 파일 시스템을 마운트하고 해당 시스템에 액세스할 수 있다.

 

자동 마운터 구성 파일은 /etc/fstab 항목과 유사한 방식으로 파일 시스템 마운트 정보로 채워진다. / etc/fstab 파일 시스템은 시스템 부팅 중 마운트되고 시스템을 종료하거나 다른 개입이 있을 때까지 마운 트된 상태로 유지되지만, 자동 마운터 파일 시스템은 시스템 부팅 중에 반드시 마운트되는 것은 아니다. 대신 자동 마운터 제어 파일 시스템은 사용자 또는 애플리케이션이 파일에 액세스하기 위해 파일 시스템 마운트 지점을 입력할 때 온디맨드로 마운트된다.


자동 마운터 이점

파일 시스템은 프로그램에서 열려 있는 파일을 읽고 쓸 때만 리소스를 사용하기 때문에 자동 마운터 파일 시 스템의 리소스 사용량은 부팅 시 마운트된 파일 시스템과 동일하다. 마운트되었지만 유휴 상태인 파일 시스 템과 마운트되지 않은 파일 시스템은 동일한 양의 리소스를 사용한다(거의 사용하지 않음).

 

자동 마운터의 이점은 파일 시스템을 더 이상 사용하지 않을 때마다 마운트 해제하여 파일 시스템이 열려 있 는 동안 발생하는 예기치 않은 손상으로부터 보호한다는 것이다.

 

파일 시스템을 다시 마운트하도록 지정하 면 마지막 시스템 부팅 중 몇 달 전에 마운트한 구성을 여전히 사용할 수 있는 /etc/fstab 마운트와 달리, autofs 서비스는 최신 마운트 구성을 사용한다. 또한 NFS 서버 구성에 중복 서버 및 경로가 포함된 경우 자동 마운터는 새 파일 시스템이 요청될 때마다 가장 빠른 연결을 선택할 수 있다.


자동 마운터 autofs 서비스

autofs 서비스는 NFS 및 SMB 파일 공유 프로토콜을 포함하여 /etc/fstab 파일과 같은 로컬 및 원격 파 일 시스템을 지원하고, 보안 매개 변수를 포함하여 동일한 프로토콜별 마운트 옵션을 지원한다.

 

자동 마운 터를 통해 마운트한 파일 시스템은 기본적으로 모든 사용자가 사용할 수 있지만 액세스 권한 옵션을 통해 제 한할 수 있다. 자동 마운터는 표준 mount 및 umount 명령을 사용하여 파일 시스템을 관리하는 클라이언트 측 구성이므 로 사용 중인 자동 마운트 파일 시스템은 /etc/fstab를 사용하여 마운트한 파일 시스템과 동일하게 작동 한다.

 

차이점은 마운트 지점에 액세스할 때까지 자동 마운터 파일 시스템이 마운트 해제된 상태로 유지되어 파일 시스템이 즉시 마운트되고 파일 시스템을 사용하는 동안 마운트된 상태로 유지된다는 것이다. 파일 시 스템의 모든 파일이 닫히고 모든 사용자와 프로세스가 마운트 지점 디렉터리에서 나가면 자동 마운터는 최소 시간 초과 후 파일 시스템을 마운트 해제한다.


직접 및 간접 맵 사용 사례

자동 마운터는 직접 및 간접 마운트 지점 매핑을 모두 지원하여 두 가지 유형의 마운트 요청을 처리한다. 직접 마운트는 파일 시스템이 변경되지 않는 알려진 마운트 지점 위치에 마운트되는 경우다. 자동 마운터에 대해 알아보기 전에 사용자가 구성한 거의 모든 파일 시스템 마운트는 보통 직접 마운트이다.

 

직접 마운트 지점은 다른 일반 디렉터리와 마찬가지로 영구 디렉터리로 존재한다. 간접 마운트는 마운트 요구가 발생할 때까지 마운트 지점 위치를 알 수 없는 경우다. 간접 마운트의 한 예 는 원격 마운트 홈 디렉터리 구성으로, 사용자 홈 디렉터리의 디렉터리 경로에 사용자 이름이 포함된다.

 

자동 마운터에서 홈 디렉터리를 마운트하도록 지정한 사용자를 파악하고 사용할 마운트 지점 위치를 결정한 후에 만 사용자의 원격 파일 시스템이 홈 디렉터리에 마운트된다. autofs 서비스는 간접 마운트 지점이 있 는 것처럼 보여도 마운트 요청이 발생하면 해당 지점을 생성하고, 요청이 종료되어 파일 시스템이 마운트 해 제되면 다시 삭제한다.


NFS 컨텍스트에서 마스터 맵, 간접 맵 및 직접 맵은 자동 마운트 서비스와 관련된다. 자동 마운트는 NFS 공유에 액세스할 때 자동으로 마운트하고 비활성 기간 후에 마운트 해제한다. 이를 통해 리소스 사용량을 줄이고 NFS 마운트를 효율적으로 관리할 수 있다.

  • 마스터 맵
    마스터 맵은 자동 마운터 마운트 지점과 해당 맵 파일을 정의하는 구성 파일이다. 마스터 맵의 이름은 일반적으로 auto.master이며 /etc/auto.master 또는 /etc/auto.master.d/auto.master에 있다.

  • 간접 맵
    간접 맵은 실제 NFS 공유 및 해당 옵션을 정의한다. 간접 맵은 일반적으로 auto.<mapname>으로 이름이 지정되며 /etc에 저장된다.

  • 직접 매핑
    직접 매핑을 사용하면 탑재 지점 디렉터리 없이 개별 경로를 NFS 공유에 직접 매핑할 수 있다.

자동 마운트 방법

1. 자동 마운터 설치

Ubuntu 또는 Debian 기반
sudo apt-get update
sudo apt-get install autofs

CentOS, RHEL 또는 Fedora 기반
sudo yum install autofs
sudo dnf install autofs


2. 마스터 맵 구성

1) 마스터 맵 파일 /etc/auto.master를 편집한다. (vi, vim, vi 등)

sudo vi /etc/auto.master

2) 간접 맵에 대한 행을 추가할 경우
/mountpoint경로 /etc/auto.<mapname>

예_
/mnt/nfs_shares /etc/auto.nfs

3) 마스터 맵에 직접 맵을 추가할 경우
/- /etc/auto.direct

이 구성은 직접 매핑 파일 /etc/auto.direct가 직접 매핑에 사용되도록 지정한다.

 

3. 간접 지도 구성

1) 간접 맵 파일을 만들고 편집한다.
sudo vi /etc/auto.<mapname>

예_
sudo vi /etc/auto.nfs

2) 다음 형식을 사용하여 NFS 공유를 간접 맵에 추가한다.
<mount_point> <options> <nfs_server>:<remote_path>

예_
share1 -fstype=nfs,rw,hard,intr server_ip:/path/to/share1
share2 -fstype=nfs,rw,hard,intr server_ip:/path/to/share2


4. 직접 맵 구성

1) 직접 맵 파일을 만들고 편집한다.
sudo vi /etc/auto.direct

2)다음 형식을 사용하여 NFS 공유를 직접 맵에 추가한다.
<full_local_path> <options> <nfs_server>:<remote_path>

예_
/mnt/direct_share1 -fstype=nfs,rw,hard,intr server_ip:/path/to/direct_share1
/mnt/direct_share2 -fstype=nfs,rw,hard,intr server_ip:/path/to/direct_share2

 

5. 자동 마운트 서비스 다시 시작(변경 사항 적용)

Ubuntu 또는 Debian 기반
sudo systemctl restart autofs

CentOS, RHEL 또는 Fedora 기반
sudo systemctl restart autofs

 

6. 이제 자동 마운터 서비스가 구성되고 실행되면 간접 및 직접 맵에 지정된 NFS 공유가 액세스될 때 자동으로 마운트된다.


간접 맵의 경우 /path/to/mount/point(예: /mnt/nfs_shares) 아래에 지정된 마운트 지점에 액세스할 때 주문형 NFS 공유가 마운트된다. 예를 들어 /mnt/nfs_shares/share1에 액세스하면 자동 마운트는 이 경로의 server_ip:/path/to/share1에서 NFS 공유를 마운트한다. 비활성 기간이 지나면 자동 마운트가 공유를 마운트 해제한다.

직접 맵의 경우 지정된 전체 로컬 경로(예: /mnt/direct_share1)에 액세스할 때 NFS 공유가 직접 마운트된다. /mnt/direct_share1에 액세스하면 자동 마운트가 이 경로의 server_ip:/path/to/direct_share1에 NFS 공유를 마운트한다. 간접 맵과 유사하게 자동 마운트는 비활성 기간 후에 공유를 마운트 해제한다.

자동 마운트 서비스는 필요에 따라 공유를 마운트 및 마운트 해제하여 NFS 공유 관리를 개선하여 리소스 사용량과 네트워크 로드를 줄이는 데 도움이 된다. 또한 마스터 맵, 간접 맵 및 직접 맵을 사용하면 NFS 마운트를 중앙 집중식 구조화 방식으로 구성할 수 있다.

반응형
반응형

목차

  1. NFS
  2. 주요 기능
  3. fstab 수정 요령
  4. NFS를 통한 설정

NFS

NFS(Netwrok File System)는 컴퓨터가 로컬 하드 드라이브에 있는 것처럼 네트워크를 통해 파일에 액세스하고 공유할 수 있도록 하는 분산 파일 시스템 프로토콜이다. NFS는 1980년대에 Sun Microsystems에서 개발했으며 현재 Unix 및 Linux 기반 시스템은 물론 macOS 및 Windows(추가 소프트웨어 포함)와 같은 다른 운영 체제에서도 널리 사용되고 있다.

NFS는 클라이언트-서버 모델에서 작동한다. 여기서 NFS 서버는 네트워크를 통해 이러한 공유 리소스를 마운트하고 액세스하는 클라이언트로 디렉토리와 파일을 내보낸다(공유). 이를 통해 여러 사용자와 시스템이 동시에 공유 파일에 대해 작업할 수 있으므로 협업이 향상되고 스토리지 관리가 중앙 집중화된다.

NFS는 클라이언트와 서버 간의 통신에 RPC(원격 프로시저 호출)를 사용한다. 다양한 버전을 지원하며 NFSv4는 가장 기능이 풍부한 최신 버전이다. 


주요 기능
  • 투명한 액세스
    NFS는 클라이언트가 마치 로컬에 저장된 것처럼 공유 파일에 액세스할 수 있도록 하여 원활한 경험을 제공한다.

  • 캐싱
    NFS 클라이언트는 파일 데이터를 캐싱하여 성능을 개선하고 네트워크 부하를 줄인다.

  • 상태 비저장(NFSv3 이하)
    NFS 서버는 연결 상태 정보를 유지하지 않으므로 장애 발생 시 신속하게 복구할 수 있다. NFSv4는 성능과 기능을 개선하기 위해 몇 가지 상태 저장 요소를 도입했다.

  • 액세스 제어 및 인증
    NFS는 파일 및 디렉터리 권한과 같은 공유 리소스에 대한 액세스를 제어하는 ​​다양한 메커니즘과 NFSv4의 Kerberos 인증과 같은 고급 보안 기능을 제공한다.

  • 잠금
    NFS는 데이터 일관성을 보장하고 여러 클라이언트가 동일한 파일에 액세스하고 수정할 때 충돌을 방지하기 위해 파일 잠금을 지원한다.


NFS 서버를 설정하려면 필요한 패키지를 설치하고 공유 디렉토리를 구성하고 적절한 권한을 설정해야 한다. 클라이언트는 NFS를 설치해야 한다.


사용 방법은 기존 마운트 방법과 크게 다르지 않다.

  1. mount 명령어로 직접 마운트
  2. 텍스트 편집기를 이용해 영구 마운트
  3. 자동 마운터 메소드를 사용해 온디멘드

이 중 1번은 이미 이전 포스팅에서 다룬적이 있으므로 2, 3번을 다루도록하겠다.

 

[Linux 명령어] 디스크와 디렉토리 연결하기 (mount) + mkfs

마운트는 리눅스에서 파일 시스템을 사용하기 위한 작업으로, 하드 디스크, USB 드라이브, CD-ROM 등의 장치를 시스템에 연결하여 사용할 수 있게 한다. 마운트는 장치와 파일 시스템 간의 링크를

easyitwanner.tistory.com


fstab 수정 요령

1. nano 또는 vi와 같은 텍스트 편집기로 /etc/fstab 파일을 연다. 관리 권한을 얻으려면 sudo를 사용하십시오.

sudo nano /etc/fstab


2. 마운트하려는 파일 시스템에 대한 적절한 구문을 사용하여 파일에 새 줄을 추가한다. /etc/fstab 항목의 일반적인 형식은 다음과 같다.

<device> <mount_point> <filesystem_type> <options> <dump> <pass>

<device>: UUID, 장치 경로 또는 레이블과 같은 장치 식별자다.
<mount_point>: 파일 시스템이 마운트될 디렉토리.
<filesystem_type>: 파일 시스템 유형, 예: ext4, xfs 또는 nfs.
<options>: defaults, rw, sync, auto 또는 noauto와 같은 마운트 옵션이다.
<dump>: dump 유틸리티가 파일 시스템을 백업해야 하는 빈도(일반적으로 0으로 설정됨).
<pass>: fsck 유틸리티가 부팅 시 파일 시스템을 검사하는 순서다(확인을 비활성화하려면 0, 루트 파일 시스템의 경우 1, 기타 파일 시스템의 경우 2 사용).


예)

UUID=<UUID> /mnt/data ext4 defaults 0 2

<UUID>를 blkid 명령을 사용하여 얻을 수 있는 /dev/sdb1 파티션의 실제 UUID로 바꾼다.

sudo blkid /dev/sdb1

변경 사항을 저장하고 종료한다.

NFS를 통한 설정

[1] NFS 서버 설정

1. NFS 서버 패키지를 설치한다(아직 설치하지 않은 경우).

Ubuntu 또는 Debian 기반
sudo apt-get update
sudo apt-get install nfs-kernel-server

CentOS, RHEL 또는 Fedora 기반
sudo yum install nfs-utils


2. 공유할 디렉터리를 만들고 적절한 권한을 설정한다.

1) 디렉토리 생성
sudo mkdir /path/to/shared/directory

2) 권한 설정
sudo chown nobody:nogroup /path/to/shared/directory
sudo chmod 755 /path/to/shared/directory


3. /etc/exports 파일을 편집하여 NFS 내보내기를 구성한다.

sudo nano(vi, vim...) /etc/exports

1) 다음 줄을 추가하여 클라이언트와 디렉터리를 공유한다.
/path/to/shared/directory client_ip(rw,sync,no_subtree_check)

2) client_ip를 NFS 클라이언트의 IP 주소로 바꾼다.



4. 공유 디렉터리를 내보내고 NFS 서버를 다시 시작한다.

1) 내보내기
sudo exportfs -a

2) NFS 서버 재시작
sudo systemctl restart nfs-kernel-server


5. 서버의 방화벽에서 필요한 포트가 열려 있는지 확인하십시오.


[2] NFS 클라이언트 설정


1. NFS 서버 패키지를 설치한다(아직 설치하지 않은 경우).

Ubuntu 또는 Debian 기반
sudo apt-get update
sudo apt-get install nfs-common

CentOS, RHEL 또는 Fedora 기반
sudo yum install nfs-utils

 

2. NFS 공유를 마운트하려는 클라이언트에서 디렉토리를 생성한다.

sudo mkdir /path/to/mount/point


3. 마운트 지점에 NFS 공유를 마운트한다.

sudo mount server_ip:/path/to/shared/directory /path/to/mount/point

'server_ip'를 NFS 서버의 IP 주소로 바꾼다.


4. NFS 공유가 성공적으로 마운트되었는지 확인한다.

df -h

출력되는 메시지에는 지정된 마운트 지점에 마운트된 NFS 공유가 표시되어야 한다.


5. 부팅 시 NFS 공유가 자동으로 마운트되도록 하려면 /etc/fstab 파일에 항목을 추가하자.

server_ip:/path/to/shared/directory /path/to/mount/point nfs rw,sync,hard,intr 0 0

'server_ip'를 NFS 서버의 IP 주소로 바꾼다.

이 단계를 통해 NFS 내보내기를 통해 디렉토리를 성공적으로 마운트되었을 것이다. 클라이언트는 이제 마치 로컬에 저장된 것처럼 공유 디렉토리의 파일 및 디렉토리에 액세스할 수 있다. 클라이언트가 공유 파일에 액세스하려면 NFS 서버가 실행 중이고 네트워크를 통해 액세스할 수 있어야 한다.


휴... 다음은 NFS를 통한 자동 마운트에 다루도록하겠다.

반응형
반응형

스토리지 스택은 컴퓨터 시스템의 데이터 스토리지를 관리하고 액세스하기 위해 함께 작동하는 하드웨어, 소프트웨어 및 프로토콜 모음을 나타낸다. 스토리지 스택은 데이터 구성, 검색 및 관리와 같은 다양한 스토리지 관련 작업을 처리하고 데이터 안정성, 성능 및 확장성을 보장한다. 쉽게 이야기하자면 하드웨어부터 소프트웨어까지의 구성이 어떤지라고 보아도 무방할듯하다.


구성요소
  1. 저장 장치
    여기에는 하드 디스크 드라이브(HDD), 솔리드 스테이트 드라이브(SSD), USB 드라이브 및 데이터를 저장하는 기타 물리적 장치가 포함됩니다. 스토리지 스택의 기초를 형성한다.

  2. 스토리지 인터페이스 및 프로토콜
    컴퓨터 시스템과 스토리지 장치 간의 통신을 가능하게 한다. 예를 들면 SATA(Serial ATA), SAS(Serial Attached SCSI), NVMe(Non-Volatile Memory Express), iSCSI 및 파이버 채널과 같은 SAN(Storage Area Network) 프로토콜이 있다.

  3. RAID(Redundant Array of Independent Disks)
    RAID는 여러 물리적 저장 장치를 단일 논리 장치로 결합하는 데이터 저장 가상화 기술이다. 구현된 RAID 수준에 따라 다양한 수준의 데이터 중복성, 성능 및 용량을 제공한다.

  4. 논리 볼륨 관리(LVM)
    LVM은 여러 물리적 장치에서 스토리지 공간을 유연하게 관리할 수 있는 추상화 계층이다. 여러 저장 장치에 걸쳐 있을 수 있는 논리 볼륨의 생성, 크기 조정 및 관리가 가능하다.

  5. 파일 시스템
    파일 시스템은 저장 장치에서 데이터를 구성, 저장 및 액세스하는 방법을 결정한다. 일반적인 파일 시스템에는 ext4, XFS, Btrfs, NTFS 및 HFS+가 포함됩니다. 파일 시스템의 선택은 운영 체제, 성능 요구 사항 및 특정 사용 사례와 같은 요소에 따라 다릅니다.

  6. 스토리지 관리 도구
    스토리지 스택의 다양한 측면을 구성, 모니터링 및 관리하는 데 도움이 되는 소프트웨어 유틸리티다. 예를 들면 fdisk, parted 및 LVM 명령과 같은 명령줄 도구와 GNOME 디스크 및 디스크 유틸리티와 같은 그래픽 도구가 있다.

  7. 네트워크 스토리지
    NFS(네트워크 파일 시스템), SMB(서버 메시지 블록)/CIFS(공통 인터넷 파일 시스템) 및 iSCSI와 같은 네트워크 스토리지 기술을 사용하면 네트워크를 통해 스토리지 리소스를 공유하고 관리할 수 있다.

  8. 분산 및 클러스터 스토리지
    확장성, 내결함성 및 고가용성을 제공하는 대규모 분산 환경용으로 설계된 스토리지 솔루션이다. 예를 들면 GlusterFS, Ceph 및 Hadoop 분산 파일 시스템(HDFS)이 있다.


스토리지 스택의 구성요소는 원활한 스토리지 경험을 제공하고 다양한 데이터 스토리지 요구 사항을 충족하며 안정적이고 효율적이며 안전한 데이터 관리를 보장하기 위해 조화롭게 작동해야한다.

반응형
반응형

디스크란 운영 체제, 응용 프로그램 및 사용자 데이터와 같은 디지털 정보를 저장하고 검색하는 데 사용되는 저장 장치를 말한다. 디스크는 하드 디스크 드라이브(HDD)와 솔리드 스테이트 드라이브(SSD)의 두 가지 주요 유형으로 분류할 수 있다. 두 가지 유형의 디스크 모두 컴퓨터 및 기타 디지털 시스템에서 기본 또는 보조 저장 장치 역할을 하여 사용자가 데이터를 저장, 액세스 및 관리할 수 있도록 한다.


하드 디스크 드라이브(HDD)

HDD는 Hard Disk Drive의 약자로 컴퓨터 및 기타 전자 장치에서 일반적으로 사용되는 데이터 저장 장치 유형이다. 하드 디스크 드라이브는 기본이며 일반적으로 컴퓨터에서 가장 중요한 데이터 스토리지 하드웨어 장치다.

 

HDD는 데이터를 저장하는 표면에 작은 트랙이 새겨진 회전하는 자기 디스크 또는 플래터로 구성된다. 회전 플래터 위에 위치한 읽기/쓰기용 헤드는 자기 표면에서 데이터를 읽고 쓴다.

 

하드 드라이브는 운영 체제, 소프트웨어 타이틀 및 대부분의 기타 파일을 저장하는 역할을 한다. 요청된 정보를 읽거나 쓰기 위해 액추에이터 암이 플래터를 가로질러 이동할 때 플래터가 회전한다.

 

솔리드 스테이트 드라이브(SSD)에 비해 HDD는 기계적 부품 때문에 속도가 느리고 내구성이 떨어진다. 그럼에도 불구하고 저장 용량이 크고 가격이 저렴하기 때문에 인기가 있다. 전반적으로 HDD는 디지털 정보의 저장 및 검색을 허용하는 컴퓨터의 중요한 구성 요소다.


솔리드 스테이트 드라이브(SSD)

Solid State Drive(SSD)는 NAND 기반 플래시 메모리를 사용하여데이터를 지속적으로 저장하기 위해 집적 회로 어셈블리를 사용하는 컴퓨터 스토리지 유형으로 좀 더 발전된 저장 장치다. HDD와 달리 SSD에는 움직이는 부품이 없으므로 읽기 및 쓰기 속도가 더 빠르고 전력 소비가 적으며 내구성이 향상된다.

 

SSD는 컴퓨터 저장소 계층 구조에서 보조 저장소 역할을 하며 반도체 저장 장치, 솔리드 스테이트 장치 또는 솔리드 스테이트 디스크라고도 한다. 기존의 하드 디스크 드라이브(HDD)에 비해 SSD는 더 빠르고 내구성이 뛰어나며 에너지 효율적이므로 게임 및 고성능 컴퓨팅 작업에 이상적이다.

 

SSD는 기존 하드 디스크보다 훨씬 빠른 플래시 기반 메모리를 사용하여 데이터를 저장한다. 또한 SSD에는 움직이는 부품이 없으므로 HDD보다 복원력이 뛰어나다. SSD 비용은 최근 몇 년 동안 급격하게 하락했으며 종종 HDD와 거의 동일한 가격으로 구입할 수 있다.


이러한 디스크는 컴퓨터 시스템의 내부 또는 외부에 있을 수 있다. 내부 디스크는 컴퓨터 케이스 내부에 설치되며 일반적으로 SATA, PCIe 또는 NVMe와 같은 인터페이스를 통해 마더보드에 연결된다. 외부 디스크는 별도의 인클로저에 보관되며 USB, Thunderbolt 또는 eSATA와 같은 인터페이스를 통해 컴퓨터에 연결된다.


디스크 드라이브 인터페이스

디스크 드라이브 인터페이스는 디스크 드라이브가 컴퓨터나 다른 디지털 시스템과 통신할 수 있도록 하는 통신 프로토콜 또는 연결 표준이다. 인터페이스는 디스크 드라이브와 호스트 시스템(예: 컴퓨터의 마더보드) 간에 데이터 및 제어 신호를 전송하는 역할을 한다. 수년에 걸쳐 다양한 디스크 드라이브 인터페이스가 개발되고 데이터 전송 속도, 호환성 및 사용 용이성을 향상시키기 위해 개선되었다. 몇 가지 일반적인 디스크 드라이브 인터페이스는 다음과 같다.

  1. IDE(Integrated Drive Electronics) / PATA(Parallel Advanced Technology Attachment)
    IDE/PATA는 병렬 연결을 사용하여 데이터를 전송하는 오래된 디스크 드라이브 인터페이스 표준이다. 이 인터페이스는 1990년대와 2000년대 초반에 널리 사용되었으며 주로 HDD와 CD 및 DVD 드라이브와 같은 광학 드라이브를 연결하는 데 사용되었다. PATA는 최대 데이터 전송 속도가 133MB/s이고 40개 또는 80개의 전선이 있는 리본 모양의 넓은 케이블을 사용한다.

  2. SATA(Serial Advanced Technology Attachment)
    SATA는 HDD 및 SSD의 기본 연결 표준으로 PATA를 대체한 최신 디스크 드라이브 인터페이스다. SATA는 직렬 연결을 사용하여 더 빠른 데이터 전송 속도와 더 얇은 케이블을 허용한다. SATA는 여러 개정판을 거쳤으며 SATA III은 가장 최신 버전으로 최대 6Gb/s의 데이터 전송 속도를 지원한다.

  3. SCSI(Small Computer System Interface)
    SCSI는 디스크 드라이브, 테이프 드라이브 및 스캐너를 포함하여 다양한 유형의 주변 장치를 연결하는 데 사용되는 다목적 인터페이스다. SCSI는 최대 12Gb/s의 데이터 전송 속도를 지원하는 최신 표준인 SAS(Serial Attached SCSI)와 함께 여러 개정판을 거쳤다. SAS는 엔터프라이즈 환경에서 고성능 HDD 및 SSD를 연결하는 데 일반적으로 사용된다.

  4. PCIe(Peripheral Component Interconnect Express)
    PCIe는 그래픽 카드, 네트워크 카드 및 SSD를 비롯한 다양한 유형의 주변 장치를 연결하는 데 사용되는 고속 인터페이스다. NVMe(Non-Volatile Memory Express) SSD라고도 하는 PCIe 기반 SSD는 SATA SSD에 비해 훨씬 더 빠른 데이터 전송 속도를 제공한다. NVMe SSD는 일반적으로 고성능 컴퓨팅, 게임 및 전문 애플리케이션에 사용된다.

  5. USB(Universal Serial Bus)
    USB는 HDD, SSD 및 광학 드라이브와 같은 외부 디스크 드라이브를 포함하여 다양한 유형의 주변 장치를 연결하는 데 널리 사용되는 인터페이스다. USB는 최대 20Gb/s의 데이터 전송 속도를 지원하는 최신 표준인 USB 3.2로 여러 개정을 거쳤다.

  6. Thunderbolt
    Thunderbolt는 Intel과 Apple이 개발한 고속 인터페이스로, 외부 디스크 드라이브 및 디스플레이를 비롯한 다양한 유형의 주변 장치를 연결하는 데 사용된다. Thunderbolt는 최대 40Gb/s의 데이터 전송 속도를 지원하는 최신 표준인 Thunderbolt 4로 여러 개정을 거쳤다.

  7. NVMe
    NVMe는 Non-Volatile Memory Express의 약자로 NAND 기반 플래시 메모리를 사용하는 SSD(Solid-State Drive)용으로 특별히 설계된 통신 프로토콜 및 인터페이스다. NVMe는 최신 SSD의 낮은 대기 시간과 높은 병렬성을 활용하여 SATA와 같은 구형 스토리지 인터페이스의 한계를 극복하기 위해 개발되었다. NVMe는 PCIe(Peripheral Component Interconnect Express)와 같은 고속 연결을 통해 작동하여 기존 SATA 기반 SSD에 비해 더 빠른 데이터 전송 속도를 제공한다.
반응형
반응형

목차

  1. 들어가며
  2. Race Condition
  3. 원인
  4. 비유를 통한 예시
  5. Race Condition의 결과
  6. 방지 및 완화

오늘은 강의 중 강사님께서 참고하라고 알려주신 Race Condition에 대해 추가로 알아보았다. 지금은 리눅스를 배우고 있지만 최종적으로는 클라우드를 다룰 수 있게 되는 것이다 보니 점점 알아야할 범위가 소프트웨어에서 하드웨어로까지 이동하는 것 같은 느낌이다. 클라우드 엔지니어는 슈퍼맨, 슈퍼우먼인걸까? 새삼 IT 업계 종사들이 존경스럽다. 사담은 여기까지하고 얼른 들어가보자!


Race Condition

Race Condition은 컴퓨터 시스템, 특히 동시 또는 병렬 컴퓨팅에서 프로그램 또는 시스템의 동작이 스레드 또는 프로세스가 실행되는 순서와 같은 이벤트의 상대적 타이밍에 따라 달라지는 상황이다. 프로세스 Race Condition에서 둘 이상의 프로세스는 공유 리소스를 놓고 Race하며 실행 순서는 예측할 수 없고 바람직하지 않은 결과를 초래할 수 있다.

Race Condition은 여러 프로세스가 공유 데이터 또는 리소스에 액세스하고 시스템이 해당 리소스에 대한 액세스를 적절하게 제어하거나 동기화하지 않을 때 종종 발생한다. 이로 인해 데이터 손상, 충돌 또는 시스템의 의도하지 않은 동작과 같은 다양한 문제가 발생할 수 있다.

Race Condition은 방지하기 위해 개발자는 종종 잠금, 세마포어 또는 모니터와 같은 동기화 기술을 사용하여 한 번에 하나의 프로세스만 공유 리소스에 액세스할 수 있도록 하거나 특정 실행 순서를 적용한다. 적절한 동기화를 구현함으로써 Race Condition은 방지하고 동시 또는 병렬 시스템의 올바른 기능을 보장할 수 있다.


원인
  • 불충분한 동기화
    여러 스레드 또는 프로세스가 적절한 동기화 없이 공유 리소스에 액세스하면 Race Condition이 발생할 수 있다.

  • 비원자적 작업
    여러 단계로 구성되고 단계 사이에서 중단될 수 있는 작업은 비원자적이다. 여러 스레드가 공유 리소스에서 비원자적 작업을 수행하는 경우 Race Condition이 발생할 수 있다.
    (더 이상 쪼갤 수 없는 행위를 '원자성을 가진다'라고 하며 이러한 특성을 가진 것을 '원자적이다'고 한다.)

  • 실행 순서에 대한 잘못된 가정
    프로그래머가 강제하지 않고 특정 실행 순서를 가정할 때 실제 실행 순서가 다를 경우 Race Condition이 발생할 수 있다.

비유를 통한 예시

철수와 민수이라는 두 사람이 잔액이 1,000원인 공동 은행 계좌를 공유한다고 상상해 보자. 철수는 500원를 인출하기를 원하고 동시에 민수은 300원를 인출하기를 원한다. 두 트랜잭션이 동시에 발생하여 잠재적인 Race Condition이 발생할 수 있다.

  1. 철수의 트랜잭션이 시작되고 계정 잔액을 1,000원으로 읽는다.
  2. 민수의 트랜잭션도 시작되고 계정 잔액을 1,000원으로 읽는다.
  3. 철수의 거래는 인출 후 새 잔액을 계산한다: 1,000원 - 500원 = 500원.
  4. 민수의 거래는 인출 후 새 잔액을 계산한다: 1,000원 - 300원 = 700원.
  5. 철수의 트랜잭션은 계정 잔액을 500원으로 업데이트한다.
  6. 민수의 트랜잭션은 계정 잔액을 700원으로 업데이트한다.

이 시나리오에서 두 번의 인출 후 계정 잔액은 200원이어야 한다. 그러나 경쟁 조건으로 인해 최종 잔액은 700원이며 이는 잘못된 값이다. 두 트랜잭션 모두 동기화 없이 계정 잔액을 읽고 업데이트하여 서로의 계산을 방해할 수 있기 때문에 문제가 발생했다.

이러한 경합 상태를 방지하기 위해 잠금과 같은 동기화 메커니즘을 사용할 수 있다. 잠금은 한 번에 하나의 트랜잭션만 계정 잔액에 액세스할 수 있도록 한다. 이 경우 철수 또는 민수의 거래는 진행하기 전에 상대방이 완료될 때까지 기다려야 하므로 잘못된 잔액 업데이트를 방지할 수 있다.

적절한 동기화를 구현함으로써 개발자는 경합 상태를 방지하고 공유 리소스가 동시 또는 병렬 시스템에서 올바르게 액세스되고 수정되도록 할 수 있다.


Race Condition의 결과
  1. 데이터 손상
    Race Condition으로 인해 데이터 Condition이 일관되지 않거나 잘못될 수 있다.

  2. 예측할 수 없는 동작
    Race Condition의 비결정적 특성으로 인해 시스템 동작을 예측하거나 재현하기 어려울 수 있다.

  3. 보안 취약성
    Race Condition은 때때로 공격자가 무단 액세스 또는 권한을 얻기 위해 악용할 수 있다.

방지 및 완화
  1. 뮤텍스 및 잠금
    뮤텍스("mutual exclusion"의 줄임말) 및 잠금은 공유 리소스에 대한 액세스를 동기화하는 데 사용된다. 한 번에 하나의 스레드 또는 프로세스만 잠금을 획득할 수 있으므로 제어된 방식으로 공유 리소스에 액세스할 수 있다.

  2. 세마포어
    세마포어는 공유 리소스에 대한 액세스를 제어하는 ​​데 사용되는 또 다른 동기화 프리미티브다. 특히 여러 스레드나 프로세스가 제한된 수의 인스턴스로 동시에 리소스에 액세스할 수 있는 경우에 그렇다.

  3. 원자적 작업
    중요한 작업이 원자적(즉, 중단되거나 인터리브될 수 없음)인지 확인하면 Race Condition을 방지하는 데 도움이 될 수 있다.

  4. 적절한 동시 시스템 설계
    동시 시스템의 요구 사항을 철저히 이해하고 스레드 또는 프로세스 간의 상호 작용을 신중하게 설계함으로써 Race Condition을 최소화하거나 피할 수 있다.

반응형
반응형
File discription

파일 디스크립터는 운영 체제 내에서 열려 있는 파일 또는 파이프나 네트워크 소켓과 같은 기타 입/출력(I/O) 리소스에 대한 식별자 역할을 하는 음수가 아닌 정수이다. 파일 설명자는 운영 체제의 커널에서 열린 파일 및 I/O 리소스를 추적하고 관리하는 데 사용된다.

프로그램이 파일을 열거나 새 I/O 리소스를 만들 때 운영 체제는 해당 리소스에 고유한 파일 설명자를 할당한다. 그런 다음 프로그램은 이 파일 설명자를 사용하여 파일 또는 리소스에 대한 작업을 참조하고 수행한다.


특징

1. 표준 파일 설명자
기본적으로 Unix 계열 시스템의 모든 프로세스에는 생성 시 할당된 세 가지 표준 파일 설명자가 있다.

0(stdin): 표준 입력, 일반적으로 키보드에 연결됨
1(stdout): 표준 출력, 일반적으로 터미널이나 콘솔에 연결됨
2(stderr): 표준 오류 출력, 일반적으로 터미널이나 콘솔에도 연결됨

2. 파일 설명자 테이블
운영 체제는 파일 설명자를 관련 파일 또는 I/O 리소스에 매핑하는 각 프로세스에 대한 파일 설명자 테이블을 유지 관리한다.

3. 파일 설명자 작업
파일 설명자와 관련된 일반적인 작업에는 open(), close(), read(), write() 및 dup()이 포함된다. 이러한 시스템 호출을 통해 프로그램은 파일 설명자를 참조로 사용하여 파일 또는 I/O 리소스와 상호 작용할 수 있다.

4. 파일 설명자 제한
운영 체제는 주어진 시간에 프로세스가 열 수 있는 파일 설명자 수에 제한을 둔다. 이러한 제한은 종종 조정하거나 조정될 수 있지만 시스템 리소스에 과부하가 걸리지 않도록 주의해야 한다.

5. 파일 설명자 닫기
리소스 누수를 방지하고 시스템이 열린 파일 설명자의 최대 수를 초과하지 않도록 하기 위해 파일 설명자가 더 이상 필요하지 않을 때 파일 설명자를 닫는 것이 중요하다.


참고
  • 0 = stdin = standard in = 표준 입력
  • 1 = stdout = standard out = 표준 출력
  • 2 = stderr = standard error = 표준 요류
  • I = in = 입력
  • O = out = 출력

 

반응형