# 00\_move\_swap.sh

## Hướng dẫn chuyển Swap từ `/swap.img` sang ổ khác trên Ubuntu

Trong một số trường hợp, ổ hệ thống (`/`) bị giới hạn dung lượng hoặc muốn tận dụng ổ đĩa khác có dung lượng lớn hơn, chúng ta có thể **di chuyển swap sang ổ khác**.

Ví dụ trong bài này:

* Swap cũ: `/swap.img`
* Swap mới: `/mnt/e02/uenv/swapfile`

Bài viết hướng dẫn cách **chuyển swap an toàn và tự động bằng script Bash**.

***

## 1. Kiểm tra swap hiện tại

Trước tiên kiểm tra swap đang dùng:

```
swapon --show
```

Hoặc:

```
free -h
```

Ví dụ kết quả:

```
NAME       TYPE SIZE USED PRIO
/swap.img  file 2G   0B   -2
```

***

## 2. Script Bash tự động chuyển swap

Script dưới đây sẽ thực hiện toàn bộ quá trình:

* Tắt swap cũ
* Tạo swap mới
* Format swap
* Bật swap mới
* Cập nhật `/etc/fstab`
* Xóa swap cũ

***

### Tạo file script

```
nano move_swap.sh
```

Dán nội dung sau:

```
#!/bin/bash

set -e

OLD_SWAP="/swap.img"
NEW_SWAP="/mnt/e02/uenv/swapfile"
SWAP_SIZE="8G"

echo "=== Bat dau chuyen swap ==="

echo "1. Tat swap cu..."
sudo swapoff $OLD_SWAP || true

echo "2. Tao swap moi tai $NEW_SWAP ..."
sudo mkdir -p /mnt/e02/uenv

sudo fallocate -l $SWAP_SIZE $NEW_SWAP || \
sudo dd if=/dev/zero of=$NEW_SWAP bs=1M count=8192

echo "3. Set permission..."
sudo chmod 600 $NEW_SWAP

echo "4. Format swap..."
sudo mkswap $NEW_SWAP

echo "5. Bat swap moi..."
sudo swapon $NEW_SWAP

echo "6. Cap nhat /etc/fstab..."

sudo sed -i '\|/swap.img|d' /etc/fstab

if ! grep -q "$NEW_SWAP" /etc/fstab; then
    echo "$NEW_SWAP none swap sw 0 0" | sudo tee -a /etc/fstab
fi

echo "7. Xoa swap cu..."
if [ -f "$OLD_SWAP" ]; then
    sudo rm -f $OLD_SWAP
fi

echo "=== Hoan tat ==="
echo "Kiem tra swap:"

swapon --show
free -h
```

***

## 3. Cấp quyền chạy script

```
chmod +x move_swap.sh
```

***

## 4. Chạy script

```
./move_swap.sh
```

Sau khi chạy xong, swap sẽ được chuyển sang:

```
/mnt/e02/uenv/swapfile
```

***

## 5. Kiểm tra kết quả

```
swapon --show
```

Ví dụ kết quả:

```
NAME                      TYPE SIZE USED PRIO
/mnt/e02/uenv/swapfile    file 8G   0B   -2
```

Kiểm tra RAM và swap:

```
free -h
```

***

## 6. Tối ưu hệ thống (khuyến nghị)

Giảm việc Linux dùng swap quá nhiều:

```
sudo sysctl vm.swappiness=10
```

Lưu cấu hình vĩnh viễn:

```
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
```

***

## 7. Một số lưu ý

#### Không nên dùng `mv /swap.img`

Vì swap đang được hệ thống sử dụng.

#### SSD vs HDD

* SSD → swap hoạt động tốt
* HDD → swap sẽ chậm

#### Dung lượng swap gợi ý

| RAM   | Swap khuyến nghị |
| ----- | ---------------- |
| 4GB   | 4-8GB            |
| 8GB   | 8-16GB           |
| 16GB  | 8GB              |
| 32GB+ | 4-8GB            |

***

## 8. Kiểm tra sau khi reboot

Sau khi reboot máy:

```
swapon --show
```

Nếu thấy:

```
/mnt/e02/uenv/swapfile
```

→ cấu hình thành công.

***

✅ Bạn có thể lưu bài này thành:

```
README_swap_move.md
```

hoặc

```
docs/linux/move_swap_ubuntu.md
```

***

Nếu bạn muốn, tôi có thể viết thêm **bài nâng cao rất hay**:

* **Auto tạo swap theo RAM (RAM × 1 hoặc RAM × 2)**
* **Script tự phát hiện ổ disk lớn nhất để đặt swap**
* **Tối ưu swap cho server AI / Docker / n8n** (rất hữu ích với máy bạn đang chạy).

{% code title="00\_move\_swap.sh" overflow="wrap" lineNumbers="true" %}

```
#!/bin/bash

set -e

OLD_SWAP="/swap.img"
NEW_SWAP="/mnt/e02/uenv/swapfile"
SWAP_SIZE="8G"

echo "=== Bat dau chuyen swap ==="

echo "1. Tat swap cu..."
sudo swapoff $OLD_SWAP || true

echo "2. Tao swap moi tai $NEW_SWAP ..."
sudo mkdir -p /mnt/e02/uenv

sudo fallocate -l $SWAP_SIZE $NEW_SWAP || \
sudo dd if=/dev/zero of=$NEW_SWAP bs=1M count=8192

echo "3. Set permission..."
sudo chmod 600 $NEW_SWAP

echo "4. Format swap..."
sudo mkswap $NEW_SWAP

echo "5. Bat swap moi..."
sudo swapon $NEW_SWAP

echo "6. Cap nhat /etc/fstab..."

sudo sed -i '\|/swap.img|d' /etc/fstab

if ! grep -q "$NEW_SWAP" /etc/fstab; then
    echo "$NEW_SWAP none swap sw 0 0" | sudo tee -a /etc/fstab
fi

echo "7. Xoa swap cu..."
if [ -f "$OLD_SWAP" ]; then
    sudo rm -f $OLD_SWAP
fi

echo "=== Hoan tat ==="
echo "Kiem tra swap:"

swapon --show
free -h
```

{% endcode %}
