티스토리 뷰
ZNS SSD는 현재 많이 사용되는 Block Interface SSD와는 달리 zone 단위로 읽고 쓰기 때문에 디바이스에 데이터를 접근시키기 위한 파일시스템 인터페이스가 필요합니다. Zone Storage documentation을 보면 여러가지 파일시스템을 이용한 연결 방법을 제시하고 있는데, 저는 dm-zoned를 이용해 연결하는 방법을 시도했습니다.
dm-zoned-tools project hosted on GitHub로 이동하여 dm-zoned를 설치합니다. README 파일을 천천히 따라가다 보면 쉽게 설치할 수 있습니다. 설치 중간에 라이브러리가 없다고 나오는 경우가 있는데, 해당 라이브러리를 설치한 후 다시 시도하면 정상적으로 진행됩니다.
1. ZNS SSD 초기화
sudo zbd reset /dev/nvme0n1
dmzadm --help를 입력했을 때 메뉴얼이 정상적으로 나오면 설치가 잘 되었다는 것입니다. dm-zoned를 연결하기 전 zbd reset을 이용해 ZNS SSD를 한번 초기화 시켜줍니다.
2. Target Device 생성
sudo dmzadm --format /dev/sdb /dev/nvme0n1
ZNS SSD의 target device를 생성합니다. format의 첫번 째 인자는 regular device, 두번 째 인자는 ZBD 입니다. 반드시 순서를 꼭 지켜야합니다. 만약 regular SSD를 사용하지 않는다면 ZBD(ZNS SSD)만 입력하면 됩니다. /dev/nvmeXnY는 NVMe SSD를 뜻하고, /dev/sdZ는 regular SSD 혹은 HDD를 뜻합니다. Regular device와 zone device는 반드시 파일 시스템, 마운트 모두 설정이 되지 않은 초기 상태이어야 합니다. 정상적으로 생성되면 아래 사진과 같이 타켓 정보가 출력됩니다.
3. Target Device 활성화
sudo dmzadm --start /dev/sdb /dev/nvme0n1
Target device를 활성화합니다. 정상적으로 적용이 되엇다면 'starting' 메세지와 함께 dm-zoned 디스크의 uuid를 확인할 수 있습니다. 여기서 uuid는 일반적으로 시스템 부트 단계 /etc/fstab 파일에서 읽는 디스크의 uuid와 같은 역할을 하는 값입니다. Emulated SSD 이기 때문에 uuid 값은 항상 바뀝니다. 반대로 비활성화를 하고자 하는 경우에는 start대신 stop을 입력하시면 됩니다.
/dev 디렉토리에 가시면 device mapper 디바이스를 확인할 수 있습니다. 제 경우에는 'dm-0'인 것을 확인할 수 있습니다. 해당 디바이스 이름을 기억하고 계셔야 합니다.
4. /dev/dm-0 파일시스템 포맷팅
sudo mkfs.ext4 /dev/dm-0
dm-zoned를 적용하고자 하는 파일 시스템으로 포맷팅합니다. 3번 과정까지 완료한 경우 디스크는 생성되었지만, 해당 디스크의 파일 시스템은 설정되지 않은 상태입니다. 그러므로 저는 ext4 파일 시스템으로 포맷팅 했습니다. 다른 여러가지 파일 시스템으로 포맷팅하는 방법은 조금만 찾아보면 쉽게 알 수 있습니다.
5. dm-zoned 마운트
sudo mount /dev/dm-0 /mnt/zns
4번에서 포맷팅을 완료했다면 이제는 데이터를 저장할 공간을 찾아줘야 합니다. 해당 디스크에 입출력이 발생했을 때 데이터들이 저장될 공간을 마운트합니다. 정상적으로 마운트가 되었다면 df -h를 입력했을 때 마운트 된 것을 확인할 수 있습니다. 마운트 위치는 사용자가 원하는 위치에 자유롭게 하면 됩니다. 저는 알아보기 쉽도록 /mnt 디렉토리 하위에 zns 디렉토리를 만들어 /mnt/zns 위치를 사용했습니다.
연결과정에서 겪었던 상황들
dm-zoned를 연결하면서 가장 시간이 많이 소요됐던 부분은 regular device를 포맷팅하는 부분이었습니다. 반드시 Regular device와 zone device는 반드시 파일 시스템, 마운트 모두 설정이 되지 않은 초기 상태이어야 합니다. 만약 가용한 regular device가 없는 경우 fdisk를 이용해 파티셔닝을 하거나, ubuntu를 재설치하며 빈 디스크를 할당해주셔야 합니다.
그리고 dm-zoned를 연결하다보면 ZONE_WRITE_FAIL 메세지가 커널에 발생하는 경우가 종종 생깁니다. 어떤 이유에서 발생하는지 코드로 찾아보려고 했지만 찾을 수 없었습니다. dm-zoned 내부 코드를 변경한 상태가 아닌 초기 상태에서도 간헐적으로 발생하는 에러이기 때문에 재접속하여 다시 연결을 시도하시면 됩니다.
'Linux' 카테고리의 다른 글
[Linux] ZNS SSD dm-zoned 동작 원리(2) - dm-zoned-metadata.c code분석 (0) | 2022.12.06 |
---|---|
[Linux] ZNS SSD dm-zoned 동작 원리(1) - dm-zoned-target.c code분석 (0) | 2022.12.04 |
[Linux] Device Mapper (dm-zoned) (0) | 2022.10.28 |
[Linux] 커널 디버깅 하는 방법 / printk, ftrace(trace_printk) (4) | 2022.10.13 |
[Linux] 리눅스 커스텀 커널 설치하는 법 (0) | 2022.10.06 |
- Total
- Today
- Yesterday
- 3차 데모데이
- 스프링 프레임워크
- CI/CD
- 런칭 페스티벌
- 알림기능개선기
- 우테코 회고
- 5주차 회고
- 우테코
- java
- 회고
- ZNS
- Spring
- dm-zoned
- ZNS SSD
- 알림개선기
- 팀프로젝트
- dm-zoned 코드분석
- 피움
- jpa
- 백준
- 2차 데모데이
- 스프링MVC
- 네트워크
- 스프링 부트
- 8주차 회고
- 스프링 Logback
- 파이썬
- 프로젝트
- 피움 6주차 회고
- 환경 별 로깅 전략 분리
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |