Backend/LINUX

[Chapter1] 리눅스의 추억12(feat. 막힘없이 실무까지)

GreatSaiyaman 2022. 7. 30. 22:18

본 포스팅은 2020년에 작성했던 포스팅입니다, blog를 이관하게 되어 재포스팅 하였습니다.


아래 포스팅은 제가 수강하였던 동영상 강의, 각종 블로그 혹은 공식 홈페이지에서 습득한 자료들 제 나름대로 재구성하여 포스팅 한 자료입니다. 잘못된 내용이 있을 수도 있습니다. 최대한 글 읽으시는 시간이 헛되지 않게 검토하여 올리겠습니다. 편하게, 재미있게 제 글을 읽어주셨으면 좋겠습니다. 틀린 부분이 있으면 댓글이나 메일 주시면 수정하여 놓겠습니다. 제 글을 읽어주셔서 감사합니다^^

- 목차 -

Chapter1. 리눅스 맛보기

Chapter2. 리눅스 활용하기

Chapter3. 리눅스 개발 및 운영하기

 

(32) 장치 드라이버의 종류

리눅스에 USB나 무언가 장치를 꽂으면 /dev/폴더에 인식된다고 예전에 언급 드린 적이 있습니다.

조금 더 간결하게 이야기하면 장치(Device Driver)

 

우리가 디바이스라고 말하는 것들에는 크게 두 가지 종류가 있습니다.

- 블록 디바이스(block device)

하드디스크 USB 등 블록이나 섹터 단위로 데이터를 전송하는 디바이스입니다.

Input과 Output이 빠른 것이 특징입니다.

- 캐릭터 디바이스(character device)

키보드, 마우스, 프린터 등의 입출력 장치로 바이트 단위로 데이터를 전송하는 디바이스입니다.

키보드나 마우스에 무언가 데이터를 저장하거나 하지 않죠. 그러한 아이들을 캐릭터 디바이스라고 합니다.

전송 속도가 다소 느린 것이 특징입니다.

 

 

제가 파일 시스템 유형에 대한 이론을 포스팅에서 다룰지 말지 고민을 많이 했습니다.

fat이라는 놈과 fat2, ntfs 이런 놈들이요.

그런데 이 주제를 제가 재미있게 또, 매우 잘 이야기할 자신이 없습니다.

디스크 안에 file과 확장자는 어떻게 위치해야 되는지에 대해 저도 잘 모르는데 포스팅으로 다룬다는 것이 웃기게 다가왔습니다. 제가 이 부분에 대해서 박식해지고 나중에 이 부분과 관련된 내용을 다룰 수 있을 정도의 레벨이 되면 제가 기억 해두었다가 포스팅을 하도록 하겠습니다.

먼 훗날 웹개발에 대한 지식이 풍부해지면 게임개발과 하드웨어 개발을 꼭 해보고 싶은 마음이 있기 때문입니다.

지금은 잘 정리되어 있는 곳의 글을 읽어주신 후 와주시면 감사하겠습니다.

https://ko.wikipedia.org/wiki/%ED%8C%8C%EC%9D%BC_%EC%8B%9C%EC%8A%A4%ED%85%9C

 

이곳에서 '디스크파일시스템' 항목을봐주시면 될 것 같습니다.

자 이제 본격적으로 하드디스크를 증설하는 작업을 Virtual box에서 해보도록 하겠습니다.

(33) 하드디스크 증설하기

(33)-1. 우선 리눅스가 돌아가고 있다면 해당 리눅스의 전원을 종료해 주셔야 합니다.

그 후 Virtual Box의 해당 운영체제를 마우스 우 클릭하셔서 '설정'에 진입해 주신 후에 아래와 같은 저장소 탭으로 이동합니다.

저 같은 경우 직접 해보려고 NewVirtualDisk1.vdi라는 이름으로 디스크를 추가하게 되었는데요.

이 포스팅을 따라 하시는 분들은 원하시는 이름으로, 원하는 크기로 하드디스크를 만들어 주시면 될 것 같습니다.

위 과정을 거치고 나면 하드디스크가 만들어지게 되는데요. 이는 하드디스크에 들어가서 무언가를 할 수 있는 상황은 아닙니다. 그냥 장치가 있다는 것만 리눅스에서 조회를 할 수가 있습니다.

