mirror of
https://github.com/nad4-su/gpu-srv-ml-settings-script.git
synced 2026-08-12 22:53:24 +09:00
Ubuntu22.04 server os ML gpu & docker setup Script Backup
This commit is contained in:
@@ -1,2 +1,169 @@
|
|||||||
# gpu-srv-ml-settings-script
|
# GPU 학습용 Ubuntu 22.04 Docker 서버 세팅
|
||||||
GPU서버 Ubuntu Server OS 기준 세팅 스크립트
|
|
||||||
|
|
||||||
|
## 📋 개요
|
||||||
|
|
||||||
|
Ubuntu 22.04 서버에서 GPU 딥러닝 학습을 위한 Docker 환경을 자동으로 구성하는 스크립트입니다. NVIDIA GPU 드라이버, Docker, NVIDIA Container Toolkit을 포함한 완전한 GPU 학습 환경을 원클릭으로 설치합니다.
|
||||||
|
|
||||||
|
## ✨ 주요 기능
|
||||||
|
|
||||||
|
### 🚀 자동 설치
|
||||||
|
- **NVIDIA GPU 드라이버** 자동 설치 (최신 stable 버전)
|
||||||
|
- **Docker** 설치 (공식 get.docker.com 스크립트 사용)
|
||||||
|
- **NVIDIA Container Toolkit** 설치 및 설정
|
||||||
|
- **Docker Compose** 포함
|
||||||
|
|
||||||
|
### 🔧 환경 구성
|
||||||
|
- GPU 지원 Docker 런타임 자동 설정
|
||||||
|
- 사용자 권한 설정 (docker 그룹 추가)
|
||||||
|
- 검증 스크립트 자동 생성
|
||||||
|
- GPU 학습용 Docker Compose 예제 제공
|
||||||
|
|
||||||
|
|
||||||
|
## 🛠️ 시스템 요구사항
|
||||||
|
|
||||||
|
- **OS**: Ubuntu 22.04 LTS
|
||||||
|
- **GPU**: NVIDIA GPU (CUDA 지원)
|
||||||
|
- **권한**: sudo 권한 필요
|
||||||
|
- **네트워크**: 인터넷 연결 필요
|
||||||
|
|
||||||
|
## 📥 설치 방법
|
||||||
|
|
||||||
|
### 1. 스크립트 다운로드
|
||||||
|
```bash
|
||||||
|
git clone https://git.promedius.dev/techsupport/gpu-srv-setting-script.git
|
||||||
|
chmod +x Ubuntu22.04_gpu_docker_setup.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. 설치 실행
|
||||||
|
```bash
|
||||||
|
sudo bash Ubuntu22.04_gpu_docker_setup.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. 시스템 재부팅
|
||||||
|
```bash
|
||||||
|
sudo reboot
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4. 설치 검증
|
||||||
|
```bash
|
||||||
|
# 재부팅 후 실행
|
||||||
|
./verify_gpu_setup.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🧪 검증 결과 예시
|
||||||
|
|
||||||
|
설치가 완료되면 다음과 같은 검증 결과를 확인할 수 있습니다:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
=== GPU 및 Docker 설정 검증 ===
|
||||||
|
|
||||||
|
1. NVIDIA 드라이버 확인:
|
||||||
|
+-----------------------------------------------------------------------------+
|
||||||
|
| NVIDIA-SMI 535.xx.xx Driver Version: 535.xx.xx CUDA Version: 12.2 |
|
||||||
|
+-------------------------------+----------------------+----------------------+
|
||||||
|
|
||||||
|
2. Docker 버전 확인:
|
||||||
|
Docker version 24.x.x
|
||||||
|
|
||||||
|
3. Docker Compose 확인:
|
||||||
|
Docker Compose version v2.x.x
|
||||||
|
|
||||||
|
4. NVIDIA Container Toolkit 테스트:
|
||||||
|
[GPU 정보 출력]
|
||||||
|
|
||||||
|
5. 간단한 GPU 테스트 (PyTorch):
|
||||||
|
PyTorch version: 2.x.x
|
||||||
|
CUDA available: True
|
||||||
|
CUDA version: 12.2
|
||||||
|
GPU device count: 1
|
||||||
|
GPU device name: NVIDIA GeForce RTX xxxx
|
||||||
|
GPU 연산 테스트 성공!
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🐳 Docker Compose 예제
|
||||||
|
|
||||||
|
설치 후 제공되는 `docker-compose-gpu-example.yml`을 사용하여 즉시 GPU 학습 환경을 시작할 수 있습니다:
|
||||||
|
|
||||||
|
### Jupyter Lab with GPU
|
||||||
|
```bash
|
||||||
|
docker compose -f docker-compose-gpu-example.yml up -d jupyter-gpu
|
||||||
|
```
|
||||||
|
- **접속**: http://localhost:8888
|
||||||
|
- **포함 라이브러리**: TensorFlow, PyTorch, CUDA
|
||||||
|
- **토큰 확인**: `docker logs <container_name>`
|
||||||
|
|
||||||
|
### PyTorch GPU 테스트
|
||||||
|
```bash
|
||||||
|
docker compose -f docker-compose-gpu-example.yml run pytorch-gpu
|
||||||
|
```
|
||||||
|
|
||||||
|
# GPU 테스트
|
||||||
|
docker run --rm --gpus all nvidia/cuda:11.8.0-base-ubuntu22.04 nvidia-smi
|
||||||
|
```
|
||||||
|
|
||||||
|
## 📊 모니터링
|
||||||
|
|
||||||
|
### GPU 사용량 모니터링
|
||||||
|
```bash
|
||||||
|
# 실시간 GPU 모니터링
|
||||||
|
watch -n 1 nvidia-smi
|
||||||
|
|
||||||
|
# Docker 컨테이너 GPU 사용량
|
||||||
|
docker stats
|
||||||
|
```
|
||||||
|
|
||||||
|
### Docker 로그 확인
|
||||||
|
```bash
|
||||||
|
# 특정 컨테이너 로그
|
||||||
|
docker logs <container_name>
|
||||||
|
|
||||||
|
# Docker 데몬 로그
|
||||||
|
journalctl -u docker.service -f
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🔧 고급 설정
|
||||||
|
|
||||||
|
### 사용자 정의 Docker 이미지 빌드
|
||||||
|
```dockerfile
|
||||||
|
FROM nvidia/cuda:11.8.0-devel-ubuntu22.04
|
||||||
|
|
||||||
|
# 필요한 패키지 설치
|
||||||
|
RUN apt-get update && apt-get install -y \
|
||||||
|
python3 \
|
||||||
|
python3-pip \
|
||||||
|
git
|
||||||
|
|
||||||
|
# Python 패키지 설치
|
||||||
|
RUN pip3 install torch torchvision torchaudio
|
||||||
|
|
||||||
|
WORKDIR /workspace
|
||||||
|
```
|
||||||
|
|
||||||
|
### 멀티 GPU 사용
|
||||||
|
```yaml
|
||||||
|
services:
|
||||||
|
multi-gpu-training:
|
||||||
|
image: pytorch/pytorch:latest
|
||||||
|
deploy:
|
||||||
|
resources:
|
||||||
|
reservations:
|
||||||
|
devices:
|
||||||
|
- driver: nvidia
|
||||||
|
count: all
|
||||||
|
capabilities: [gpu]
|
||||||
|
```
|
||||||
|
|
||||||
|
## 📈 버전 히스토리
|
||||||
|
|
||||||
|
- **v1.0.0**: 초기 릴리스
|
||||||
|
- Ubuntu 22.04 지원
|
||||||
|
- NVIDIA 드라이버 자동 설치
|
||||||
|
- Docker 및 NVIDIA Container Toolkit 설정
|
||||||
|
- GPU 학습 환경 예제
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
|
||||||
|
**⭐ 유용하다면 Star를 눌러주세요! ⭐**
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,422 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# GPU 학습용 Ubuntu 22.04 Docker 서버 세팅 스크립트
|
||||||
|
# 실행 방법: sudo bash setup_gpu_docker.sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# 색상 설정
|
||||||
|
PURPLE='\033[0;35m'
|
||||||
|
NC='\033[0m' # No Color
|
||||||
|
|
||||||
|
|
||||||
|
echo "=== GPU 학습용 Ubuntu 22.04 Docker 서버 세팅 시작 ==="
|
||||||
|
|
||||||
|
# 시스템 업데이트
|
||||||
|
echo "시스템 업데이트 중..."
|
||||||
|
apt update && apt upgrade -y
|
||||||
|
|
||||||
|
# 기본 패키지 설치
|
||||||
|
echo "기본 패키지 설치 중..."
|
||||||
|
apt install -y \
|
||||||
|
curl \
|
||||||
|
wget \
|
||||||
|
vim \
|
||||||
|
git \
|
||||||
|
htop \
|
||||||
|
tree \
|
||||||
|
unzip \
|
||||||
|
software-properties-common \
|
||||||
|
apt-transport-https \
|
||||||
|
ca-certificates \
|
||||||
|
gnupg \
|
||||||
|
lsb-release
|
||||||
|
|
||||||
|
# NVIDIA 드라이버 설치
|
||||||
|
echo "NVIDIA 드라이버 설치 중..."
|
||||||
|
# 기존 NVIDIA 드라이버 제거
|
||||||
|
apt remove --purge -y nvidia*
|
||||||
|
|
||||||
|
# NVIDIA 드라이버 저장소 추가
|
||||||
|
add-apt-repository ppa:graphics-drivers/ppa -y
|
||||||
|
apt update
|
||||||
|
|
||||||
|
# 권장 드라이버 설치 (자동으로 최신 stable 버전 설치)
|
||||||
|
ubuntu-drivers autoinstall
|
||||||
|
|
||||||
|
# Docker 설치
|
||||||
|
echo "Docker 설치 중..."
|
||||||
|
# 기존 Docker 제거
|
||||||
|
apt remove -y docker docker-engine docker.io containerd runc
|
||||||
|
|
||||||
|
# Docker 공식 설치 스크립트 사용
|
||||||
|
wget -O get-docker.sh https://get.docker.com
|
||||||
|
sh ./get-docker.sh
|
||||||
|
|
||||||
|
# Docker 서비스 시작 및 부팅시 자동 시작 설정
|
||||||
|
systemctl start docker
|
||||||
|
systemctl enable docker
|
||||||
|
|
||||||
|
# 현재 사용자를 docker 그룹에 추가
|
||||||
|
if [ "$SUDO_USER" ]; then
|
||||||
|
usermod -aG docker $SUDO_USER
|
||||||
|
echo "사용자 $SUDO_USER를 docker 그룹에 추가했습니다."
|
||||||
|
else
|
||||||
|
echo "경고: SUDO_USER가 설정되지 않음. 수동으로 사용자를 docker 그룹에 추가하세요: sudo usermod -aG docker \$USER"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# NVIDIA Container Toolkit 설치
|
||||||
|
echo "NVIDIA Container Toolkit 설치 중..."
|
||||||
|
# NVIDIA Container Toolkit 저장소 설정
|
||||||
|
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
|
||||||
|
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
|
||||||
|
curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \
|
||||||
|
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
|
||||||
|
tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
|
||||||
|
|
||||||
|
# NVIDIA Container Toolkit 설치
|
||||||
|
apt update
|
||||||
|
apt install -y nvidia-container-toolkit
|
||||||
|
|
||||||
|
# Docker에 NVIDIA 런타임 설정
|
||||||
|
echo "Docker에 NVIDIA 런타임 설정 중..."
|
||||||
|
nvidia-ctk runtime configure --runtime=docker
|
||||||
|
|
||||||
|
# Docker 데몬 재시작
|
||||||
|
systemctl restart docker
|
||||||
|
|
||||||
|
# 시스템 재부팅 후 실행할 검증 스크립트 생성
|
||||||
|
cat > /home/$SUDO_USER/verify_gpu_setup.sh << 'EOF'
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
echo "=== GPU 및 Docker 설정 검증 ==="
|
||||||
|
|
||||||
|
echo "1. NVIDIA 드라이버 확인:"
|
||||||
|
nvidia-smi
|
||||||
|
|
||||||
|
echo -e "\n2. Docker 버전 확인:"
|
||||||
|
docker --version
|
||||||
|
|
||||||
|
echo -e "\n3. Docker Compose 확인:"
|
||||||
|
docker compose version
|
||||||
|
|
||||||
|
echo -e "\n4. NVIDIA Container Toolkit 테스트:"
|
||||||
|
docker run --rm --gpus all nvidia/cuda:11.8.0-base-ubuntu22.04 nvidia-smi
|
||||||
|
|
||||||
|
echo -e "\n5. 간단한 GPU 테스트 (PyTorch):"
|
||||||
|
docker run --rm --gpus all pytorch/pytorch:latest python -c "
|
||||||
|
import torch
|
||||||
|
print(f'PyTorch version: {torch.__version__}')
|
||||||
|
print(f'CUDA available: {torch.cuda.is_available()}')
|
||||||
|
if torch.cuda.is_available():
|
||||||
|
print(f'CUDA version: {torch.version.cuda}')
|
||||||
|
print(f'GPU device count: {torch.cuda.device_count()}')
|
||||||
|
print(f'GPU device name: {torch.cuda.get_device_name(0)}')
|
||||||
|
# 간단한 GPU 연산 테스트
|
||||||
|
x = torch.rand(1000, 1000).cuda()
|
||||||
|
y = torch.rand(1000, 1000).cuda()
|
||||||
|
z = torch.mm(x, y)
|
||||||
|
print('GPU 연산 테스트 성공!')
|
||||||
|
else:
|
||||||
|
print('GPU를 사용할 수 없습니다.')
|
||||||
|
"
|
||||||
|
|
||||||
|
echo -e "\n=== 검증 완료 ==="
|
||||||
|
EOF
|
||||||
|
|
||||||
|
chmod +x /home/$SUDO_USER/verify_gpu_setup.sh
|
||||||
|
chown $SUDO_USER:$SUDO_USER /home/$SUDO_USER/verify_gpu_setup.sh
|
||||||
|
|
||||||
|
# 유용한 Docker Compose 예제 생성
|
||||||
|
cat > /home/$SUDO_USER/docker-compose-gpu-example.yml << 'EOF'
|
||||||
|
version: '3.8'
|
||||||
|
|
||||||
|
services:
|
||||||
|
jupyter-gpu:
|
||||||
|
image: tensorflow/tensorflow:latest-gpu-jupyter
|
||||||
|
ports:
|
||||||
|
- "8888:8888"
|
||||||
|
volumes:
|
||||||
|
- ./notebooks:/tf/notebooks
|
||||||
|
- ./data:/tf/data
|
||||||
|
environment:
|
||||||
|
- JUPYTER_ENABLE_LAB=yes
|
||||||
|
deploy:
|
||||||
|
resources:
|
||||||
|
reservations:
|
||||||
|
devices:
|
||||||
|
- driver: nvidia
|
||||||
|
count: all
|
||||||
|
capabilities: [gpu]
|
||||||
|
command: >
|
||||||
|
bash -c "
|
||||||
|
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 &&
|
||||||
|
jupyter lab --ip=0.0.0.0 --port=8888 --no-browser --allow-root --notebook-dir=/tf
|
||||||
|
"
|
||||||
|
|
||||||
|
pytorch-gpu:
|
||||||
|
image: pytorch/pytorch:latest
|
||||||
|
volumes:
|
||||||
|
- ./workspace:/workspace
|
||||||
|
working_dir: /workspace
|
||||||
|
deploy:
|
||||||
|
resources:
|
||||||
|
reservations:
|
||||||
|
devices:
|
||||||
|
- driver: nvidia
|
||||||
|
count: all
|
||||||
|
capabilities: [gpu]
|
||||||
|
command: python -c "import torch; print('PyTorch GPU available:', torch.cuda.is_available())"
|
||||||
|
EOF
|
||||||
|
|
||||||
|
chown $SUDO_USER:$SUDO_USER /home/$SUDO_USER/docker-compose-gpu-example.yml
|
||||||
|
|
||||||
|
# 디렉토리 생성
|
||||||
|
mkdir -p /home/$SUDO_USER/notebooks
|
||||||
|
mkdir -p /home/$SUDO_USER/data
|
||||||
|
mkdir -p /home/$SUDO_USER/workspace
|
||||||
|
chown -R $SUDO_USER:$SUDO_USER /home/$SUDO_USER/notebooks
|
||||||
|
chown -R $SUDO_USER:$SUDO_USER /home/$SUDO_USER/data
|
||||||
|
chown -R $SUDO_USER:$SUDO_USER /home/$SUDO_USER/workspace
|
||||||
|
|
||||||
|
echo "=== 설치 완료 ==="
|
||||||
|
echo ""
|
||||||
|
echo "다음 단계를 진행하세요:"
|
||||||
|
echo "1. 시스템을 재부팅하세요: sudo reboot"
|
||||||
|
echo "2. 재부팅 후 검증 스크립트를 실행하세요: ./verify_gpu_setup.sh"
|
||||||
|
echo "3. Docker Compose 예제를 사용하여 GPU 학습 환경을 시작하세요:"
|
||||||
|
echo " cd ~ && docker compose -f docker-compose-gpu-example.yml up -d jupyter-gpu"
|
||||||
|
echo ""
|
||||||
|
echo "백업 및 복구 기능:"
|
||||||
|
echo "4. 현재 환경 전체 백업: ./backup_gpu_environment.sh"
|
||||||
|
echo "5. 빠른 백업 (설정만): ./quick_backup.sh"
|
||||||
|
echo "6. 다른 서버에 복구: sudo bash restore_gpu_environment.sh"
|
||||||
|
echo ""
|
||||||
|
echo "주의사항:"
|
||||||
|
echo "- 재부팅 후 새로운 터미널에서 docker 명령어를 사용하세요"
|
||||||
|
echo "- GPU 메모리 사용량을 모니터링하려면 'watch -n 1 nvidia-smi' 명령어를 사용하세요"
|
||||||
|
echo "- Jupyter Lab 접속: http://localhost:8888 (토큰은 docker logs로 확인)"
|
||||||
|
echo "- 백업은 정기적으로 실행하여 환경을 보존하세요"
|
||||||
|
|
||||||
|
# 백업 및 복구 스크립트 생성
|
||||||
|
cat > /home/$SUDO_USER/backup_gpu_environment.sh << 'EOF'
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# GPU 서버 환경 백업 스크립트
|
||||||
|
# 실행 방법: ./backup_gpu_environment.sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
BACKUP_DIR="gpu_server_backup_$(date +%Y%m%d_%H%M%S)"
|
||||||
|
BACKUP_PATH="$HOME/$BACKUP_DIR"
|
||||||
|
|
||||||
|
echo "=== GPU 서버 환경 백업 시작 ==="
|
||||||
|
echo "백업 경로: $BACKUP_PATH"
|
||||||
|
|
||||||
|
mkdir -p "$BACKUP_PATH"
|
||||||
|
|
||||||
|
# 시스템 정보 백업
|
||||||
|
echo "1. 시스템 정보 백업 중..."
|
||||||
|
lsb_release -a > "$BACKUP_PATH/system_info.txt"
|
||||||
|
uname -a >> "$BACKUP_PATH/system_info.txt"
|
||||||
|
nvidia-smi > "$BACKUP_PATH/nvidia_info.txt"
|
||||||
|
docker --version > "$BACKUP_PATH/docker_info.txt"
|
||||||
|
|
||||||
|
# 설치된 패키지 목록 백업
|
||||||
|
echo "2. 설치된 패키지 목록 백업 중..."
|
||||||
|
dpkg -l > "$BACKUP_PATH/installed_packages.txt"
|
||||||
|
apt list --installed > "$BACKUP_PATH/apt_packages.txt"
|
||||||
|
|
||||||
|
# Docker 이미지 및 컨테이너 백업
|
||||||
|
echo "3. Docker 이미지 목록 백업 중..."
|
||||||
|
docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.ID}}\t{{.Size}}" > "$BACKUP_PATH/docker_images.txt"
|
||||||
|
docker ps -a --format "table {{.Names}}\t{{.Image}}\t{{.Status}}" > "$BACKUP_PATH/docker_containers.txt"
|
||||||
|
|
||||||
|
# Docker 이미지 실제 백업 (선택사항)
|
||||||
|
echo "4. 주요 Docker 이미지 백업 중..."
|
||||||
|
mkdir -p "$BACKUP_PATH/docker_images"
|
||||||
|
for image in $(docker images --format "{{.Repository}}:{{.Tag}}" | grep -E "(pytorch|tensorflow|jupyter|cuda)" | head -10); do
|
||||||
|
echo " 백업 중: $image"
|
||||||
|
safe_name=$(echo "$image" | sed 's/[^a-zA-Z0-9._-]/_/g')
|
||||||
|
docker save "$image" | gzip > "$BACKUP_PATH/docker_images/${safe_name}.tar.gz"
|
||||||
|
done
|
||||||
|
|
||||||
|
# Python 환경 백업
|
||||||
|
echo "5. Python 환경 백업 중..."
|
||||||
|
if command -v python3 &> /dev/null; then
|
||||||
|
python3 -m pip list > "$BACKUP_PATH/pip_packages.txt"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if command -v conda &> /dev/null; then
|
||||||
|
conda env list > "$BACKUP_PATH/conda_envs.txt"
|
||||||
|
conda list > "$BACKUP_PATH/conda_packages.txt"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 설정 파일 백업
|
||||||
|
echo "6. 설정 파일 백업 중..."
|
||||||
|
mkdir -p "$BACKUP_PATH/configs"
|
||||||
|
cp -r ~/.bashrc "$BACKUP_PATH/configs/" 2>/dev/null || true
|
||||||
|
cp -r ~/.profile "$BACKUP_PATH/configs/" 2>/dev/null || true
|
||||||
|
cp -r ~/.ssh "$BACKUP_PATH/configs/" 2>/dev/null || true
|
||||||
|
cp -r ~/.gitconfig "$BACKUP_PATH/configs/" 2>/dev/null || true
|
||||||
|
cp -r /etc/docker/daemon.json "$BACKUP_PATH/configs/" 2>/dev/null || true
|
||||||
|
|
||||||
|
# 중요한 디렉토리 백업
|
||||||
|
echo "7. 중요한 디렉토리 백업 중..."
|
||||||
|
mkdir -p "$BACKUP_PATH/user_data"
|
||||||
|
cp -r ~/notebooks "$BACKUP_PATH/user_data/" 2>/dev/null || true
|
||||||
|
cp -r ~/workspace "$BACKUP_PATH/user_data/" 2>/dev/null || true
|
||||||
|
cp -r ~/data "$BACKUP_PATH/user_data/" 2>/dev/null || true
|
||||||
|
cp -r ~/scripts "$BACKUP_PATH/user_data/" 2>/dev/null || true
|
||||||
|
|
||||||
|
# 복구 스크립트 생성
|
||||||
|
cat > "$BACKUP_PATH/restore_gpu_environment.sh" << 'RESTORE_EOF'
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# GPU 서버 환경 복구 스크립트
|
||||||
|
# 실행 방법: sudo bash restore_gpu_environment.sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
BACKUP_DIR="$(dirname "$0")"
|
||||||
|
echo "=== GPU 서버 환경 복구 시작 ==="
|
||||||
|
echo "복구 소스: $BACKUP_DIR"
|
||||||
|
|
||||||
|
# 패키지 복구
|
||||||
|
echo "1. 패키지 복구 중..."
|
||||||
|
if [ -f "$BACKUP_DIR/apt_packages.txt" ]; then
|
||||||
|
# 기본 패키지 설치
|
||||||
|
apt update
|
||||||
|
grep -E "^ii" "$BACKUP_DIR/installed_packages.txt" | awk '{print $2}' | xargs apt install -y --ignore-missing
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Docker 이미지 복구
|
||||||
|
echo "2. Docker 이미지 복구 중..."
|
||||||
|
if [ -d "$BACKUP_DIR/docker_images" ]; then
|
||||||
|
for image_file in "$BACKUP_DIR/docker_images"/*.tar.gz; do
|
||||||
|
if [ -f "$image_file" ]; then
|
||||||
|
echo " 복구 중: $image_file"
|
||||||
|
gunzip -c "$image_file" | docker load
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Python 패키지 복구
|
||||||
|
echo "3. Python 패키지 복구 중..."
|
||||||
|
if [ -f "$BACKUP_DIR/pip_packages.txt" ]; then
|
||||||
|
pip3 install -r <(grep -v "^#" "$BACKUP_DIR/pip_packages.txt" | awk '{print $1}') --ignore-installed
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 설정 파일 복구
|
||||||
|
echo "4. 설정 파일 복구 중..."
|
||||||
|
if [ -d "$BACKUP_DIR/configs" ]; then
|
||||||
|
cp -r "$BACKUP_DIR/configs/.bashrc" ~/ 2>/dev/null || true
|
||||||
|
cp -r "$BACKUP_DIR/configs/.profile" ~/ 2>/dev/null || true
|
||||||
|
cp -r "$BACKUP_DIR/configs/.gitconfig" ~/ 2>/dev/null || true
|
||||||
|
cp -r "$BACKUP_DIR/configs/daemon.json" /etc/docker/ 2>/dev/null || true
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 사용자 데이터 복구
|
||||||
|
echo "5. 사용자 데이터 복구 중..."
|
||||||
|
if [ -d "$BACKUP_DIR/user_data" ]; then
|
||||||
|
cp -r "$BACKUP_DIR/user_data"/* ~/ 2>/dev/null || true
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 권한 수정
|
||||||
|
chown -R $SUDO_USER:$SUDO_USER /home/$SUDO_USER/
|
||||||
|
|
||||||
|
echo "=== 복구 완료 ==="
|
||||||
|
echo "Docker 재시작 중..."
|
||||||
|
systemctl restart docker
|
||||||
|
|
||||||
|
echo "복구가 완료되었습니다!"
|
||||||
|
echo "시스템을 재부팅하는 것을 권장합니다: sudo reboot"
|
||||||
|
RESTORE_EOF
|
||||||
|
|
||||||
|
chmod +x "$BACKUP_PATH/restore_gpu_environment.sh"
|
||||||
|
|
||||||
|
# 백업 정보 파일 생성
|
||||||
|
cat > "$BACKUP_PATH/backup_info.txt" << 'INFO_EOF'
|
||||||
|
=== GPU 서버 백업 정보 ===
|
||||||
|
|
||||||
|
백업 날짜: $(date)
|
||||||
|
백업 경로: $BACKUP_PATH
|
||||||
|
백업 내용:
|
||||||
|
- 시스템 정보 (system_info.txt, nvidia_info.txt, docker_info.txt)
|
||||||
|
- 설치된 패키지 목록 (installed_packages.txt, apt_packages.txt)
|
||||||
|
- Docker 이미지 및 컨테이너 정보
|
||||||
|
- 주요 Docker 이미지 파일 (docker_images/)
|
||||||
|
- Python 패키지 목록 (pip_packages.txt)
|
||||||
|
- 설정 파일 (configs/)
|
||||||
|
- 사용자 데이터 (user_data/)
|
||||||
|
|
||||||
|
복구 방법:
|
||||||
|
1. 백업 폴더를 새 서버로 복사
|
||||||
|
2. sudo bash restore_gpu_environment.sh 실행
|
||||||
|
3. 시스템 재부팅
|
||||||
|
|
||||||
|
주의사항:
|
||||||
|
- 복구 전 새 서버에 기본 GPU 드라이버와 Docker가 설치되어 있어야 함
|
||||||
|
- 복구 과정에서 기존 설정이 덮어쓰여질 수 있음
|
||||||
|
- 중요한 데이터는 별도 백업 권장
|
||||||
|
INFO_EOF
|
||||||
|
|
||||||
|
echo "백업 완료!"
|
||||||
|
echo "백업 위치: $BACKUP_PATH"
|
||||||
|
echo "복구 방법: sudo bash $BACKUP_PATH/restore_gpu_environment.sh"
|
||||||
|
|
||||||
|
# 백업 압축 옵션
|
||||||
|
read -p "백업을 압축하시겠습니까? (y/n): " compress
|
||||||
|
if [[ $compress == "y" || $compress == "Y" ]]; then
|
||||||
|
echo "백업 압축 중..."
|
||||||
|
tar -czf "${BACKUP_PATH}.tar.gz" -C "$HOME" "$BACKUP_DIR"
|
||||||
|
rm -rf "$BACKUP_PATH"
|
||||||
|
echo "압축 완료: ${BACKUP_PATH}.tar.gz"
|
||||||
|
fi
|
||||||
|
EOF
|
||||||
|
|
||||||
|
chmod +x /home/$SUDO_USER/backup_gpu_environment.sh
|
||||||
|
chown $SUDO_USER:$SUDO_USER /home/$SUDO_USER/backup_gpu_environment.sh
|
||||||
|
|
||||||
|
# 빠른 백업 스크립트 생성 (Docker 이미지 제외)
|
||||||
|
cat > /home/$SUDO_USER/quick_backup.sh << 'EOF'
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# 빠른 백업 스크립트 (Docker 이미지 제외)
|
||||||
|
# 실행 방법: ./quick_backup.sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
BACKUP_DIR="quick_backup_$(date +%Y%m%d_%H%M%S)"
|
||||||
|
BACKUP_PATH="$HOME/$BACKUP_DIR"
|
||||||
|
|
||||||
|
echo "=== 빠른 백업 시작 ==="
|
||||||
|
mkdir -p "$BACKUP_PATH"
|
||||||
|
|
||||||
|
# 시스템 정보 및 패키지 목록만 백업
|
||||||
|
lsb_release -a > "$BACKUP_PATH/system_info.txt"
|
||||||
|
nvidia-smi > "$BACKUP_PATH/nvidia_info.txt"
|
||||||
|
docker --version > "$BACKUP_PATH/docker_info.txt"
|
||||||
|
dpkg -l > "$BACKUP_PATH/installed_packages.txt"
|
||||||
|
docker images --format "table {{.Repository}}\t{{.Tag}}" > "$BACKUP_PATH/docker_images_list.txt"
|
||||||
|
|
||||||
|
if command -v python3 &> /dev/null; then
|
||||||
|
python3 -m pip list > "$BACKUP_PATH/pip_packages.txt"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 설정 파일 백업
|
||||||
|
mkdir -p "$BACKUP_PATH/configs"
|
||||||
|
cp ~/.bashrc "$BACKUP_PATH/configs/" 2>/dev/null || true
|
||||||
|
cp ~/.profile "$BACKUP_PATH/configs/" 2>/dev/null || true
|
||||||
|
|
||||||
|
# 압축
|
||||||
|
tar -czf "${BACKUP_PATH}.tar.gz" -C "$HOME" "$BACKUP_DIR"
|
||||||
|
rm -rf "$BACKUP_PATH"
|
||||||
|
|
||||||
|
echo "빠른 백업 완료: ${BACKUP_PATH}.tar.gz"
|
||||||
|
EOF
|
||||||
|
|
||||||
|
chmod +x /home/$SUDO_USER/quick_backup.sh
|
||||||
|
chown $SUDO_USER:$SUDO_USER /home/$SUDO_USER/quick_backup.sh
|
||||||
|
|
||||||
|
echo "설정이 완료되었습니다!"
|
||||||
Reference in New Issue
Block a user