2016년 1월 28일 목요일

동작 중인 리눅스 서버에서 SATA HDD를 꽂고 빼는 방법

독창적인 제목은 아니지만 Hot-plugging a SATA drive under Linux라고 쓰면 이 글에 가장 잘 어울릴 것이다. 이 글이 좀더 쓸모가 있기를 바라는 마음에서 대용량 HDD의 인식과 파티션에 대한 내용도 추가하였다. 이 글을 통해서 가장 큰 혜택을 입는 사람은? 물론 작성자인 나 자신이다. 영원한 초보 리눅스 관리자의 심정으로(벌써 25년?) 글을 시작해 본다.

다음 사진은 내가 애지중지하는 서버들의 모습이다. 작은 캐비넷 안에 2대의 랙 마운트 서버가 장착되어 있고, 사진에는 나오지 않았지만 바로 곁에는 타워형 서버가 하나 더 있다.


서버의 전면부에는 손가락으로 '틱' 누르면 빠지는 hot swap bay가 있다. 서버의 전원을 켠 상태에서 SATA HDD를 hot swap bay에 넣고 인식시켜 사용한 뒤 안전하게 빼내는 방법을 오늘 상세히 알아보려는 것이다. 망가진 하드디스크를 교체하거나 백업 과정에 필수적인 기술이라 할 수 있겠다. Hot swap과 hot plug은 종종 혼용되지만 정확히 말하자면 조금 다르다. Hot swap은 컴퓨터의 전원을 내리지 않고 HDD 등의 부분품을 교체할 수 있는 기술을 말하는 것이고, hot plug은 USB 장치처럼 시스템 동작 중에 새로운 장치를 연결했을 때 바로 인식되어 사용할 수 있게 만드는 기술을 말한다.


바이오스 설정


전원을 내렸다 다시 켜지 않고는 BIOS 셋업을 건드릴 방법이 없다. 다음 두 가지가 제대로 설정되어야 한다.
  • Configure SATA as AHCI
  • Hot Plug Enabled

재부팅을 한 뒤 빈 hot swap bay에 새 HDD를 넣어보자. fdisk -l을 해 보면 새로운 하드 디스크가 보일 것이다. 내 경우에는 /dev/sdf로 잡혔다. 다음으로는 파티션, 포맷 및 마운트를 하여 정상적으로 사용하면 된다.

Misalign 문제 없이 파티션하기


GUI 환경에서 작업 중이라면 CentOS의 경우 Applications -> System Tools -> Disk Utility를 실행해 보자. 이 프로그램을 command line에서 실행하려면 palimpsest라고 치면 된다. 다음의 스크린샷은 모든 설정을 마친 뒤에 찍은 것이라서 모든 것이 정상적으로 보이지만, 새 디스크를 넣은 직후에는 This partition is misaligned by 3072 bytes라는 아주 유명한 문구가 나온다.


꽤 오래전에 내가 다른 사이트에 이 문제의 해결법을 기록해 둔 적이 있다. 요약하자면 Disk Utility를 쓰지말고 fdisk에서 단위를 실린더가 아닌 섹터로 표기하게 만든 다음(fdisk) 시작 섹터를 2048로 지정하는 것으로 해결하였었다. 그러나 fdisk 명령으로는 6TB짜리 대용량 HDD의 전체를 하나의 대형 파티션으로 잡지 못하는 것을 발견하였다. 좀 더 정확히 말하자면 fdisk는 최신 대용량 하드 디스크 드라이브에 쓰이는 GPT(GUID partition table)을 지원하지 못한다는 뜻이다. 웹 검색을 통해서 parted로 파티션을 하면 원하는 바를 이룰 수 있다는 것을 알았다. 다음의 텍스트는 내가 직접 parted를 실행한 것을 복사한 것이다. 굵은 글씨로 표시된 그대로 타이프하면 된다. /dev/sdf는 실제 상황에 맞게 바꾸어라.
[root@proton project]# parted /dev/sdf
GNU Parted 2.1
Using /dev/sdf
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel GPT                                                    
Warning: The existing disk label on /dev/sdf will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No? Yes                                                            
Warning: /dev/sdf contains GPT signatures, indicating that it has a GPT table.  However, it does not have a valid fake msdos partition table, as it should.  Perhaps it was corrupted -- possibly by a program that doesn't understand
GPT partition tables.  Or perhaps you deleted the GPT table, and are now using an msdos partition table.  Is this a GPT partition table?
Yes/No? Yes                                                            
(parted) mkpart primary 2048s 100%                                      
(parted) q                                                              
Information: You may need to update /etc/fstab.
[root@proton project]# 
6TB 디스크 전체를 하나의 파티션으로 만들었다. 이제 palimpsest disk utility로 포맷을 한 뒤 적당한 위치에 마운트한다. HDD의 사용을 마치면 시스템에서 제거할 것이므로 /etc/fstab에 기록을 할 필요는 없겠다.  parted를 사용하는 약간 다른 방법을 내가 예전에 포스팅해 둔 적이 있었다.

디스크 드라이브 안전하게 제거하기


작업이 다 끝나면 이 HDD의 전원을 안전하게 차단하고 꺼내면 된다. 다음의 순서를 따를 것.
  1. umount 실행. 어떤 글에서는 umount 전에 sync를 몇 번 실행하라고 하는데, umount를 실행하면 자동적으로 sync를 먼저 실행하므로 그럴 필요가 없다고 한다.
  2. hdparm -Y /dev/sdf
hdparm -Y 는 지정된 HDD를 셧다운시키는 명령어이다. 여기까지 한 다음 HDD를 빼면 된다. 그런데 어떤 글에서는 다음의 두 명령어 중 하나를 실행하라고 한다. 이 명령이 hdparm -Y와 같이 쓰여야 하는지, 혹은 hdparm -Y를 대신해서 쓰여도 되는지는 아직 확인하지 못하였다.
  1. echo 0 - 0 > /sys/class/scsi_host/hostX/scan
  2. echo 1 > /sys/block/sdf/device/delete
hostX와 sdf는 실제 상황에 맞게 고쳐야 한다. 내 HDD의 SCSI host 번호를 알려면 다음 명령 중 아무것이나 실행해 보라.
  1. ls -l /sys/block/ | grep sd. 
  2. ls -l /dev/disk/by-path/

하드디스크 정보 알아내기


기억하면 유용한 명령어들이다.
  • ls -l /dev/disk/by-uuid 
  • hdparm -I /dev/sdf

댓글 없음: