운영체제

[전공 기말고사 정리] 리눅스 운영체제 – 디스크 인터페이스·파일시스템·마운트·디스크

gamjadori 2026. 7. 29. 15:08
728x90

════════════════════
디스크 연결(인터페이스) 방식
════════════════════

• 메인보드와 디스크사이의 통신규격
• IDE/PATA: 40핀병렬전송, 구형, 최대8.4GB(EIDE), Jumper로 Master/Slave설정필요 - 구형PC(현재 거의미사용)
• SCSI: 50~68핀고속, 각장치에 고유ID부여, SCSI-3은 16개장치연결가능, 확장카드필요 - 서버·워크스테이션
• SATA: 직렬방식, SATA1=150MB/s SATA2=300MB/s, HOT PLUG지원, IDE 개선목적개발 - 현재 PC·노트북 표준
• SAS: SCSI 발전형, SATA와 외관동일하지만 컨트롤러 다름, SATA디스크→SAS포트 가능하나 역방향불가 - 서버고급형
• 시험포인트: SAS·SATA는 생긴게 똑같음. 차이는 컨트롤러. SATA디스크는 SAS포트에 꽂을수있지만 반대는 안됨
• 디스크·파티션 명명규칙(/dev/sdX)
/dev/sd[알파벳] = 물리디스크번호, /dev/sd[알파벳][숫자] = 파티션번호
/dev/sda(첫번째 SCSI/SATA물리디스크전체) / /dev/sdb(두번째물리디스크) / /dev/sda1(첫번째디스크의1번파티션) / /dev/sda2 / /dev/sdb1 / /dev/sr0(CD/DVD-ROM장치)

════════════════════
리눅스 파일시스템 종류
════════════════════

• 파일시스템 = 디스크에 파일·폴더를 어떻게 저장·검색할지 정하는 규칙체계
• ext계열
ext(ext1,1992): 최초 리눅스파일시스템, 최대2GB, inode수정시간 미지원, 파편화문제, 현재미사용
ext2(1993): ext1 문제해결, 최대32TB(이론), ext3도입전까지 표준
ext3(2001): ext2에 저널링 추가→갑작스런종료후 복구가능, 최대2~32TB, ext2와 호환
ext4(2008): 현재 리눅스 기본, 최대1EB볼륨/16TB+파일, ext2/ext3 하위호환
XFS(2001): 실리콘그래픽스 개발, 64비트 고성능저널링, 최대16EB, 대부분 리눅스배포판 지원
• 저널링(Journaling): ext3부터 도입된 복구기술. 저널=작업일기장, 데이터쓰기 전에 “이걸 쓰려했어요”를 먼저 기록해두는 방식
→ 시스템 수정저장 전에 변경사항을 미리 저널이라는 기록방식에 저장한후 반영
저널링없을때(ext2): 데이터쓰기시작→갑자기전원OFF→데이터손상/분실→복구불가
저널링있을때(ext3/4): 저널에 작업기록→실제데이터쓰기→갑자기전원OFF→저널보고 복구!
• 기타 파일시스템: msdos(디스크,MS-DOS파티션용) / iso9660(디스크,CD·DVD읽기전용) / nfs(네트워크,원격서버디스크연결) / vfat·ntfs(디스크,윈도우파일시스템지원) / swap(가상,가상메모리영역-물리적 메모리가 부족할때 사용안하는 데이터를 보조기억장치에 저장, 여유공간확보후 필요할때 다시불러옴) / tmpfs(가상,메모리 임시파일-재시작시 사라짐,/run등, 저장공간 확보후 필요할때 다시불러오기) / proc(가상,/proc디렉터리-커널현재상태정보)
nodev표시 = 실제디스크없이 메모리에서 동작하는 가상 파일시스템

════════════════════
파일시스템 구조(ext4 기준)
════════════════════

• ext4는 디스크를 여러 블록그룹으로 나눠 관리. 블록그룹0 구조: 그룹0패딩(1024B) - 슈퍼블록(1블록) - 그룹디스크립터(n블록) - GDT예약(n블록) - 데이터블록비트맵(1블록) - inode비트맵(1블록) - inode테이블(n블록) - 데이터블록(n블록)
• 슈퍼블록: 파일시스템 전체정보 저장(inode수,블록수,크기,마운트시간등), 손상시 전체마비→다른그룹에 복사본보관
• 그룹디스크립터: 각블록그룹내 구조정보(비트맵주소,inode테이블주소등), 슈퍼블록 바로뒤에 위치
• 데이터블록비트맵: 각 데이터블록 사용여부표시(1=사용중,0=비어있음)
• inode비트맵: inode테이블 항목 사용여부표시
• inode테이블: 파일 메타정보저장(종류·권한·크기·소유자·시간·링크수), 파일이름은 저장안함!
• 데이터블록: 실제 파일내용(데이터) 저장
• inode구조 - 파일의 신분증: 파일이름 제외한 모든 메타정보+실제데이터가 어느블록에있는지 가리키는 포인터, 파일하나당 inode하나
구성: 파일종류,접근권한,파일크기,소유자(UID),소유그룹(GID),접근시간,수정시간,링크수
직접블록(Direct)→데이터블록1~4 / 간접블록(Indirect)→포인터블록을 거쳐 데이터5~7 / 이중간접→포인터1,2를 거쳐 데이터8,9
작은파일→직접블록 / 중간파일→간접블록 / 큰파일→이중·삼중간접블록 사용