윈도우에서 외장하드 같은 거 꼽아보신 분들은 여기서 헷갈리실 것 같은데요.(물론 이 경우는 외장 하드랑은 다르긴 합니다만...) 윈도우에서 외장하드를 꼽으면 알아서 운영체제에서 인식하고 그 외장 하드에 마음껏 저장한 후에 장치 꺼내기를 해서 장치 제거를 한 후 사용하곤 했었죠.(아마 하드웨어에 대해 조금 아시는 분들은 이 과정이 mount, unmount라는 것도 알고 계실 거예요 ㅎㅎ)

리눅스는 이러한 과정이 자동적으로 이루어지는 것이 아니라 명령어로 하나하나씩 해주어야 한다고 보시면 됩니다.

(33)-2. 추가된 하드디스크 조회하기

brandon@brandon-VirtualBox:~$ sudo fdisk -l
[sudo] password for brandon: 
Sorry, try again.
[sudo] password for brandon: 
Disk /dev/sda: 20.8 GiB, 22321856512 bytes, 43597376 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
Disklabel type: dos
Disk identifier: 0x03c568b5

Device     Boot    Start      End  Sectors  Size Id Type
/dev/sda1  *        2048 41594879 41592832 19.9G 83 Linux
/dev/sda2       41596926 43595775  1998850  976M  5 Extended
/dev/sda5       41596928 43595775  1998848  976M 82 Linux swap / Solaris


Disk /dev/sdb: 8 GiB, 8589934592 bytes, 16777216 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

 

맨 아래를 보시면 덩그러니 sdb라는 놈이 추가되어 있습니다.

보통 리눅스를 처음에 설치하고 나면 sda라는 놈밖에 없는데 이놈이 아까 추가되어서 보이는 것입니다.

디스크가 그냥 있을 뿐 마운트 같은 것이 안 되어있습니다.

마운트 시키기 전에 우선 파티션을 만들어야 합니다

이때 fdisk 하드디스크 경로를 적어주시면 파티션이 만들어집니다.

(33)-3. 추가된 하드디스크 파티션 만들기

brandon@brandon-VirtualBox:~$ sudo fdisk /dev/sdb

Welcome to fdisk (util-linux 2.27.1).
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.
Created a new DOS disklabel with disk identifier 0xf36e6c50.

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 
First sector (2048-16777215, default 2048): 
Last sector, +sectors or +size{K,M,G,T,P} (2048-16777215, default 16777215): 

Created a new partition 1 of type 'Linux' and of size 8 GiB.

Command (m for help): p
Disk /dev/sdb: 8 GiB, 8589934592 bytes, 16777216 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
Disklabel type: dos
Disk identifier: 0xf36e6c50

Device     Boot Start      End  Sectors Size Id Type
/dev/sdb1        2048 16777215 16775168   8G 83 Linux

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

 

저 같은 경우 new 파티션을 만든다는 n 옵션과, 제대로 파티션이 만들어졌는지를 확인하기 위한 p 옵션을 줄 때 빼고는 저부 default 값으로 설정하였습니다.

이 부분을 보시면 파티션이 정상적으로 만들어졌다는 것을 아실 수 있으십니다.

 

Device     Boot Start      End  Sectors Size Id Type
/dev/sdb1        2048 16777215 16775168   8G 83 Linux

 

그렇담, 만들어진 파티션을 포맷을 해보아야 합니다.

윈도우에서 하드를 증설해보신 분이 계시다면 이 부분은 마찬가지셨을 겁니다.

mkfs 명령어를 사용하면 됩니다. 이 부분에 대해서는 나중에 더 자세히 다루도록 하겠습니다.

(33)-4. 하드디스크 포맷하기

brandon@brandon-VirtualBox:~$ sudo mkfs.ext4 /dev/sdb1
mke2fs 1.42.13 (17-May-2015)
Creating filesystem with 2096896 4k blocks and 524288 inodes
Filesystem UUID: 53a96a75-50d6-4ba0-8ec9-e2132f0b1b99
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

이제 포맷까지 된 파티션을 제가 만든 공간과 mount 시켜야 합니다.

'제가 만든 공간' 이란 디렉토리를 이야기합니다.

그렇다면 제가 원하는 이름의 디렉토리를 만들어보도록 하겠습니다.

(33)-5. 디렉터리 만들기

brandon@brandon-VirtualBox:~$ sudo mkdir /extra-hard-disk

이제 마운트를 시켜줘보면 될 것 같습니다.

