Linux의 스토리지

Linux의 스토리지

Linux의 스토리지

Ubuntu에서 사용하는 SSD는 블록 스토리지(Block Storage) 입니다.

🔹 왜 블록 스토리지인가?

  1. OS에서 블록 디바이스로 인식

    • Ubuntu에서 SSD는 /dev/sda, /dev/nvme0n1 같은 블록 디바이스로 나타납니다.
    • lsblk 명령어를 실행하면 SSD가 블록 단위로 표시됨.
      lsblk
      NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
      nvme0n1     259:0    0   500G  0 disk
      ├─nvme0n1p1 259:1    0   512M  0 part /boot/efi
      ├─nvme0n1p2 259:2    0     4G  0 part [SWAP]
      └─nvme0n1p3 259:3    0 495.5G  0 part /
  2. 파일 시스템을 직접 설치해야 사용 가능

    • SSD를 처음 연결하면 mkfs.ext4 같은 명령어로 파일 시스템을 생성해야 함.
      sudo mkfs.ext4 /dev/nvme0n1p3
    • 파일 시스템을 만들기 전에는 그냥 블록 데이터 덩어리임.
  3. 데이터를 블록 단위로 저장

    • SSD는 데이터를 4KB, 16KB 등 작은 블록 단위로 저장함.
    • 운영체제는 특정 블록(예: LBA 12345)에 직접 접근해 데이터를 읽고 씀.

🚀 Ubuntu에서 SSD = 블록 스토리지 + 파일 시스템

SSD 자체는 블록 스토리지이지만, 파일 시스템(ext4, xfs 등)을 올리면 파일 스토리지처럼 사용 가능함!
파일을 저장하면 파일 시스템이 내부적으로 블록을 관리하지만, 기본적으로 SSD는 블록 스토리지임.

📌 요약: Ubuntu에서 SSD는 블록 스토리지지만, ext4 같은 파일 시스템을 올리면 파일 스토리지처럼 사용할 수 있음! 🚀

Linux의 파일 시스템

리눅스에서 파일과 디렉터리를 생성하고 저장할 수 있는 이유는 파일 시스템(File System) 이 있기 때문입니다.


1️⃣ 파일 시스템의 역할

SSD나 HDD 같은 블록 스토리지는 단순한 데이터 저장 공간입니다.
운영체제가 파일을 쉽게 관리할 수 있도록 파일 시스템이 블록을 조직화합니다.

파일 시스템이 없으면 SSD나 HDD는 그냥 바이트(0과 1)만 저장하는 공간일 뿐, 파일이나 디렉터리 같은 개념이 없습니다.

파일 시스템의 주요 기능:

  • 파일 & 디렉터리 관리ls, mkdir, touch 같은 명령어 사용 가능
  • 블록 주소를 파일 이름으로 매핑
  • 저장 공간 할당 및 관리

2️⃣ 파일이 저장되는 과정

📌 예제: touch hello.txt 실행하면?

  1. 파일 시스템이 hello.txt라는 파일을 만들기 위해 블록을 할당
  2. 파일 이름과 블록 위치를 저장
  3. 파일 내용을 저장할 블록을 할당하고, 데이터를 기록

이제 ls -l을 실행하면 hello.txt를 볼 수 있음!
하지만 내부적으로는 특정 블록에 데이터가 저장됨.


3️⃣ 디렉터리가 저장되는 과정

📌 예제: mkdir mydir 실행하면?

  1. 파일 시스템이 새로운 디렉터리를 나타내는 메타데이터 생성
  2. 디렉터리 내부에 파일 목록을 저장할 블록을 할당

💡 디렉터리도 사실 파일처럼 저장됨! (파일 리스트를 저장하는 특별한 파일)

ls -li
2 drwxr-xr-x  2 user user 4096 Mar 25 10:00 mydir
3 -rw-r--r--  1 user user    0 Mar 25 10:01 hello.txt

위에서 mydirinode 2라는 파일로 저장된 걸 볼 수 있음.


4️⃣ 리눅스에서 파일과 디렉터리를 관리하는 구조

리눅스는 파일을 블록에 저장할 뿐 아니라, 메타데이터(inode)를 관리함.

🔹 (1) Inode Table (파일 정보 저장)

  • 파일 이름이 아니라 파일의 메타데이터(inode 번호)로 관리
  • ls -i로 inode 번호 확인 가능
  • inode에는 파일 크기, 생성 시간, 소유자, 퍼미션 정보가 들어 있음.
ls -li
3 -rw-r--r--  1 user user    0 Mar 25 10:01 hello.txt

hello.txt는 inode 번호 3을 가짐.
✅ 실제 데이터는 inode가 가리키는 블록에 저장됨.

🔹 (2) 디렉터리는 파일 이름과 inode 번호를 저장하는 파일

  • 디렉터리 내부에는 파일 이름 → inode 번호 매핑 정보 저장됨.
  • 예를 들어 /home/user 디렉터리는 이런 구조:
    .
    ├── mydir (inode 2)
    ├── hello.txt (inode 3)
  • ls 명령어가 실행되면, 디렉터리 파일을 읽고 inode 번호를 찾아 파일 정보를 가져옴.

✅ 결론

💡 리눅스에서 파일과 디렉터리를 저장할 수 있는 이유:

  1. SSD는 블록 스토리지이지만, 파일 시스템(ext4, xfs 등)이 블록을 파일과 디렉터리로 변환
  2. Inode와 디렉터리 엔트리를 이용해 파일 이름을 블록에 매핑
  3. 디렉터리도 파일처럼 inode로 관리되며, 내부에 파일 리스트가 저장됨

📌 즉, 블록 스토리지 위에 파일 시스템이 올라가야 파일과 디렉터리를 저장하고 관리할 수 있음! 🚀