════════════════════
파일시스템 마운트
════════════════════

• 마운트(mount) = 파일시스템(디스크파티션)을 디렉터리 계층구조의 특정폴더에 연결하는것. USB꽂으면 파일탐색기에 나타나는것과 같은원리
• mount /dev/sdb1 /mydata → /mydata 접근하면 = /dev/sdb1 디스크내용에 접근하는것! / umount → 연결해제
• 마운트없이는 디스크가 있어도 파일 접근불가 / /etc/fstab 등록 = 재부팅 후에도 자동마운트 유지
• /etc/fstab 6필드: 장치명(/dev/sdb1 또는 UUID=…, UUID=128비트 고유식별자,하드웨어+시간조합생성) / 마운트포인트(/mydata) / 파일시스템(ext4,ext2,vfat,nfs등) / 옵션(defaults,rw,ro등) / 덤프(0=백업불가,1=백업가능) / fsck우선순위(0=검사안함,1=루트먼저,2=루트외나중에)
예시: /dev/sdb1 /mydata ext4 defaults 0 0
→ 무결성검사: 파일이 원래상태 유지하는지 검사
• 옵션종류: defaults(rw,nouser,auto,exec,suid) / auto(자동마운트↔noauto) / exec(실행파일 실행허용↔noexec) / suid(setuid,setgid용↔nosuid) / ro(읽기전용) / rw(읽기쓰기) / user(일반사용자도 마운트가능↔nouser,일반X/root만가능)
usrquota(사용자별 디스크쿼터설정) / grpquota(그룹별 디스크쿼터설정)
• blkid: 하드디스크·USB같은 블록장치의 파일시스템 유형 및 고유식별자(UUID) 확인 명령어
• mount 형식: mount [옵션] 장치명 마운트포인트
• mount/umount 명령어
mount /dev/sdb1 /mnt / mount -t ext4 /dev/sdb1 /mnt / mount -t iso9660 /dev/cdrom /mnt/cdrom
umount /dev/sdb1 / umount /mnt / umount /dev/sdb1(연결해제할때)

════════════════════
디스크 추가하기 실습
════════════════════

• 순서: STEP1 물리적장착(/dev/sdb 인식) → STEP2 fdisk(파티션생성,/dev/sdb1) → STEP3 mkfs.ext4(파일시스템포맷완료) → STEP4 mount(/mydata에 연결완료) → STEP5 /etc/fstab(재부팅후도 유지)
• STEP1: 가상머신(VMware/VirtualBox) 설정에서 SCSI타입 1GB디스크추가 → 부팅후 /dev/sdb로 인식
• STEP2 fdisk로 파티션생성: 디스크를 논리적으로 분할하는 도구
fdisk /dev/sdb
n(새파티션만들기) → p(Primary선택) → 1(번호1번) → Enter(시작섹터기본값) → Enter(끝섹터기본값,전체용량사용) → p(파티션정보확인) → w(변경사항저장후종료)
• STEP3 mkfs로 파일시스템 포맷: 파티션에 파일시스템 설치(포맷)하는 명령어, 새 USB 포맷하는것과 동일
mkfs.ext4 /dev/sdb1 또는 mkfs -t ext4 /dev/sdb1
• STEP4 디렉터리생성 및 마운트
mkdir /mydata(마운트포인트 생성) → # mount /dev/sdb1 /mydata(마운트) → # umount /dev/sdb1(연결해제할때)
• STEP5 /etc/fstab 등록(부팅자동마운트): 재부팅해도 마운트유지되게 하려면 fstab에 등록! 안하면 재부팅후 풀림
/dev/sdb1 /mydata ext4 defaults 0 0
• 실습문제 예시: 3GB하드디스크(/dev/sdb) 1개추가 → 2개파티션 분할(sdb1=2GB, sdb2=1GB) → 각각 /disk1, /disk2에 마운트
힌트: sdb1 만들때 Last Sector에 ‘+2G’ 입력 / sdb2는 First/Last Sector 모두 Enter(기본값)