Home [데브코스] 2주차 - linux 기초(File System)
Post
Cancel

[데브코스] 2주차 - linux 기초(File System)


오답노트


file system

fs(file system)는 os에서 매우 큰 부분을 차지한다. 디렉토리도 파일 시스템의 일종이다.

파일 시스템 타입

  • linux: xfs, ext4
  • windows: ntfs, exfat, fat32

새로운 FS 만드는 법

  1. partitioning
    • command: fdisk, parted
  2. file sysyem
    • command: mkfs(==format),
    • 만든 후 checking command: fsck or xfs_*
  3. mount
    • command: mount / umount
    • mount를 자동으로 하기 위해 설정하는 파일인 /etc/fstab

partition(구획)

물리적, 논리적 파티션이 존재한다. 예전에는 물리적, 즉 4TB를 둘로 나눴는데 1개를 거의 안써서 1개를 1/3로 나누고 싶다면 logical로 묶어야 했다.

최근에는 logical partition을 선호한다. 대표적으로 logical volume(LVM)을 사용하는 방법이 있다.

그러나 여기서는 physical만 다룰 것이다.


physical disk 나누는 방법

디스크를 나누기 위해서는 labeling 작업을 해야하는데 label type이 2가지가 있다.

  • DOS 방식: 고전
    • 2tb의 제한
    • tool: fdisk를 사용
  • GPT 방식: DOS레이블 문제를 개선하기 위해 나온 새로운 방식
    • 용량 제한이 없음
    • tool: parted / gparted or gdisk를 사용

dos가 고전이긴 하나 2tb가 넘어가지 않는다면 dos도 많이 사용하긴 한다.

DOS labeled disk (MBR)

DOS partition의 종류

  • primary partition(주 파티션)
    • 최대 4 partitions per disk
  • extended partition(확장 파티션)
    • 4개 이상의 파티션이 필요할 때 주 파티션 대신에 1개를 만들 수 있다.
    • extended partition은 다시 여러 개의 logical drive로 나눌 수 있다.
  • logical drive(논리 드라이브)

파티션이 4개 이하여도 확장, 논리 드라이브를 만들 수 있다.


fdisk

1
2
3
4
5
6
7
8
9
10
# fdisk -l

fdisk -l를 대체하는 요즘 용어
# lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
...
sda      8:0    0    50G  0 disk 
`-sda1   8:1    0    50G  0 part /
sr0     11:0    1   2.3G  0 rom  /media/jaehoyoon/Ubuntu 18.04.6 LTS amd64

+ block device

저장 장치를 이르는 용어이다. 입출력 장치는 character device

모든 디바이스는 /dev/ 에 존재한다.

  • 그 안에 sd가 붙으면 SCSI(=scuzzy) disk
  • 디바이스들은 순서대로 a,b,c,d…
    • e.g. 두개가 있다면 sda, sdb가 있는 것
  • NVME SSD사용하면 NVME로 뜸


fdisk

command 옵션

  • d: 파티션 삭제
  • l: 알려진 파티션 ID(다른 파티션 타입)
  • n: 새로운 파티션 생성
  • p: 현재 파티션 상태 출력
  • t: 파티션 ID 를 변경
  • q: 변경된 상태를 저장하지 않고 종료
  • w: 변경된 상태로 저장하고 종료

실습 중에는 저장하지 않고 나가야 한다. 저장하지만 않으면 실제로 삭제되는 것도 아니라서, 문제가 안생긴다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# fdisk /dev/sda
...
# 현재 파티션 상태 출력
command(m for help) : p
...
Device     Boot Start       End   Sectors Size Id Type
/dev/sda1  *     2048 104855551 104853504  50G 83 Linux

# 삭제
command(m for help) : d
Selected partition 1
Partition 1 has been deleted.

# 생성
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-104857599, default 2048): 
Last sector, +sectors or +size{K,M,G,T,P} (2048-104857599, default 104857599): +4G

Command (m for help): p
Device     Boot Start     End Sectors Size Id Type
/dev/sda1        2048 8390655 8388608   4G 83 Linux

# extended를 만들 때는 대체로 4번을 지목해주는 것이 좋다.
Command (m for help): n
Partition type
   p   primary (1 primary, 0 extended, 3 free)
   e   extended (container for logical partitions)
Select (default p): e
Partition number (2-4, default 2): 4
First sector (8390656-104857599, default 8390656): 
Last sector, +sectors or +size{K,M,G,T,P} (8390656-104857599, default 104857599):

Command (m for help): n
All space for primary partitions is in use.
Adding logical partition 5
First sector (8392704-104857599, default 8392704): 
Last sector, +sectors or +size{K,M,G,T,P} (8392704-104857599, default 104857599):

Command (m for help): p
Device     Boot   Start       End  Sectors Size Id Type
/dev/sda1          2048   8390655  8388608   4G 83 Linux
/dev/sda4       8390656 104857599 96466944  46G  5 Extended
/dev/sda5       8392704 104857599 96464896  46G 83 Linux

# 타입 변경
Command (m for help): t
Selected partition 1
Hex code (type L to list all codes): 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 or  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 ea  Rufus alignment
 e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a5  FreeBSD         eb  BeOS fs        
 f  W95 Ext'd (LBA) 54  OnTrackDM6      a6  OpenBSD         ee  GPT            
10  OPUS            55  EZ-Drive        a7  NeXTSTEP        ef  EFI (FAT-12/16/
11  Hidden FAT12    56  Golden Bow      a8  Darwin UFS      f0  Linux/PA-RISC b
12  Compaq diagnost 5c  Priam Edisk     a9  NetBSD          f1  SpeedStor      
14  Hidden FAT16 <3 61  SpeedStor       ab  Darwin boot     f4  SpeedStor      
16  Hidden FAT16    63  GNU HURD or Sys af  HFS / HFS+      f2  DOS secondary  
17  Hidden HPFS/NTF 64  Novell Netware  b7  BSDI fs         fb  VMware VMFS    
18  AST SmartSleep  65  Novell Netware  b8  BSDI swap       fc  VMware VMKCORE 
1b  Hidden W95 FAT3 70  DiskSecure Mult bb  Boot Wizard hid fd  Linux raid auto
1c  Hidden W95 FAT3 75  PC/IX           bc  Acronis FAT32 L fe  LANstep        
1e  Hidden W95 FAT1 80  Old Minix       be  Solaris boot    ff  BBT
Hex code (type L to list all codes): ^CHex code (type L to list all codes): 82

Command (m for help): p
Device     Boot Start       End   Sectors Size Id Type
/dev/sda1  *     2048 104855551 104853504  50G 82 Linux swap / Solaris

Command (m for help): t
Selected partition 1
Hex code (type L to list all codes): 7
Changed type of partition 'Linux swap / Solaris' to 'HPFS/NTFS/exFAT'.

Command (m for help): p
...
Device     Boot Start       End   Sectors Size Id Type
/dev/sda1  *     2048 104855551 104853504  50G  7 HPFS/NTFS/exFAT



+ Mask fs

저장 장치를 아주 커다란 종이로 생각했을 때, 이를 통째로 쓰기 힘들 것이다.

  • partitioning : 종이를 몇개로 자르는 작업
  • make FS: 파티션된 종이를 A4 같은 규격화된 형태로 잘라서 분철하는 것과 비슷하다.
    • 분철하면 권수와 페이지 번호가 만들어짐 = 인덱싱 가능
    • 방식, 밑줄, 칸의 간격 혹은 자물쇠를 설치하는 등의 세부 방식에 대한 것이 FS type
      • ext4,xfs,ntfs,fat32 등의 타입이 주로 사용됨
      • 그러나 IOT기기에는 ext4를 주로 사용하고, 고성능 SSD를 사용하는 경우 xfs를 사용함


+ ext4 (extended file system 4)

ext4 : 대부분의 linux에서 사용하는 FS

특징:

  • 저널링 지원 : 무엇을 적는, 파일이 깨지는 것 등을 쓰고 지움
  • 연속된 파일의 접근, 작은 파일들의 접근이 빠른 장점
  • 저성능의 I/O에서 효율이 높음, IoT, HD
  • 삭제된 파일을 복구

+ xfs

xfs : 저널링 기반의 대용량 파일 시스템

특징:

  • online 상태(사용중인 상태)에서 확장이 가능
  • 대용량 파일 처리 시 성능 좋음
  • 삭제된 파일을 복구할 수 없음
  • 깨진 파일 시스템 복구를 위한 명령어로 xfs_repair를 제공


mkfs (make file system)

추가한 디스크 확인 방법

  1. virtual machines을 사용하는 경우 virtual machines setting에서 cd/dvd에서 hard-disk, add 누르고 csci 등 선택
  2. lsblk
  3. 추가한 디스크가 안보이면 코드를 쳐야 하는데, 공백 지켜서 쳐야 한다.
1
# ls /sys/class/scsi_host/ | while read hostdev ; do echo "- - -" > /sys/class/scsi_host/$hostdev/scan ; done

새로 추가한 디스크에 fdisk로 partition을 만들어보자.

1.fdisk 로 디스크 상태 확인

  • fdisk /dev/sdb ```bash

    fdisk /dev/sdb

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

