Bài viết này hướng dẫn tạo và kích hoạt phân dùng swap trên hệ điều hành Linux.
1. Giới thiệu swap
Phân vùng swap là một khoảng trống trên một ổ cứng đã được chỉ định là nơi mà hệ điều hành có thể lưu trữ dữ liệu tạm thời khi nó không có thể giữ trong bộ nhớ RAM.
Phân vùng swap được sử dụng khi hệ thống của bạn cần sử dụng bộ nhớ RAM và không có đủ bộ nhớ RAM để sử dụng. Nếu hệ thống cần thêm dung lượng bộ nhớ, các trang không hoạt động trong bộ nhớ RAM sẽ được chuyển sang phân vùng swap nhằm giải phóng bộ nhớ RAM cho các mục đích sử dụng khác.
2. Các bước tạo swap
2.1. Kiểm tra swap
Trước khi tạo swap chúng ta cần phải xem máy chủ của chúng ta đã có sẵn dung lượng swap chưa. Chúng ta có thể có nhiều phân vùng swap. Bằng cách chạy lệnh sau:
[root@localhost ~]# swapon -s
Nếu kết quả trả về không có thông tin nào có nghĩa hệ thống chúng ta chưa có phân vùng swap chúng ta cũng có thể kiểm tra phân vùng swap
với tiện ích free
cho chúng ta thấy mức sử dụng bộ nhớ chung của hệ thống.
root@localhost ~]# free -h
total used free shared buff/cache available
Mem: 976M 140M 424M 6.7M 412M 655M
Swap: 0B 0B 0B
2.2. Kiểm tra dung lượng đĩa
Trước khi tạo swap chúng ta nên biết về việc sử dụng ổ đĩa hiện tại. Bằng cách sử dụng tiện ít df
để kiểm tra:
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/cl-root 17G 1012M 16G 6% /
devtmpfs 478M 0 478M 0% /dev
tmpfs 489M 0 489M 0% /dev/shm
tmpfs 489M 6.8M 482M 2% /run
tmpfs 489M 0 489M 0% /sys/fs/cgroup
/dev/sda1 1014M 139M 876M 14% /boot
tmpfs 98M 0 98M 0% /run/user/0
2.3. Tạo swap
2.3.1. Tạo swap dùng swapfile
Chúng ta sẽ tạo swap 1G, nếu bạn muốn tạo swap với dung lượng khác bạn thay thế 1G bằng kích thước bạn cần.
Thực hiện các bước sau để tạo swap:
👉 Bước 1: Đầu tiên, tạo một file sẽ được sử dụng làm không gian swap. Cách thực hiện để tạo một file swap chúng ta sử dụng lệnh fallocate
. Lệnh này tạo ra một file có kích thước preallocated
. Tạo file 1G bằng cách thực hiện như sau:
[root@localhost ~]# fallocate -l 1G /swapfile
Nếu lệnh fallocate
không có sẵn trên hệ thống hoặc nhận được thông báo lỗi fallocate failed: Operation not supported(không được hổ trợ), bạn hãy sử dụng lệnh sau để tạo file swap:
dd if=/dev/zero of=/swapfile bs=1024 count=1024
Bạn có thể thay đỗi count=1024
bằng giá trị khác để tạo file swap với dung lượng bạn mong muốn.
Sau khi tạo file swap chúng ta cần kiểm tra dung lượng file swap bằng lệnh ls
:
[root@localhost ~]# ls -lh /swapfile
-rw-r--r--. 1 root root 1.0G Apr 11 22:54 /swapfile
👉 Bước 2: Đảm bảo chỉ người dùng root mới có thể đọc và ghi file swap. Thực hiện như sau:
[root@localhost ~]# chmod 600 /swapfile
[root@localhost ~]# ls -lh /swapfile
-rw-------. 1 root root 1.0G Apr 11 22:54 /swapfile
👉 Bước 3: Thiết lập phân vùng swap trên tệp. Sử dụng lệnh sau:
[root@localhost ~]# mkswap /swapfile
Setting up swapspace version 1, size = 1048572 KiB
no label, UUID=6f7be2b3-49c0-4411-80dd-1aca84e09244
👉 Bước 4: Thiết lập swap tự động được kích hoạt mỗi khi reboot
Chúng ta cần thiết lập swap tự động được kích hoạt mỗi khi reboot bằng cách sử dụng trình soạn thảo vi thêm vào file /etc/fstab
. Chúng ta cần phải kích hoạt như sau:
[root@localhost ~]# vi /etc/fstab
#
# /etc/fstab
# Created by anaconda on Thu Apr 11 21:36:46 2019
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/cl-root / xfs defaults 0 0
UUID=8c1d2c4f-13d0-4ec9-ae3d-f706311400ad /boot xfs defaults 0 0
/swapfile swap swap defaults 0 0
👉 Bước 5: File swap của chúng ta đã sẵn sàng để được sử dụng như một phân dùng swap. Chúng ta có thể bắt đầu sử dụng bằng cách sử dụng lệnh sau:
[root@localhost ~]# free -m
total used free shared buff/cache available
Mem: 972 121 710 7 140 689
Swap: 0 0 0
[root@localhost ~]# swapon -a
Sau khi tạo phân vùng swap chúng ta cần phải kiểm tra xem hệ thống của chúng tôi có báo cáo phân vùng swap chưa:
[root@localhost ~]# swapon -s
Filename Type Size Used Priority
/swapfile file 1020 0 -1
[root@localhost ~]# free -m
total used free shared buff/cache available
Mem: 972 120 711 7 140 691
Swap: 1024 0 1024
2.3.2. Tạo swap trên partition
👉 Bước 1: Chúng ta có thể tạo một phân vùng mới /dev/sdb1
với dung lượng 2.9GB. Dùng lệnh fdisk -l
kiểm tra phân dùng chúng ta đã tạo có chưa:
[root@localhost ~]# fdisk -l
Disk /dev/sda: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000acf99
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 41943039 19921920 8e Linux LVM
Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x1025b50f
Device Boot Start End Blocks Id System
/dev/sdb1 2048 6097151 3047552 82 Linux swap / Solaris
👉 Bước 2: Sử dụng lệnh partprobe
để kernel đọc lại phân vùng ổ cứng:
[root@localhost ~]# partprobe /dev/sdb1
Thay thế /dev/sdb1 bằng tên đĩa của bạn.
👉 Bước 3: Thiết lập phân vùng swap trên tệp. Sử dụng lệnh sau:
[root@localhost ~]# mkswap /dev/sdb1
Setting up swapspace version 1, size = 3047548 KiB
no label, UUID=961ec0db-ff53-4f23-8b55-c52f9e48e3d0
👉 Bước 4: Thiết lập swap tự động được kích hoạt mỗi khi reboot
Chúng ta cần thiết lập swap tự động được kích hoạt mỗi khi reboot bằng cách sử dụng trình soạn thảo vi thêm vào file /etc/fstab
. Chúng ta cần phải kích hoạt như sau:
[root@localhost ~]# vi /etc/fstab
#
# /etc/fstab
# Created by anaconda on Thu Apr 11 21:36:46 2019
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/cl-root / xfs defaults 0 0
UUID=8c1d2c4f-13d0-4ec9-ae3d-f706311400ad /boot xfs defaults 0 0
UUID=961ec0db-ff53-4f23-8b55-c52f9e48e3d0 swap swap defaults 0 0
Để lấy UUID của các phân vùng chúng ta thực hiện như sau:
[root@localhost ~]# blkid /dev/sdb1
/dev/sdb1: UUID="961ec0db-ff53-4f23-8b55-c52f9e48e3d0" TYPE="swap"
👉 Bước 5: File swap của chúng ta đã sẵn sàng để được sử dụng như một phân dùng swap. Chúng ta có thể bắt đầu sử dụng bằng cách sử dụng lệnh sau:
[root@localhost ~]# free -m
total used free shared buff/cache available
Mem: 972 121 710 7 140 689
Swap: 0 0 0
[root@localhost ~]# swapon -a
Sau khi tạo phân vùng swap chúng ta cần phải kiểm tra xem hệ thống của chúng tôi có báo cáo phân vùng swap chưa:
[root@localhost ~]# swapon -s
Filename Type Size Used Priority
/swapfile file 4044 0 -2
/dev/sdb1 partition 3047548 0 -3
[root@localhost ~]# free -m
total used free shared buff/cache available
Mem: 972 127 700 7 143 682
Swap: 2980 0 2980
2.4. Cấu hình swappiness
swappiness là một thuộc tính xác định tần suất hệ thống sẽ sử dụng phân vùng swap.
swappiness có thể có giá trị từ 0 đến 100 chúng ta có thể chọn giá trị swappiness sau cho phù hợp nhất đối với chúng ta ý nghĩa các số từ 0 - 10 qua ba ví dụ sau:
- swappiness = 0: swap chỉ được dùng khi RAM được sử dụng hết.
- swappiness = 50: swap được sử dụng khi RAM còn 50%.
- swappiness = 100: swap được uư tiên sử dụng hơn RAM.
Giá trị swappiness mặc định trên CentOS 7 là 30. Chúng ta có thể kiểm tra giá trị trao đổi hiện tại bằng cách nhập lệnh sau:
[root@localhost ~]# cat /proc/sys/vm/swappiness
30
Chúng ta có thể đặt swappiness thành một giá trị khác bằng cách sử dụng lệnh sysctl. Để đặt swappiness thành 20, thực hiện như bên dưới:
[root@localhost ~]# sysctl vm.swappiness=20
vm.swappiness = 20
Để làm giá trị thay đổi này liên tục trên các lần khởi động lại, chúng ta thêm vm.swappiness=20
vào file /etc/sysctl.conf
. Thực hiện như sau:
[root@localhost ~]# vi /etc/sysctl.conf
# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
vm.swappiness=20
3. Xoá phân vùng swap
Sử dụng các bước sau để hủy kích hoạt phân vùng swap.
👉 Bước 1: Huỷ kích hoạt swap chúng ta thực hiện cú pháp sau:
[root@localhost ~]# swapoff /swapfile
👉 Bước 2: Chỉnh sửa file /etc/fstab
xoá dòng /swapfile swap swap defaults 0 0
lúc naả ta vừa nhập:
[root@localhost ~]# vi /etc/fstab
#
# /etc/fstab
# Created by anaconda on Thu Apr 11 21:36:46 2019
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/cl-root / xfs defaults 0 0
UUID=8c1d2c4f-13d0-4ec9-ae3d-f706311400ad /boot xfs defaults 0 0
👉 Bước 3: Xoá file swap như sau:
[root@localhost ~]# rm -rf /swapfile
Thực hiện cách bước trên chúng ta có thể xoá phân vùng swap.
5. Lời kết
Qua bài trên, giúp cho chúng ta biết phân vùng swap có thể lưu trữ dữ liệu tạm thời khi bộ nhớ RAM đã được dùng hết, cách dùng lệnh để kiểm tra, tạo và xoá phân vùng swap trên hệ điều hành Linux.