리눅스 커널은 HDD, SDD, USB, RAM, ROM 등과 같은 저장 장치를 인식할 때, 그 종류에 따라 다른 하드웨어 이름을 부여한다. 리눅스에서 새로운 디스크를 추가해 사용하기 위해서는 아래와 같은 과정을 거쳐야 한다.
1. 디스크 인식
디스크를 시스템에 연결할 때 사용하는 방식을 연결 인터페이스라고 부른다.
대표적인 연결 인터페이스 방식에는 E-IDE, SATA, SCSI, SA-SCSI가 있다.
E-IDE(Enhanced-Intergrated Drive Electronics, Advanced Technology Attachment)는 현재 거의 쓰이지 않는 1990년대부터 2000년대 초반에 개인용 PC에 많이 쓰인 방식으로, 핫 플러깅을 지원하지 않아 디스크를 추가할 때 시스템을 종료한 상태에서 작업해야 한다.
E-IDE (=ATA, Parallel ATA) |
- 핫 플러깅 지원x - 메인보드에 2개의 E-IDE 인터페이스(Primary/Secondary) 연결 가능 - 한 E-IDE케이블은 한 케이블로 2개의 하드디스크(Master/Slave) 연결 가능 - 즉, 총 네개의 디스크 인식 가능 - ATA-6 규격에서 약 133MB/s가 최대 속도로, 고속 입출력에 맞지 않음 |
옛날에 연구실에서 HDD추가하려고 본체 뜯었을 때 봤던 것 같다. 초등학교 때 프린터에서도 봤던 것 같은데 기억이 가물가물하다.
SATA는 Serial ATA ( SATA , abbreviated from Serial AT Attachment )의 약자로 메인보드와 HDD, SSD와 같은 대용량 저장장치를 연결하는 인터페이스(연결 방식)이다.
SATA | - 핫 플러깅 지원 - 케이블 크기 및 비용 감소 - 속도 증가(SATA3에서 최대 6.0GB/s) - 한 케이블 당 한 개의 디스크 연결 |
확실히 PATA와 SATA 케이블을 비교해보면 크기가 확 줄어들었다.
위의 세가지 장점 말고도 장치 온도 모니터링, 명령 지속 시간제한 기능 등 PATA에 비해 다양한 기능을 제공한다. 이에 PATA의 대부분이 SATA로 대체되었고, Desktop PC 시장은 99% 이상을 SATA가 점유했다.
노트북에서는 플래시 메모리를 사용한 mSATA(mini SATA) 방식 제품을 많이 사용한다. 플래터에 비해 작은 크기와 빠른 속도, 적은 전력 소모량, 물리적 충격에 강한 장점이 있다.
SCSI(Small Computer System Interface; 스카시)는 컴퓨터에서 주변기기를 연결하기 위한 병렬 표준 인터페이스로 입출력 버스를 접속하는 데에 필요한 기계적, 전기적인 요구 사항과 모든 주변 기기 장치를 중심으로 명령어 집합에 대한 규격을 말한다.
SCSI | - 핫플러깅 지원 - 디스크 뿐만 아니라 기타 주변 기기도 시스템에 연결 가능한 표준 인터페이스 - 주변 기기를 제어하는 기능이 각 주변 기기에 있음 |
SA-SCSI(Serial Attached SCSI:SAS)는 SCSI의 직렬 통신 버전으로, SCSI보다 더 우수한 성능을 가졌다. E-IDE(PATA)에서 SATA로 변한 것도 병렬보다 직렬 연결에 더 장점이 있어서인데, 다들 바뀌는 이유가 비슷한 것 같다. 이래서 역사는 잊으면 안 된다고 하는 건가 보다.
+ 각종 버스 속도 비교표
장치명은 '인터페이스별 장치명 + 장치 번호 + 파티션 번호'의 명명규칙에 따라 정해진다. 이 장치명을 사용해서 후에 파티셔닝을 하게 된다. 장치 번호는 알파벳이 될 수도 있고 숫자가 될 수도 있다. 파티션 번호는 숫자다.
인터페이스 종류 | 장치명 |
E-IDE(PATA) | hd |
SATA/SCSI/SA-SCSI | sd |
CD-ROM 등 ODD | sr |
원래는 위와 같이 PATA와 SATA 등의 장치명이 달랐는데, 최신 리눅스 시스템에서는 sd로 통일되었다.
인터페이스 종류 | 장치명 |
E-IDE(PATA) | sd |
SATA/SCSI/SA-SCSI | |
CD-ROM 등 ODD | sr |
시스템에 연결된 장치를 확인하려면 아래의 명령어를 입력하면 된다.
# 연결된 장치명 확인
ls -l /dev/sd*
ls -l /dev/sr*
핫 플러깅이 지원되는 장치는 자동으로 장치 파일이 생기지만, 생기지 않았을 경우 수동으로 스캔해야 한다.
for HOST in `ls /sys/class/scsi_host/`
do
echo ' - - -' > /sys/class/scsi_host/$HOST/scan
echo " $Host rescan "
done
터미널에 입력해도 되지만, 재스캔 작업이 잦은 경우 쉘 스크립트로 등록해두고 필요할 때마다 사용하면 편리하다.
2. 파티셔닝
디스크 파티셔닝을 위한 GUI 도구는 gparted, CLI 도구는 fdisk, gdisk, parted 등이 있다. 노트북에 멀티 부팅을 하기위해 파티셔닝을하고 삭제하고를 반복하면서, 때로는 리눅스만 써보기도 했다면 gparted는 너무 익숙한 도구일 것이다.
Windows 에서는 fdisk 를 대체해 더 진보된 diskpart 라는 도구를 사용하고 있지만, 리눅스는 여전히 fdisk를 사용하고 있다.
(1) fdisk
x86 시스템의 MBR 파티셔닝을 위해 사용해온 도구다. 1980년대부터 사용된 오래된 방식이지만, 아직도 사용 중이다. 최대 네개까지 파티션을 만들 수 있고(그 이상으로 하고 싶으면 확장 기능을 사용), 2TB 이상의 디스크에는 사용할 수 없는 방식이다. 정확히 말하자면 사용할 수는 있지만, 사용하지 않는다. 예를 들어 3TB 용량의 디스크라면, x86 시스템에 연결할 때 MBR 방식으로 파티션 할 경우 앞의 2TB 영역은 할당할 수 있지만 그 이후 영역은 주소 지정을 못해 할당하지 못하게 되기 때문이다.
fdisk 명령어를 입력할 때는 파티션을 구성할 디스크를 명령의 인자로 입력한다.
[root@localhost ~]# ls /dev/sd*
/dev/sda /dev/sda1 /dev/sda2
일단 어떤 저장장치가 있는지 알아야 파티션을 하니까 'ls /dev/sd*' 명령어를 사용해 확인했다.
[root@localhost ~]# fdisk /dev/sda1
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0xf27e7b6e.
Command (m for help): m
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
g create a new empty GPT partition table
G create an IRIX (SGI) partition table
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partition's system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)
fdisk를 실행하고, 어떤 명령을 사용할 수 있는지 확인했다.
Command (m for help): p
Disk /dev/sda1: 1073 MB, 1073741824 bytes, 2097152 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0xf27e7b6e
Device Boot Start End Blocks Id System
Command (m for help): q
[root@localhost ~]# fdisk /dev/sda
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): p
Disk /dev/sda: 68.7 GB, 68719476736 bytes, 134217728 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000bc9ad
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 134217727 66059264 8e Linux LVM
sda1을 파티션 할까 했는데, 용량도 작고 뭔가 아마 파티셔닝된거라면 부팅을 위한 용도일거같아서 그만두고 종료했다. 그리고 확인해보니 진짜 부팅 용도였다.. 새로 파티션을 만들 공간이 sda에는 없으므로, sda2로 fdisk를 재실행했다.
[root@localhost ~]# fdisk /dev/sda2
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x72163b43.
Command (m for help): p
Disk /dev/sda2: 67.6 GB, 67644686336 bytes, 132118528 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x72163b43
Device Boot Start End Blocks Id System
Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-132118527, default 2048): 2048
Last sector, +sectors or +size{K,M,G} (2048-132118527, default 132118527): 10000
Partition 1 of type Linux and of size 3.9 MiB is set
시키는대로 하면 된다. 처음 입력한 p는 primary partition을 뜻한다. 위에서 언급했던 대로 사용 가능한 파티션의 종류에는 primary partition과 extended partition이 있는데, /dev/sda2에는 파티션이 하나도 없는 상태이므로 확장 파티션을 사용할 필요가 없으니 p를 입력했다.
번호는 혼란을 방지하기 위해 1을 입력했다. First Sector는 파티션에서 사용할 시작 섹터 위치를 지정하는 항목인데, 이것도 fdisk에서 default값을 지정해준대로 하면 무난하다. Last sector는 First Sector와 조합해 파티션의 크기를 결정한다.
Command (m for help): p
Disk /dev/sda2: 67.6 GB, 67644686336 bytes, 132118528 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x72163b43
Device Boot Start End Blocks Id System
/dev/sda2p1 2048 10000 3976+ 83 Linux
p를 입력하면 파티션이 생긴 걸 확인할 수 있다.
Command (m for help): d
Selected partition 1
Partition 1 is deleted
확인했으니 지웠다. 파티션의 개수가 여러개면 지울 파티션 번호를 입력해야하지만, 지금처럼 하나면 즉시 삭제된다.
Command (m for help): l
0 Empty 24 NEC DOS 81 Minix / old Lin bf Solaris
1 FAT12 27 Hidden NTFS Win 82 Linux swap / So c1 DRDOS/sec (FAT-
2 XENIX root 39 Plan 9 83 Linux c4 DRDOS/sec (FAT-
3 XENIX usr 3c PartitionMagic 84 OS/2 hidden C: c6 DRDOS/sec (FAT-
4 FAT16 <32M 40 Venix 80286 85 Linux extended c7 Syrinx
5 Extended 41 PPC PReP Boot 86 NTFS volume set da Non-FS data
6 FAT16 42 SFS 87 NTFS volume set db CP/M / CTOS / .
7 HPFS/NTFS/exFAT 4d QNX4.x 88 Linux plaintext de Dell Utility
8 AIX 4e QNX4.x 2nd part 8e Linux LVM df BootIt
9 AIX bootable 4f QNX4.x 3rd part 93 Amoeba e1 DOS access
a OS/2 Boot Manag 50 OnTrack DM 94 Amoeba BBT e3 DOS R/O
b W95 FAT32 51 OnTrack DM6 Aux 9f BSD/OS e4 SpeedStor
c W95 FAT32 (LBA) 52 CP/M a0 IBM Thinkpad hi eb BeOS fs
e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a5 FreeBSD ee GPT
f W95 Ext'd (LBA) 54 OnTrackDM6 a6 OpenBSD ef EFI (FAT-12/16/
10 OPUS 55 EZ-Drive a7 NeXTSTEP f0 Linux/PA-RISC b
11 Hidden FAT12 56 Golden Bow a8 Darwin UFS f1 SpeedStor
12 Compaq diagnost 5c Priam Edisk a9 NetBSD f4 SpeedStor
14 Hidden FAT16 <3 61 SpeedStor ab Darwin boot f2 DOS secondary
16 Hidden FAT16 63 GNU HURD or Sys af HFS / HFS+ fb VMware VMFS
17 Hidden HPFS/NTF 64 Novell Netware b7 BSDI fs fc VMware VMKCORE
18 AST SmartSleep 65 Novell Netware b8 BSDI swap fd Linux raid auto
1b Hidden W95 FAT3 70 DiskSecure Mult bb Boot Wizard hid fe LANstep
1c Hidden W95 FAT3 75 PC/IX be Solaris boot ff BBT
l 명령어를 입력하면 파티션에서 사용가능한 파티션의 타입을 확인할 수 있다.
Command (m for help): t
Selected partition 1
Hex code (type L to list all codes): 82
Changed type of partition 'Linux' to 'Linux swap / Solaris'
Command (m for help): w
t 명령어를 입력하면 파티션의 타입을 변경할 수 있고, w 명령어를 입력하면 변경 사항이 디스크에 기록된다.
만약 사용 중인 디스크의 파티션을 변경했다면, 시스템이 변경된 파티션의 정보를 인식하도록 'partprobe' 명령어를 사용해야 한다. 방법은 있지만 아무래도 사용 중인 디스크의 파티션을 변경하지 않는 것이 시스템 안정성 측면에서는 좋다.
(2) gdisk
gdisk는 GPT파티션 방식으로 파티션을 생성한다. MBR 방식보다 후에 나와 기존의 제약을 극복하도록 설계됐다. 파티션 테이블의 개수가 128개로 늘어났고, 최대 8ZB의 디스크를 사용할 수 있다.
[root@localhost ~]# gdisk /dev/sda2
GPT fdisk (gdisk) version 0.8.10
Partition table scan:
MBR: not present
BSD: not present
APM: not present
GPT: not present
Creating new GPT entries.
Command (? for help): ?
b back up GPT data to a file
c change a partition's name
d delete a partition
i show detailed information on a partition
l list known partition types
n add a new partition
o create a new empty GUID partition table (GPT)
p print the partition table
q quit without saving changes
r recovery and transformation options (experts only)
s sort partitions
t change a partition's type code
v verify disk
w write table to disk and exit
x extra functionality (experts only)
? print this menu
Command (? for help):
여러모로 fdisk와 사용 방법이 비슷하지만 더 친절하다. 현재 파티션 테이블도 확인해주고, 어떤 명령어가 있는지 확인하려면 '?'를 입력하라고도 알려준다.
Command (? for help): n
Partition number (1-128, default 1): 1
First sector (34-132118494, default = 2048) or {+-}size{KMGTP}: 34
Information: Moved requested sector from 34 to 2048 in
order to align on 2048-sector boundaries.
Use 'l' on the experts' menu to adjust alignment
Last sector (2048-132118494, default = 132118494) or {+-}size{KMGTP}: 10000
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): 8300
Changed type of partition to 'Linux filesystem'
Command (? for help): p
Disk /dev/sda2: 132118528 sectors, 63.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 125A8A4A-7B96-42C3-AF66-ABD9D4F4844B
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 132118494
Partitions will be aligned on 2048-sector boundaries
Total free space is 132110508 sectors (63.0 GiB)
Number Start (sector) End (sector) Size Code Name
1 2048 10000 3.9 MiB 8300 Linux filesystem
새 파티션을 생성할 때도 친절하다. 파티션의 시작 위치, 마짐가 위치를 지정할 때 상대 위치인 '+/-'를 사용할 수 있다. '+'는 현재 위치부터의 상대적인 위치를 의미하고, -는 사용가능한 마지막 섹터 영역의 위치를 의미한다. G(Gigabyte), T(Terabyte), P(petabyte)를 사용해 지정할 수 있다.
(3) parted
parted에 대해서는 인터넷에 재밌는 글이 많았다. 대표적으론는 링크(access.redhat.com/discussions/684533)에 있는 배틀 로얄이라던가, 이건 절대 답으로 채택되면 안된다고 하는 글(unix.stackexchange.com/questions/104238/fdisk-vs-parted)이 정말 재밌었다.
대부분의 경우 취향 문제였지만, 안정적인 성능이나 정보를 찾아보기 쉽다는 이유로 'fdisk vs parted'에서는 fdisk를, 'gdisk vs parted'에서는 gdisk를 추천하기도 했다.
[root@localhost ~]# parted
GNU Parted 3.1
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) ^C
(parted) q
[root@localhost ~]# parted -l
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sda: 68.7GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 1049kB 1075MB 1074MB primary xfs boot
2 1075MB 68.7GB 67.6GB primary lvm
Model: Linux device-mapper (linear) (dm)
Disk /dev/mapper/centos-home: 20.8GB
Sector size (logical/physical): 512B/512B
Partition Table: loop
Disk Flags:
Number Start End Size File system Flags
1 0.00B 20.8GB 20.8GB xfs
Model: Linux device-mapper (linear) (dm)
Disk /dev/mapper/centos-swap: 4161MB
Sector size (logical/physical): 512B/512B
Partition Table: loop
Disk Flags:
Number Start End Size File system Flags
1 0.00B 4161MB 4161MB linux-swap(v1)
Model: Linux device-mapper (linear) (dm)
Disk /dev/mapper/centos-root: 42.7GB
Sector size (logical/physical): 512B/512B
Partition Table: loop
Disk Flags:
Number Start End Size File system Flags
1 0.00B 42.7GB 42.7GB xfs
Warning: Unable to open /dev/sr0 read-write (Read-only file system). /dev/sr0
has been opened read-only.
Error: /dev/sr0: unrecognised disk label
Model: VBOX CD-ROM (scsi)
Disk /dev/sr0: 61.0MB
Sector size (logical/physical): 2048B/2048B
Partition Table: unknown
Disk Flags:
parted를 실행해보고 fdisk와 gdisk가 섞인 느낌을 받았다. 'Ctrl+c'로 빠져나올 수 없다는 점이 특이했다. parted 를 실행할 때 -l 옵션을 사용하면, 디스크 장치의 정보와 파티션 정보를 한번에 확인할 수 있다.
fdisk와 gdisk는 사용 방식이나 명령어가 거의 똑같았지만, parted는 명령어 이름도 다르고 각종 기능이 많아서 메뉴얼(www.gnu.org/software/parted/manual/parted.html)을 확인하는게 좋을 것 같다.
물론 기능이 많아도 자주 쓰이는건 보통 정해져있다.
명령어 | 기능 |
print [devices|free|list,all|number] | 디스크 및 파티션 정보 출력 |
unit UNIT | parted 명령에서 사용할 단위로 [UNIT]을 지정 |
mklabel, mktable LABEL-TYPE | 새로운 파티션 구조(또는 파티션 테이블) 생성 |
mkpart PART-TYPE [FS-TYPE] START END | 새로운 파티션 생성 |
rm NUMBER | 파티션 삭제 |
select DEVICE | 장치 선택 |
quit | 프로그램 종료 |
(4) 파티션 생성 시 주의할 점
각 파티션 사이에 사용되지 않는 섹터 영역이 생기면 기능적인 문제는 없지만, 공간이 낭비되거나 일반적으로는 사용할 수 없는 슬랙 공간이 되므로 바람직하지 않다.
공간을 낭비하지 않을거라고 파티션의 영역을 겹치게 생성하면, 해당 영역에 데이터를 기록할 때 문제가 생길 수 있다.
'DevOps > Linux' 카테고리의 다른 글
[Linux]디스크 관리 下 스왑 메모리 (1) | 2021.05.23 |
---|---|
[Linux]디스크 관리 中 파일시스템 (0) | 2021.05.23 |
[Linux]리눅스 작업 스케줄링(at, crontab) (0) | 2021.05.11 |
[Linux]우분투에 파이참 설치하고 바로가기 만들기 (0) | 2021.05.10 |
[Linux]Hard link, Symbolic link (0) | 2021.05.07 |