Created a new partition 2 of type ‘Linux’ and of size 1 GiB.

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

Created a new partition 2 of type ‘Linux’ and of size 2 GiB.

Command (m for help): p … Device Boot Start End Sectors Size Id Type /dev/sdb1 2048 2099199 2097152 1G 83 Linux /dev/sdb2 2099200 6293503 4194304 2G 83 Linux

Command (m for help): w

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<br>

2.특정 디스크 파티션 파일 시스템(타입) 지정
- mkfs [-t fstype] [options] <device>

```bash
# mkfs -t ext4 /dev/sdb2
mke2fs 1.44.1 (24-Mar-2018)
Creating filesystem with 524288 4k blocks and 131072 inodes
Filesystem UUID: 67d17692-1557-4b47-806f-8276a9f5eac0
Superblock backups stored on blocks: 
    32768, 98304, 163840, 229376, 294912

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


3.FS checking

  • fsck [-y] [options] [-t fstype]

처음 파일 시스템을 만들 때는 그 파일 시스템을 켜주기 위해 체크해야 한다. 일반적으로 offline된 fs를 체크해야 한다. online 상태의 fs를 검사하는 경우에는 안전을 보장할 수 없다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
fsck의 종료를 확인하기 위해 종료코드를 쳐봐야 한다. `$?`는 바로 이전에 했던 명령어의 결과값 , 0이 아니면 실패
# fsck -y -t ext4 /dev/sdb2
fsck from util-linux 2.31.1
e2fsck 1.44.1 (24-Mar-2018)
/dev/sdb2: clean, 11/131072 files, 26156/524288 blocks
# echo $?
0

이 때, sum 값으로 출력되기 때문에 3이 나온다면 1+2
# man fsck
The exit code returned by fsck is the sum of the following conditions:

                0      No errors
                1      Filesystem errors corrected
                2      System should be rebooted
                4      Filesystem errors left uncorrected
                8      Operational error
                16     Usage or syntax error
                32     Checking canceled by user request
                128    Shared-library error


SWAP

스왑 공간은 메모리가 부족할 때 디스크에다가 메모리의 일부분을 바꿔치기하는 것이다.(ms windows에는 pagefile이라 부름)

  • swap in/out
  • mkswap(스왑 공간 작성), swapon(활성), swapoff(비활성)
    • mkswap [-L label]
    • swapon <deviceswapfile-L label>
    • swapoff <deviceswapfile-L label>

스왑 공간 작성

스왑공간으로 해주기 위해 fdisk를 통해 83을 82로 바꿔야 하지만, 안바꿔줘도 쓸수는 있다.

1
2
3
4
5
6
# mkswap -L swapfs2 /dev/sdb1
Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes)
LABEL=swapfs2, UUID=52154162-328f-4596-b6b8-d721e438a0cb

일반 파일을 스왑 공간으로 사용 (일시적 스왑파일로서)
# dd if=/dev/zero of =./swapfile1 bs=1024 count=262144

이 때, UUID는 겹치지 않기 위해 만든 ID이다.

if= input file of = output file : if를 읽어서 of를 만들어라, bs=block size, count = 개수

bs * count = 용량

스왑 공간 활성 / 비활성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# swapon /dev/sdb1

파일 올리기
# swapon ./swapfile1

스왑공간을 레이블로 선언
# swapon -L swapfs2

스왑 공간 상태 확인
# cat /proc/swaps
Filename				Type		Size	Used	Priority
/swapfile                               file		2097148	524	-2
/dev/sdb1                               partition	1048572	0	-3

특정 1개 공간 중지
# swapoff /dev/sdb1

전체 중지
# swapoff -a

priority는 2가 우선 순위로 2->3->4…, 우선 순위를 먼저 사용하고 다 사용하면 다음꺼를 사용한다.


  • fstab에 등록된 스왑 공간 확인
1
2
3
grep으로 /etc/fstab에서 swap이란 문자가 들어간 행을 추출
# grep swap /etc/fstab
/swapfile                                 none            swap    sw              0       0


tip: 간혹 몇몇 linux 설치 프로그램이 한국어를 사용하여 설치할 때 파티션 레이블이 한글로 되어 있기도 함, 한글을 다시 영문으로 바꿔주는 것이 좋다.

1
2
3
4
5
6
7
8
9
10
11
# cat /etc/fstab | grep swap
LABLE=?3???^^???L

device 확인
# lsblk

mkswap [-L label] <device>
# mkswap -L swapfs1 /dev/sda8

fatab에서 swap 파티션의 레이블을 swapfs1으로 수정
# vi /etc/fstab



Mount란?

마운트란 파일 시스템을 탑재하는 것을 의미한다. 마운트는 root directory를 기점으로 시작된다.

명령어

  • mount: 마운트하는 명령
  • umount: 언마운트
  • findmnt: 마운트 리스트


mount, umount

mount [-t fstype] [-o option] [device]

  • fstype은 알아서 판단하므로 안적어줘도 됨
  • option: rw, ro 등이 있지만 아직 사용하지 않을 예정
  • device: /dev/sda, /dev/sdb
  • directory: 마운트 대상 지점 (mount point) 즉, device가 붙을 지점


umount <directorydevice>
== or 연산자로 둘 중 아무거나 적어줘도 상관없음

디바이스 이름

  • sda1 ⇒ usb의 1번째 장치의 첫번째 파티션
  • sdb5 ⇒ usb의 2번째 장치의 다섯번째 파티션
  • sde2 ⇒ usb의 5번째 장치의 두번째 파티션


실습

sdb1은 스왑공간으로 했으니 2로 마운트 할 것이다.

순서

  1. mkfs -t ext4 /dev/sdb2 : /dev/sdb2 파티션을 ext4 파일시스템으로 만듦
  2. mkdir /media/backup : media/backup 파일 생성
  3. mount -t ext4 /dev/sdb2 /media/backup : sdb2 파티션을 backup 파일에 ext4 파일시스템 타입으로 마운트
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# mkfs -t ext4 /dev/sdb2
Creating filesystem with 524288 4k blocks and 131072 inodes
Filesystem UUID: 6989fcda-bfb6-47a8-9ba8-69fb972b7e1a
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912

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

# mkdir /media/backup
# mount -t ext4 /dev/sdb2 /media/backup


확인
# lsblk
...
sdb      8:16   0    10G  0 disk 
├─sdb1   8:17   0     1G  0 part [SWAP]
└─sdb2   8:18   0     2G  0 part /media/backup


압축, c는 create, f는 파일명 지정, a 는 auto, /etc 파일을 backup에 etc_backup.tar.gz로 압축
# tar cfa /media/backup/etc_backup.tar.gz /etc


파일 확인
# ls -l /media/backup
합계 1820
-rw-r--r-- 1 root root 1844734  2월 25 18:13 etc_backup.tar.gz
drwx------ 2 root root   16384  2월 25 18:08 lost+found
  • umount
1
2
3
4
5
6
# cd /media/backup
~/media/backup# pwd
/media/backup

~/media/backup# umount /media/backup
umount: /media/backup: target is busy

해당 디바이스에 들어가 있으면 작업중이라 umount할 수 없다. 따라서 작동되고 있는 프로세스를 죽이던지, 다른데로 옮겨가던지 해야 한다.

이럴 때 범인, 즉 작업중인 프로세스를 찾기 위해 fuser <dir>로 PID를 알 수 있다.

1
2
3
4
5
해당 파일 시스템 아래에서 작동하는 프로세스를 체크, 이를 실행하면 여기서 작동중인 PID를 추출해줌
# fuser -c /media/

찾아내서 죽이기까지 하려면 
# fuser -ck /media/
1
2
3
4
5
6
7
디바이스로도 umount 가능
# umount /dev/sdb2
# lsblk
...
sdb      8:16   0    10G  0 disk 
├─sdb1   8:17   0     1G  0 part [SWAP]
└─sdb2   8:18   0     2G  0 part


여기서 주의해야 할 점이 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# ls -l /media/backup
합계 0

새 파일 생성
# touch /media/backup/hey.txt

리스트를 보면 파일이 존재한다.
# ls /media/backup
hey.txt

마운트
# mount /dev/sdb2 /media/backup

이 때는 보이지 않는다. 삭제된 것이 아니라 보이지 않을 뿐 umount하면 다시 보임
# ls /media/backup
etc_backup.tar.gz  lost+found 

# umount /dev/sdb2

# ls /media/backup
etc_backup.tar.gz  hey.txt  lost+found 


  • 마운트 옵션 사용
1
2
3
4
5
6
7
8
9
10
11
12
13
14
마운트 테이블 보기
# findmnt
...
├─/media/backup                             /dev/sdb2      ext4   rw,relatime


rw(readwrit)를 ro(readonly)로 리마운트
# mount -o remount,rw /dev/sdb2
...
├─/media/backup                             /dev/sdb2      ext4   ro,relatime


# mount -o remount,ro /dev/sdb2
├─/media/backup                             /dev/sdb2      ext4   rw,relatime


USB memory

usb 메모리를 장착하면 lsblk에서 장치명이 인식된다.

  • e.g. 현재는 sda, sdb까지 있으면 usb 장치의 이름은 sdc

USB 장치는 mount 명령으로 인식시키면 된다. 그러나 fstype을 알고 있어야 한다. 대부분은 vfat, fat32, exfat등이지만, ntfs이기도 한다.

  • VMware은 사용하는 usb장치가 2.0인지 3.x인지에 따라 설정이 다르다. virtual machine setting에서 usb 누르면 connection이 어떻게 되어 있는지 확인이 가능하다. 3.0 3.1, 3.2 다 같다.


주의해야 할 것은 x windows는 usb연결시 자동 마운트를 해주기 때문에 실습을 위해 x windows를 사용하지 않도록 콘솔창으로 이동

  1. ctrl+alt+f3을 눌러 console로 이동
  2. usb연결: vmware팝업창을 볼 수 있음
    • connect to a virtual machine을 선택
  3. root로 로그인 후 lsblk를 쳐서 마운트 상태 확인
  4. 마운트할 위치를 먼저 만들어야 함
    • mkdir /media/usbstick
    • mount /dev/sdc1 <ALT+.>
    • 더 자세하게 디바이스를 보고자 한다면
    1
    2
    
     # blkid /dev/sdc1
     /dev/sdc1: LABEL = "USB32" UUID= ... TYPE="vfat" ...
    
  5. usb 메모리에 데이터를 써보기

    1
    
     # cp ~/.bashrc /media/usbstick/
    
  6. umount
    • umount를 하지 않으면 데이터가 꼬일 수도 있음
  7. disconnect
    • host로 다시 연결하기 위해서는 우측 상단에 disconnect 누르면 댐
  8. host(window)에서 usb를 들어가 .bashrc를 열어보자


mount binding

많이 쓰는 기능으로 디렉토리를 다른 위치의 디렉토리에 붙이는 기능이다.

cp(copy)를 하게 되면 용량이 2배로 먹기 때문에 비효율적이다. 그래서 mount —bind 옵션을 사용한다. 접근할 수 있는 가짜 디렉토리를 만들어준다.

1
# mount --bind /usr/src/redhat/RPMS /Var/www/html/rpms

이 기능은 ftp나 웹서비스에서 다른 위치의 디렉토리를 노출시킬 때 편리하다. 노출시키려는 디렉토리가 다른 상위 디렉토리에 있을 때도 편리하고, binding을 해제하기만 하면 안보이게 할 수 있다.



Fstab (filesystem table)

디렉토리는 /etc/fstab에 위치하고 있고, 부팅시 파일 시스템을 자동 마운트하기 위한 정보를 담고 있다. 대체로 6개의 필드로 구성된다.

  • device, mount point, fstype, options, dump
  • 장치파일, 마운트할 곳, 파일 시스템 타입, 옵션, 덤프 여부, 부팅시 체크 순서
1
2
3
<file system> <mount point>   <type>  <options>       <dump>  <pass>
UUID=08364a41-d369-4d72-bd50-6081da820786 /   ext4    errors=remount-ro 0       1
/swapfile                               none            swap    sw              0       0

ext4를 이용할 때만 부팅하면서 검증해야 하기에 1로 지정되어 있다.

여기서 디바이스 장치(file system)에 다양한 형태가 존재한다.

  1. /dev/sd* : 실제 디바이스 장치로 설정하는 방식
    • 단점: 가장 오래된 방식으로 port를 순서대로 연결하지 않는 경우 장치명의 변경되거나 역전될 가능성이 있다.
      • e.g. port 0,3,4번에 장치가 연결되어 있다면 0(sda),3(sdb),4(sdc)인데, 2번포트에 1개를 더 연결하면 1칸씩 밀려야 한다. 그러면 3:sdc, 4:sdd가 되어야 하는데, 이름이 바뀌어 있지 않으므로 오류가 난다.
  2. LABEL=name : 레이블 이름으로 검색하여 장치를 찾아내는 방식
    • LABEL : 식별 가능한 문자열을 FS의 label부분에 넣어서 찾음
  3. UUID=uuid : UUID값으로 검색해서 장치를 찾아내는 방식
    • 가장 세련된 방식으로 UUID(universally unique identidfie)를 FS에 넣어 찾는 방법
    • UUID를 변경하려면 uuidgen으로 생성한 다음 e2label, xfs_admin을 통해 수행한다.

fstab 옵션

  • defaults : 기본값 사용
  • noauto : 읽기/스기 가능
  • rw : 읽기/쓰기 가능
  • ro : 읽기만 가능
  • user : 일반 유저도 마운트 가능
  • nouser: 일반 유저는 마운트 할 수 없음
  • noexec : 실행 파일 사용 금지

linux fs 튜닝 목적의 옵션 - relatime : atime을 특정 경우에만 업데이트 (자주 업데이트하면 성능이 떨어질 수 있음 - noatime: atime 자체를 사용하지 않음 (log및 매우 많은 깊이를 가지는 디렉토리 및 파일 시스템에서 유리


e2label / findfs / tune2fs

label이나 uuid를 찾고 변경하는 방법이다.

  • e2label : ext4 리눅스 파일 시스템의 레이블을 확인 및 편집
    • e2label [new-label]
  • tune2fs : ext4 파일 시스템의 다양한 설정 조정
  • xfs_admin : XFS 파일 시스템의 레이블 / UUID 확인 및 편집
  • findfs : 레이블을 검색

대체로 e2label,tune2fs는 설정하는 용도, findfs는 찾는 용도로 많이 사용된다.


tune2fs

tune2fs -U <clearrandomtimeuuid_value>
  • clear: 삭제
  • random, time: 무작위로 또는 시간 기반으로 생성
  • uuid_value: uuid를 직접 넣어줄 때

uuidgen : UUID 생성 유틸

디바이스를 fstab에 등록하면 부팅시 자동 마운트가 가능하다.


실습

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
id, type 확인
# blkid /dev/sdb2
/dev/sdb2: UUID="6989fcda-bfb6-47a8-9ba8-69fb972b7e1a" TYPE="ext4" PARTUUID="cde1097b-02"

sdb2에 random UUID 설정
# tune2fs -U random /dev/sdb2
tune2fs 1.44.1 (24-Mar-2018)

This operation requires a freshly checked filesystem.

Please run e2fsck -f on the filesystem.


# blkid /dev/sdb2
/dev/sdb2: UUID="6989fcda-bfb6-47a8-9ba8-69fb972b7e1a" TYPE="ext4" PARTUUID="cde1097b-02"

# mount /media/backup
# findmnt 
...
├─/media/backup                             /dev/sdb2      ext4   rw,noexec,rel



udisks2

D-bus 기반의 block device manager로 daemon service로 작동하고 다양한 block device에 대한 관리를 함, 중요한 것은 udiskctl CLI를 제공하는데 일반 유저로 명령 가능하다. 그러나 sudo를 쓰면 더 안좋게 발생할 수도 있다.

서비스 확인

1
2
3
4
5
6
7
8
9
10
$ systemctl status udisks2
● udisks2.service - Disk Manager
   Loaded: loaded (/lib/systemd/system/udisks2.service; enabled; vendor preset:
   Active: active (running) since Sun 2022-02-27 15:11:53 KST; 4h 5min ago
     Docs: man:udisks(8)
 Main PID: 773 (udisksd)
    Tasks: 5 (limit: 2292)
   CGroup: /system.slice/udisks2.service
           └─773 /usr/lib/udisks2/udisksd
...



udisksctl

1
2
3
4
5
# lsblk

# mount --block-device /dev/sdc1

# lsblk

sdc1의 옆에 추가로 /media/root/ESD-USB가 추가되었다.

언마운트는 다음과 같다.

1
# udisksctl unmount --block-device /dev/sdc1

여기서 —block-device 는-b로 줄여서 쓸 수 있다.


loopback device

loopback device를 설정해줄 수 있다. 이는 파일을 디바이스처럼 마운트한다는 것으로 주로 ISO, DVD, image를 마운트, loopback device는 read-only이다.

1
2
3
$ ls -l *.iso

$ udisksctl loop-setup --file ubuntu-18.04.7-server-amd64.iso


dump

dump명령으로 device를 살펴볼 수 있다. 전체 장치를 다 볼 수 있음

1
# udisksctl dump

개별 장치 정보는 $ udisksctl info -b /dev/sdc1을 사용

1
2
3
4
5
6
7
8
9
10
11
12
13
$ udisksctl info -b /dev/sdb1
/org/freedesktop/UDisks2/block_devices/sdb1:
  org.freedesktop.UDisks2.Block:
    Configuration:              []
    CryptoBackingDevice:        '/'
    Device:                     /dev/sdb1
    DeviceNumber:               2065
    Drive:                      '/org/freedesktop/UDisks2/drives/VMware_2c_VMware_Virtual_S_1'
    HintAuto:                   false
    HintIconName:               
    HintIgnore:                 false
    HintName:                   
    ...


status

현재 시스템에 어떤 디스크들이 어디에 맵핑되어 있는지 확인할 수 있다.

1
2
3
4
5
6
$ udisksctl status
MODEL                     REVISION  SERIAL               DEVICE
--------------------------------------------------------------------------
VMware, VMware Virtual S  1.0                            sda     
VMware, VMware Virtual S  1.0                            sdb     
VMware Virtual SATA CDRW Drive 00000001  01000000000000000001 sr0

USB나 flash 메모리를 리더기를 통해 사용할 때 udisk를 많이 사용한다. mount -t를 사용해서도 할 수 있지만 옵션도 길어지고, 쳐야할 것도 많아지는 등 귀찮아지기 때문에 잘 사용 안한다.



LINUX 디렉토리 구조

  • / : root 디렉토리 ( root 유저의 홈디렉토리와는 다름 - root 유저의 홈 디렉토리는 /root)
  • /dev : 장치 파일들 (device file)
  • /tmp : 임시 파일 저장용 디렉토리 (temporary directory)
  • /dev/null : null device
  • /dev/console : 시스템 콘솔 장치
  • /boot : 부팅을 위한 커널 관련 이미지
  • /bin : 기본 실행 명령어 파일들 (binary == 실행파일)
    • 요즘에는 대체로 /bin → usr/bin을 syslink로 연결하기도 함
  • /sbin : 수퍼유저용 시스템 관리용 명령어 파일들
  • /etc : 시스템 설정 파일 및 관련 스크립트
  • /lib : 시스템 라이브러리
  • /usr : 응용 프로그램 관련 파일들
  • /usr/bin : 응용 프로그램 실행 파일
  • /usr/sbin : 관리자용 응용 프로그램 실행 파일
  • /usr/lib : 라이브러리
  • /usr/include : C언어용 헤더 파일
  • /usr/share : 응용 프로그램이 공유하는 파일
  • /usr/src : 소스코드 (커널,패키지)
  • /usr/local : 패키지가 아닌 임의로 설치되는 응용 프로그램 파일
    • 직접 소스코드를 쳐서 다운 받는 것들 bin,lib, apt 등
  • /var : 각종 잡다한 파일
  • /var/log : 로그 파일
  • /media : 마운트용 디렉토리
  • /exp : 외부 저장 장치 ( 사용자가 자주 만들어서 쓰는 디렉토리)
This post is licensed under CC BY 4.0 by the author.