file system
fs(file system)는 os에서 매우 큰 부분을 차지한다. 디렉토리도 파일 시스템의 일종이다.
파일 시스템 타입
- linux: xfs, ext4
- windows: ntfs, exfat, fat32
새로운 FS 만드는 법
- partitioning
- command: fdisk, parted
- file sysyem
- command: mkfs(==format),
- 만든 후 checking command: fsck or xfs_*
- 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)
추가한 디스크 확인 방법
- virtual machines을 사용하는 경우 virtual machines setting에서 cd/dvd에서 hard-disk, add 누르고 csci 등 선택
- lsblk
- 추가한 디스크가 안보이면 코드를 쳐야 하는데, 공백 지켜서 쳐야 한다.
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 <device swapfile -L label> swapoff <device swapfile -L label>
- mkswap [-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 <directory | device> |
== or 연산자로 둘 중 아무거나 적어줘도 상관없음
디바이스 이름
- sda1 ⇒ usb의 1번째 장치의 첫번째 파티션
- sdb5 ⇒ usb의 2번째 장치의 다섯번째 파티션
- sde2 ⇒ usb의 5번째 장치의 두번째 파티션
실습
sdb1은 스왑공간으로 했으니 2로 마운트 할 것이다.
순서
mkfs -t ext4 /dev/sdb2
: /dev/sdb2 파티션을 ext4 파일시스템으로 만듦mkdir /media/backup
: media/backup 파일 생성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를 사용하지 않도록 콘솔창으로 이동
- ctrl+alt+f3을 눌러 console로 이동
- usb연결: vmware팝업창을 볼 수 있음
- connect to a virtual machine을 선택
- root로 로그인 후 lsblk를 쳐서 마운트 상태 확인
- 마운트할 위치를 먼저 만들어야 함
- mkdir /media/usbstick
- mount /dev/sdc1 <ALT+.>
- 더 자세하게 디바이스를 보고자 한다면
1 2
# blkid /dev/sdc1 /dev/sdc1: LABEL = "USB32" UUID= ... TYPE="vfat" ...
usb 메모리에 데이터를 써보기
1
# cp ~/.bashrc /media/usbstick/
- umount
- umount를 하지 않으면 데이터가 꼬일 수도 있음
- disconnect
- host로 다시 연결하기 위해서는 우측 상단에 disconnect 누르면 댐
- 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)에 다양한 형태가 존재한다.
- /dev/sd* : 실제 디바이스 장치로 설정하는 방식
- 단점: 가장 오래된 방식으로 port를 순서대로 연결하지 않는 경우 장치명의 변경되거나 역전될 가능성이 있다.
- e.g. port 0,3,4번에 장치가 연결되어 있다면 0(sda),3(sdb),4(sdc)인데, 2번포트에 1개를 더 연결하면 1칸씩 밀려야 한다. 그러면 3:sdc, 4:sdd가 되어야 하는데, 이름이 바뀌어 있지 않으므로 오류가 난다.
- 단점: 가장 오래된 방식으로 port를 순서대로 연결하지 않는 경우 장치명의 변경되거나 역전될 가능성이 있다.
- LABEL=name : 레이블 이름으로 검색하여 장치를 찾아내는 방식
- LABEL : 식별 가능한 문자열을 FS의 label부분에 넣어서 찾음
- 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]
- e2label
- tune2fs : ext4 파일 시스템의 다양한 설정 조정
- xfs_admin : XFS 파일 시스템의 레이블 / UUID 확인 및 편집
- findfs : 레이블을 검색
대체로 e2label,tune2fs는 설정하는 용도, findfs는 찾는 용도로 많이 사용된다.
tune2fs
tune2fs -U <clear | random | time | uuid_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 : 외부 저장 장치 ( 사용자가 자주 만들어서 쓰는 디렉토리)