이때 mount 연결하고자 하는 파티션 연결하고자하는디렉토리 <- 이런 식으로 명령어를 입력해 주시면 됩니다.

마운트가 잘 성공했는지 확인해보면, 잘 되었다는 것을 바로 확인할 수 있습니다.

(33)-6. mount 하기

brandon@brandon-VirtualBox:~$ sudo mount /dev/sdb1 /extra-hard-disk/
brandon@brandon-VirtualBox:~$ ls -l /extra-hard-disk/
total 16
drwx------ 2 root root 16384  9월 17 15:26 lost+found

lost+found라는 디렉토리는, 저널링 파일 시스템의 기능을 이용해서 복구가 되었을 때 이 폴더 안에 복구 내용을 넣기 위해서 만들어진 디렉토리 입니다. 깨진 데이터는 이곳에서 복구시킵니다. 신경 안 쓰셔도 됩니다.

그렇다면 이제 df 명령어를 이용해서 마운트가 잘 되었는지 확인해보도록 하겠습니다.

fdisk 명령어와 df 명령어의 차이는 fdisk의 경우에는 저의 디스크 안에 있는 모든 파티션들을 보여준다는 것이고, df는 disk free의 약자로써 마운트 된! 파티션들을 모두 보여준다는 차이점이 있습니다.ㅎㅎ

별거 아닌 것 같지만 저 같은 경우는 많이 헷갈려서 언급해보았습니다.

brandon@brandon-VirtualBox:/dev/input$ df
Filesystem     1K-blocks    Used Available Use% Mounted on
udev              965420       0    965420   0% /dev
tmpfs             199188    6124    193064   4% /run
/dev/sda1       20338944 5398280  13884460  28% /
tmpfs             995936     216    995720   1% /dev/shm
tmpfs               5120       4      5116   1% /run/lock
tmpfs             995936       0    995936   0% /sys/fs/cgroup
tmpfs             199188      60    199128   1% /run/user/1000
/dev/sr0           58214   58214         0 100% /media/brandon/VBOXADDITIONS_5.1.38_1225922
/dev/sdb1        8124856   18420   7670676   1% /extra-hard-disk

짜잔, 바깥에서 만든 외부 장치를 리눅스 시스템에 마운트 시켜서 하드디스크 증설에 성공하였습니다!

조금 더 자세히 명령어로 살펴보면...

brandon@brandon-VirtualBox:/extra-hard-disk$ df -h | grep "^/dev" | sort -k2n
/dev/sdb1       7.8G   18M  7.4G   1% /extra-hard-disk
/dev/sda1        20G  5.2G   14G  29% /
/dev/sr0         57M   57M     0 100% /media/brandon/VBOXADDITIONS_5.1.38_1225922

 

이렇게 나옵니다.

 

근데 여러분 이렇게 했다고 끝이 아닙니다. 이 마운트는 한시적이어서 재부팅을 하면 풀려버리기 때문입니다.

'재부팅을 하면 마운트가 풀린다'라는 사실도 저에게는 신기하게 다가왔던 것 같습니다. 윈도우와 그런 부분이 다르니까요. 자 이제 부팅 시 자동으로 마운트가 되게끔 수정해보겠습니다.

아래 경로에 있는 fstab 파일을 수정해 주면 됩니다.

 

brandon@brandon-VirtualBox:/extra-hard-disk$ vim /etc/fstab

 

맨 아래에 요 한 줄을 추가해 줍니다.

'한줄'에 대한 기재 순서 즉 컬럼의 순서는...

<file system디렉토리> <mount point디렉토리> <파티션 type> <주고 싶은 options> <dump> <pass>

순으로 기재해주시면 됩니다.

 

/dev/sdb1 /data ext4 defaults 0 0

 

재부팅을 해보시면, 정상적으로 동작할 것입니다.

최종적으로 하드디스크 마운트 과정에 대한 정리를 간략하게 해보면요...

1. 파티션을 만들고

2. 파티션을 포맷하고

3. 마운트를 시키고자 하는 디렉터리 따로 만들고

4. 마운트하기

위와 같이 됩니다.

오늘은 비교적 실무에서는 덜 활용될수 있는 부분에 대해서 살펴보았는데요. 덜 사용하는 것뿐이지 아예 사용하지않는 기능은 아닌 것 같으니 아무쪼록 도움되셨으면 좋겠습니다.

Thanks for reading!