Posts Tagged ‘Linux’

Megaraid CLI (MegaCLI) là công cụ dòng lệnh để quản trị các controller của dòng LSI MegaRaid. MegaCLI có thể quản lý thông tin , giám sát tình trạng về raid, và có thể tạo physical raid.

1. Khái niệm cơ bản

  • Adapter: Physical controller mà chúng ta sử dụng, được biểu diễn bởi ID (luôn là 0)
  • Enclosure: Là các chassis dùng để gắn các ổ vật lý , biểu diễn bởi các id, giống như: 254,252, ..
  • Physical Drives: Ổ cứng vật lý mà gắn vào controller , biểu diễn bởi các id 0, 1, 2, ..
  • Virtual Drives: Những ổ này gồm tập các ổ cứng vật lý và chính bằng ổ Raid, được biểu diễn bằng id: 0, 1, 2, ..

Ví dụ: Chúng ta có RAID 0 với 3 ổ cứng vật lý, khi đó chúng ta sẽ có thông tin:

  • Physical Drives id: 0, 1, 2

  • Virtual Drive id: 0

Virtual Drive gồm tập các ổ cứng vật lý và gồm các thiết lập raid như: cấp độ raid, strip size, ..

2. Download và cài đặt MegaCLI

Download tại: https://www.broadcom.com/site-search?q=megacli

Chọn bản cài RPM cho linux at: https://docs.broadcom.com/docs/12351586

Chúng ta có thể chọn cài lastest MegaCLI version 8.07.14, vì thực ra các phiên bản MegaCLI có thể cùng dùng trên các raid controller khác nhau.

cd /opt
wget https://docs.broadcom.com/docs-and-downloads/raid-controllers/raid-controllers-common-files/8-07-14_MegaCLI.zip
unzip 8-07-14_MegaCLI.zip
cd /opt/Linux
rpm -ivh MegaCli-8.07.14-1.noarch.rpm
cp /opt/MegaRAID/MegaCli/MegaCli64 /usr/local/sbin/megacli

Nếu server là Ubuntu ta có thể sử dụng công cụ alien/rpm2cpio để đổi gói RPM sang deb

cd /opt
wget https://docs.broadcom.com/docs-and-downloads/raid-controllers/raid-controllers-common-files/8-07-14_MegaCLI.zip
unzip 8-07-14_MegaCLI.zip
cd /opt/Linux
apt-get -y install alien
alien MegaCli-8.07.14-1.noarch.rpm
dpkg -i megacli_8.07.14-2_all.deb
cp /opt/MegaRAID/MegaCli/MegaCli64 /usr/local/sbin/megacli

3. Sử dụng MegaCLI

Đầu tiên kiểm tra xem server có gắn Raid Controllers, nếu không có thì không có thông tin gì về raid ở đây cả

lspci | grep -i raid

raid controller

– Thông tin về Physical Disk

[root@localhost Linux MegaCLI 8.07.10]# megacli -PDList -aALL |more
Adapter #0
Enclosure Device ID: 64
Slot Number: 0
Drive's position: DiskGroup: 0, Span: 0, Arm: 0
Enclosure position: N/A
Device Id: 26
WWN: 5000C50063771740
Sequence Number: 2
Media Error Count: 0
Other Error Count: 0
Predictive Failure Count: 0
Last Predictive Failure Event Seq Number: 0
PD Type: SAS

Raw Size: 931.512 GB [0x74706db0 Sectors]
Non Coerced Size: 931.012 GB [0x74606db0 Sectors]
Coerced Size: 930.390 GB [0x744c8000 Sectors]
Sector Size:  0
Firmware state: Online, Spun Up
Device Firmware Level: BD2K
Shield Counter: 0
Successful diagnostics completion on :  N/A
SAS Address(0): 0x5000c50063771741
SAS Address(1): 0x0
Connected Port Number: 4(path0) 
…

Ta có thể lọc để lấy thông tin về kiểu ổ cứng là SSD hay HDD, tốc độ, Size, ..
ví dụ:

[root@localhost Linux MegaCLI 8.07.10]# megacli -PDList -aALL |grep -i Inquiry
Inquiry Data: IBM-ESXSST91000640SS    BD2K9XG8E0201204BD33    
Inquiry Data: IBM-ESXSST91000640SS    BD2H9XG68NBH1119BD31    
Inquiry Data: IBM-ESXSST91000640SS    BD2K9XG8E0XV1204BD33    
Inquiry Data: IBM-ESXSST91000640SS    BD2K9XG8ERDF1204BD33    
Inquiry Data: IBM-ESXSST91000640SS    BD2C9XG3DR9E0806BD2C
[root@localhost Linux MegaCLI 8.07.10]# megacli -PDList -aALL |grep -i 'PD Type'
PD Type: SAS
PD Type: SAS
PD Type: SAS
PD Type: SAS
PD Type: SAS
[root@localhost Linux MegaCLI 8.07.10]# megacli -PDList -aALL |grep -i 'Device Speed'
Device Speed: 6.0Gb/s 
Device Speed: 6.0Gb/s 
Device Speed: 6.0Gb/s 
Device Speed: 6.0Gb/s 
Device Speed: 6.0Gb/s
[root@localhost Linux MegaCLI 8.07.10]# megacli -PDList -aALL |grep -i 'Media Type'
Media Type: Hard Disk Device
Media Type: Hard Disk Device
Media Type: Hard Disk Device
Media Type: Hard Disk Device
Media Type: Hard Disk Device

Một số thông tin xuất như sau:

Inquiry Data: loại disk đang dùng là IBM

PD Type: Loại giao tiếp của disk là SAS

Device Speed: tốc độ của disk là 6Gb/s

Media Type: Loại disk hiện tại là HDD

– Thông tin về Virtual Drive

[root@localhost Linux MegaCLI 8.07.10]# megacli -LDInfo -Lall -aALL
Adapter 0 -- Virtual Drive Information:
Virtual Drive: 0 (Target Id: 0)
Name :
RAID Level : Primary-1, Secondary-0, RAID Level Qualifier-0
Size : 1.816 TB
Sector Size : 512
Mirror Data : 1.816 TB
State : Optimal
Strip Size : 64 KB
Number Of Drives per span:2
Span Depth : 2
Default Cache Policy: WriteThrough, ReadAheadNone, Direct, No Write Cache if Bad BBU
Current Cache Policy: WriteThrough, ReadAheadNone, Direct, No Write Cache if Bad BBU
Default Access Policy: Read/Write
Current Access Policy: Read/Write
Disk Cache Policy : Disabled
Encryption Type : None
Is VD Cached: No

Ở đây, xuất thông tin chỉ có 01 virtual drive, có ID là 0. Với thông tin cấp độ raid là “Primary-1, Secondary-0, RAID Level Qualifier-0” và dựa vào số lượng “Number Of Drives per span” ta xác định được đang sử dụng RAID10

– Thông tin về raid adapter

[root@localhost Linux MegaCLI 8.07.10]# megacli -AdpAllInfo -aALL 
Adapter #0
==============================================================================
Versions
================
Product Name : ServeRAID M1015 SAS/SATA Controller
Serial No : SP04619535
FW Package Build: 20.5.1-0014

Mfg. Data
================
Mfg. Date : 12/08/10
Rework Date : 00/00/00
Revision No :
Battery FRU : N/A

Image Versions in Flash:
================
BIOS Version : 4.15.00_4.08.04.00_0x0416A000
Preboot CLI Version: 03.02-001:#%00008
WebBIOS Version : 4.0-36-e_24-Rel
NVDATA Version : 3.04.03-0005
FW Version : 2.70.74-1038
Boot Block Version : 2.01.00.00-0019
…

Ở đây, chúng ta lọc ra một số thông tin cần để ý như:

RAID Level Supported : RAID0, RAID1, RAID00, RAID10, PRL 11, PRL 11 with spanning, SRL 3 supported, PRL11-RLQ0 DDF layout with no span, PRL11-RLQ0 DDF layout with span

Supported Drives : SAS, SATA

Thao khảo thêm về cách sử dụng megacli tại: https://raid.wiki.kernel.org/index.php/Hardware_Raid_Setup_using_MegaCli

 

Chúng ta vẫn thường sử dụng tiện ích rsync cho đồng bộ cây thư mục trong cùng máy hoặc giữa 2 máy.

Rsync nhẹ, cho tốc độ đồng bộ nhanh, nhưng nó chưa tích hợp tính năng đồng bộ Live, tức là mọi thay đổi chưa được đồng bộ ngay tức thì như một số ứng dụng lưu trữ đám mây phổ biển hiện nay như: Dropbox, Owncloud, …). Rsync cũng chưa cấu hình được để đồng bộ 2 chiều trong trường hợp cần Load Balancing. Một điểm nữa là để đồng bộ tự động thì cần đặt lịch cho Rsync. Trên Linux, cronjob chỉ đặt lịch đồng bộ tối thiểu 1 phút (có thể hack để đặt lịch ở mức thấp hơn :D)

Để giải quyết cho bài toán đồng bộ Live và 2 chiều cho Load Balancing, chúng ta có thể sử dụng đến Lsyncd.

Lsyncd là một daemon, sử dụng tiện ích rsync, kết hợp với SSH để giải quyết những hạn chế nêu trên của rsync. Lsyncd nhẹ, cài đặt và cấu hình đơn giản.

Trong phạm vi bài viết tôi sẽ sử dụng Lsyncd để đồng bộ dữ liệu giữa 2 CentOS 7 servers

sync data with lsyncd

Yêu cầu: Cài đặt SSH Keys 2 chiều cho Server01 và Server02, tham khảo bài viết:  https://vnsys.wordpress.com/2016/12/10/ssh-keys-2-chieu-tren-servers/

1. Install lsyncd and required packages

Cài đặt lsyncd trên cả 2 servers

rpm -ivh http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install lsyncd rsync

2. Config lsync on both servers

2.1 Cấu hình Lsyncd trên server01

Sửa đổi nội dung tệp tin cấu hình “/etc/lsyncd.conf” với nội dung sau:

 ----
 -- User configuration file for lsyncd.
 --
 -- Simple example for default rsync, but executing moves through on the target.
 --
 -- For more examples, see /usr/share/doc/lsyncd*/examples/
 --
 -- sync{default.rsyncssh, source="/var/www/html", host="localhost", targetdir="/tmp/htmlcopy/"}

settings {
 logfile = "/var/log/lsyncd.log", -- Sets the log file
 statusFile = "/var/log/lsyncd-status.log" -- Sets the status log file
 }
 sync{
 default.rsyncssh, -- uses the rsyncssh defaults Take a look here: https://github.com/axkibe/lsyncd/blob/master/default-rsyncssh.lua
 delete = true, -- Doesn't delete files on the remote host eventho they're deleted at the source. This might be beneficial for some not for others
 source="/var/www/example/", -- Your source directory to watch
 host="192.168.1.51", -- The remote host (use hostname or IP)
 exclude={"/storage"}, -- To exclude file & folder (not sync)
 targetdir="/var/www/example/", -- the target dir on remote host, keep in mind this is absolute path
 rsync = {
 archive = true, -- use the archive flag in rsync
 perms = true, -- Keep the permissions
 owner = true, -- Keep the owner
 _extra = {"-a"}, -- Sometimes permissions and owners isn't copied correctly so the _extra can be used for any flag in rsync
 },
 delay = 5, -- We want to delay the syncing for 5 seconds so we queue up the events
 maxProcesses = 1, -- We only want to use a maximum of 4 rsync processes at same time
 ssh = {
 port = 1122 -- This section allows configuration for ssh specific stuff such as a different port
 }
 }

2.2 Cấu hình Lsyncd trên server02

Sửa đổi nội dung tệp tin cấu hình “/etc/lsyncd.conf” với nội dung sau:

----
 -- User configuration file for lsyncd.
 --
 -- Simple example for default rsync, but executing moves through on the target.
 --
 -- For more examples, see /usr/share/doc/lsyncd*/examples/
 --
 -- sync{default.rsyncssh, source="/var/www/html", host="localhost", targetdir="/tmp/htmlcopy/"}

settings {
 logfile = "/var/log/lsyncd.log", -- Sets the log file
 statusFile = "/var/log/lsyncd-status.log" -- Sets the status log file
 }
 sync{
 default.rsyncssh, -- uses the rsyncssh defaults Take a look here: https://github.com/axkibe/lsyncd/blob/master/default-rsyncssh.lua
 delete = true, -- Doesn't delete files on the remote host eventho they're deleted at the source. This might be beneficial for some not for others
 source="/var/www/example/", -- Your source directory to watch
 host="192.168.1.50", -- The remote host (use hostname or IP)
 exclude={"/storage"},
 targetdir="/var/www/example/", -- the target dir on remote host, keep in mind this is absolute path
 rsync = {
 archive = true, -- use the archive flag in rsync
 perms = true, -- Keep the permissions
 owner = true, -- Keep the owner
 _extra = {"-a"}, -- Sometimes permissions and owners isn't copied correctly so the _extra can be used for any flag in rsync
 },
 delay = 5, -- We want to delay the syncing for 5 seconds so we queue up the events
 maxProcesses = 1, -- We only want to use a maximum of 4 rsync processes at same time
 ssh = {
 port = 1122 -- This section allows configuration for ssh specific stuff such as a different port
 }
 }

3. Restart and check log lsyncd on both servers

Start lsyncd trên 2 servers và tạo hoặc xóa tệp tin, thư mục trong đường dẫn đồng bộ /var/www/example để kiểm tra

systemctl start lsyncd
tail -f /var/log/lsyncd.log

lsyncd for syncing data

Tăng dung lượng của ổ cứng định dạng Linux LVM

Posted: Tháng Mười Một 10, 2017 in Linux
Thẻ:

LVM là gì?

LVM – Logical Volume Manager là loại partition mà có thể sử dụng để quản lý nhiều volumes physical và cấu hình mirror & stripe các logical volume để tăng khả năng dự phòng dữ liệu, cũng như tăng hiệu năng xử lý.

Với kiểu partition LVM, chúng ta có thể tạo một logical volume mà ở trên nhiều physical disks. Vì vậy mà khả năng quản lý và mở rộng dung lượng đĩa dễ dàng hơn mà không cần cài đặt lại OS, ứng dụng, dữ liệu, ..

  • Mở rộng được dung lượng chưa phân vùng từ cùng disk
  • Mở rộng được dung lượng từ disk mới khác

Dưới đây là các bước đơn giản để mở rộng dung lượng:

Step1: Xác định loại partition
– Bước này để xác định chúng ta có đang sử dụng định dạng Linux LVM. Nếu không thì không đi tiếp nữa nhé (dùng phương pháp khác)

[root@localhost ~]# fdisk -l

Disk /dev/sda: 42.9 GB, 42949672960 bytes, 83886080 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: 0x000af2db

Device Boot Start End Blocks Id System
/dev/sda1 * 2048 1026047 512000 83 Linux
/dev/sda2 1026048 83886079 41430016 8e Linux LVM

Disk /dev/sdb: 11.3 GB, 11340513280 bytes, 22149440 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 /dev/mapper/cl-root: 38.2 GB, 38226886656 bytes, 74661888 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 /dev/mapper/cl-swap: 4194 MB, 4194304000 bytes, 8192000 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

–> Chúng ta thấy hệ thống có có 2 hard disk (sda, sdb). Với Disk /sda đã tạo 2 các partition. Partition /dev/sda2 được định dạng Linux LVM và có ID là 8e
(8e là mã hex của Linux LVM, còn 83 là mã hex của Linux native partition)
Disk /sdb hiện chưa được partition.

[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/cl-root 35G 2.1G 32G 7% /
devtmpfs 1.4G 0 1.4G 0% /dev
tmpfs 1.4G 0 1.4G 0% /dev/shm
tmpfs 1.4G 8.4M 1.4G 1% /run
tmpfs 1.4G 0 1.4G 0% /sys/fs/cgroup
/dev/sda1 497M 180M 317M 37% /boot
tmpfs 285M 0 285M 0% /run/user/0

hoặc

[root@localhost ~]# df -T
Filesystem Type 1K-blocks Used Available Use% Mounted on
/dev/mapper/cl-root ext4 36613624 2107448 32623248 7% /
devtmpfs devtmpfs 1446684 0 1446684 0% /dev
tmpfs tmpfs 1457876 0 1457876 0% /dev/shm
tmpfs tmpfs 1457876 8540 1449336 1% /run
tmpfs tmpfs 1457876 0 1457876 0% /sys/fs/cgroup
/dev/sda1 xfs 508580 184216 324364 37% /boot
tmpfs tmpfs 291576 0 291576 0% /run/user/0

–> Ở trên show ra rằng hiện tại có 35GB dung lượng đĩa với tên logic volume là: /dev/mapper/cl-root
Note: /dev/mapper/cl-root đang được mount đến /dev/sda2 (có dung lượng hiện tại là: 35GB)

Step2: Tạo partition trong không gian trống
Hiện tại disk /dev/sda đã được phân vùng hết. Còn disk 2 /dev/sdb chưa sử dụng.
Vậy ta sẽ phân vùng disk 2 /dev/sdb với định dạng LVM (Logical Volume Manager)

[root@localhost ~]# fdisk /dev/sdb

Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0xb83854cd.

#Đánh lệnh m để list lệnh fdisk
Command (m for help): m
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
g create a new empty GPT partition table
G create an IRIX (SGI) partition table
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partition’s system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)
#Đánh n để tạo phân vùng mới (logical volume). ở đây ta tạo partition chính và partition number là 1
Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
Partition number (1-4, default 1):
First sector (2048-22149439, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-22149439, default 22149439):
Using default value 22149439
Partition 1 of type Linux and of size 10.6 GiB is set

#Đánh t để thay đổi ID Partition system, ở đây là 8e (ta có thể sử dụng lệnh L để list code hex)
Command (m for help): t
Selected partition 1
Hex code (type L to list all codes): 8e
Changed type of partition ‘Linux’ to ‘Linux LVM’

#Đánh w để lưu lại các giá trị thay đổi
Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

#Xem lại bảng phân vùng

[root@localhost ~]# fdisk -l

Disk /dev/sda: 42.9 GB, 42949672960 bytes, 83886080 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: 0x000af2db

Device Boot Start End Blocks Id System
/dev/sda1 * 2048 1026047 512000 83 Linux
/dev/sda2 1026048 83886079 41430016 8e Linux LVM

Disk /dev/sdb: 11.3 GB, 11340513280 bytes, 22149440 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: 0xd41963fe

Device Boot Start End Blocks Id System
/dev/sdb1 2048 22149439 11073696 8e Linux LVM

Disk /dev/mapper/cl-root: 38.2 GB, 38226886656 bytes, 74661888 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 /dev/mapper/cl-swap: 4194 MB, 4194304000 bytes, 8192000 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

Như vậy partition /dev/sdb1 đã được tạo trên disk 2 /dev/sdb với định dạng Linux LVM, với dung lượng full disk.
Hiện tại không gian partition /dev/sdb1 chưa được cấp phát (unallocated)
(Note: Có thể khởi động lại để có hiệu lực)

Step3: Tạo mới Physical Volume
Trước khi tạo logical volume, sử dụng lệnh “pvcreate” để tạo physical volume. Trong trường hợp này partition /dev/sdb1 sẽ dùng để tạo cho physical volume mới.

[root@localhost ~]# pvcreate /dev/sdb1
 Physical volume "/dev/sdb1" successfully created.

Step4: Mở rộng “Volume Group”
– Xác nhận tên của “volume group” hiện tại, sử dụng lệnh “vgdisplay”

[root@localhost ~]# vgdisplay
 --- Volume group ---
 VG Name cl
 System ID
 Format lvm2
 Metadata Areas 1
 Metadata Sequence No 3
 VG Access read/write
 VG Status resizable
 MAX LV 0
 Cur LV 2
 Open LV 2
 Max PV 0
 Cur PV 1
 Act PV 1
 VG Size <39.51 GiB
 PE Size 4.00 MiB
 Total PE 10114
 Alloc PE / Size 10114 / <39.51 GiB
 Free PE / Size 0 / 0
 VG UUID oudByS-30If-gxFA-Mea8-pMRm-a1Nh-046FYF

Lệnh trên show cho ta thấy tên Volume Group (VG name) là: cl (“CL” là tên volume group mà tôi đã tạo đầu tiên trong khi cài OS)

  • Bây giờ chúng ta mở rộng (extend) “CL volume group” bởi thêm physical volume /dev/sdb1 bằng lệnh “vgextend”
    (Chỗ nào gọi là mở rộng “physical volume”)
[root@localhost ~]# vgextend cl /dev/sdb1
 Volume group "cl" successfully extended
  • Sử dụng lệnh “pvscan” để scan tất cả disk cho physical volume
[root@localhost ~]# pvscan
 PV /dev/sda2 VG cl lvm2 [<39.51 GiB / 0 free]
 PV /dev/sdb1 VG cl lvm2 [<10.56 GiB / <10.56 GiB free]
 Total: 2 [<50.07 GiB] / in use: 2 [<50.07 GiB] / in no VG: 0 [0 ]

-> Show ra 02 physical volume: /dev/sda2 và /dev/sdb1

Step5: Tăng “logical volume”
Đầu tiên xác nhận đường dẫn logical volume bởi sử dụng lệnh: “lvdisplay”

[root@localhost ~]# lvdisplay
 --- Logical volume ---
 LV Path /dev/cl/swap
 LV Name swap
 VG Name cl
 LV UUID wMaSHz-YT0a-VgEe-npGs-WS9U-lo9R-w6TZwo
 LV Write Access read/write
 LV Creation host, time localhost.localdomain, 2017-10-22 23:27:17 +0700
 LV Status available
 # open 2
 LV Size <3.91 GiB
 Current LE 1000
 Segments 1
 Allocation inherit
 Read ahead sectors auto
 - currently set to 8192
 Block device 253:1

--- Logical volume ---
 LV Path /dev/cl/root
 LV Name root
 VG Name cl
 LV UUID Jutw0v-TDlQ-RsNk-Lpy8-Diwp-5yie-kCYK8Z
 LV Write Access read/write
 LV Creation host, time localhost.localdomain, 2017-10-22 23:27:17 +0700
 LV Status available
 # open 1
 LV Size 35.60 GiB
 Current LE 9114
 Segments 1
 Allocation inherit
 Read ahead sectors auto
 - currently set to 8192
 Block device 253:0

Chúng ta để ý ở chỗ ” Logical Volume”: LV Path /dev/cl/root –> Đây chính là đường dẫn mà chúng ta sẽ mount để mở rộng logical volume.

  • Sử dụng lvextend để mở rộng logical volume (Ở đây ta mở rộng nó đến /dev/sdb1)
[root@localhost ~]# lvextend /dev/cl/root /dev/sdb1
 Size of logical volume cl/root changed from 35.60 GiB (9114 extents) to 46.16 GiB (11817 extents).
 Logical volume cl/root successfully resized.

Step 6: Resize kích thước file system
Trước khi có thể sử dụng được phần mở rộng, cần resize file system của nó trước.

Đối với hệ thống file EXT ở đây ta sử dụng “resize2fs”
Ví dụ: resize2fs – ext2/ext3/ext4

[root@localhost ~]# resize2fs /dev/cl/root
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/cl/root is mounted on /; on-line resizing required
old_desc_blocks = 5, new_desc_blocks = 6
The filesystem on /dev/cl/root is now 12100608 blocks long.

Như vậy disk được bổ sung thêm 12100608 blocks
Kiểm tra dung lượng disk tăng lên thế nào:

[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/cl-root 46G 2.1G 42G 5% /
devtmpfs 1.4G 0 1.4G 0% /dev
tmpfs 1.4G 0 1.4G 0% /dev/shm
tmpfs 1.4G 8.4M 1.4G 1% /run
tmpfs 1.4G 0 1.4G 0% /sys/fs/cgroup
/dev/sda1 497M 180M 317M 37% /boot
tmpfs 285M 0 285M 0% /run/user/0

NOTE: Với file system định dạng XFS ta sẽ sử dụng lệnh: xfs_growfs

Như trong trường hợp dưới đây thì hệ thống file đang sử dụng là: XFS
#df -T
Filesystem Type 1K-blocks Used Available Use% Mounted on
/dev/mapper/cl-root xfs 36805060 4418084 32386976 13% /
devtmpfs devtmpfs 1921764 0 1921764 0% /dev
tmpfs tmpfs 1932776 0 1932776 0% /dev/shm
tmpfs tmpfs 1932776 8776 1924000 1% /run
tmpfs tmpfs 1932776 0 1932776 0% /sys/fs/cgroup
/dev/sda1 xfs 1038336 141732 896604 14% /boot
tmpfs tmpfs 386556 0 386556 0% /run/user/0

Tổng kết: Gói gọn trong mấy bước thôi
1. Cho disk mới vào (cái này có thể là không gian chưa được partition của disk cũ)
2. Cho nó vào physical volume
3. Mở rộng Volume Group
4. Mở rộng Logical Volume
5. Định dạng file system của phần mở rộng

—————The End—————————

 

SSH keys 2 chiều trên servers

Posted: Tháng Mười Hai 10, 2016 in Linux
Thẻ:,

Việc tạo key SSH giúp người dùng tiện lợi hơn trong quá trình quản trị server, không cần phải nhập và không sợ nguy cơ lộ mật khẩu.

Thường người dùng sử dụng máy tính (client) truy cập lên server qua ssh key, đấy chứng thực khóa 1 chiều như trong bài viết trước:  Chứng thực với SSH Key

Trong trường hợp cần đồng bộ dữ liệu qua lại giữa các server, như trường hợp schedule to sync tệp tin, thư mục thì chúng ta cần tạo chứng thực ssh key 2 chiều.

ssh keys 2 directions

Server01: 192.168.1.50; Server02: 192.168.1.51

1. Cài đặt và cấu hình trên Server01

Step1: Tạo cặp khóa

Chúng ta sẽ tạo cặp khóa với mã hóa RSA

ssh-keygen -t rsa

Generating public/private rsa key pair.

Enter file in which to save the key (/root/.ssh/id_rsa):

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

Your identification has been saved in /root/.ssh/id_rsa.

Your public key has been saved in /root/.ssh/id_rsa.pub.

The key fingerprint is:

SHA256:mYcYmZKmiBAfIGvqJ2/B1d9YL6OlSkBXc1ByOpeCzBk root@server01

The key’s randomart image is:

+—[RSA 2048]—-+

|+.. E =o+ |

+—-[SHA256]—–+

Step2: Copy Public key sang server02

Ta sẽ copy tệp tin id_rsa.pub từ server01 sang server02.

Sử dụng lệnh ssh-copy-id ta đồng thời copy nội dung và tạo tệp tin /root/.ssh/authorized_keys trên server02

ssh-copy-id -i id_rsa.pub 192.168.1.51

/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: “id_rsa.pub”

The authenticity of host ‘192.168.1.51 (192.168.1.51)’ can’t be established.

Are you sure you want to continue connecting (yes/no)? yes

/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed

/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed — if you are prompted now it is to install the new keys

root@192.168.1.51’s password:

Number of key(s) added: 1

Now try logging into the machine, with: “ssh ‘192.168.1.51’”

2. Cài đặt và cấu hình trên Server01

Ta thực hiện các bước tương tự như Server01

Step1: Tạo cặp khóa với mã hóa RSA

[root@server02]# ssh-keygen -t rsa

Generating public/private rsa key pair.

Enter file in which to save the key (/root/.ssh/id_rsa):

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

Your identification has been saved in /root/.ssh/id_rsa.

Your public key has been saved in /root/.ssh/id_rsa.pub.

The key fingerprint is:

SHA256:CvsQKpKxBqU5ICg24QsZA1FbSrd3S5/3nHFYyalHmHw root@mongo02

The key’s randomart image is:

+—[RSA 2048]—-+

+—-[SHA256]—–+

Step2: Chuyển public key sang Server01

[root@server02]# ssh-copy-id -i id_rsa.pub 192.168.1.50

/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: “id_rsa.pub”

The authenticity of host ‘192.168.1.50 (192.168.1.50)’ can’t be established.

Are you sure you want to continue connecting (yes/no)? yes

/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed

/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed — if you are prompted now it is to install the new keys

root@192.168.1.50’s password:

Number of key(s) added: 1

Now try logging into the machine, with: “ssh ‘192.168.1.50’”

and check to make sure that only the key(s) you wanted were added.

3. Kiểm tra truy cập SSH Keys

#Access SSH from server01 to server02
ssh root@192.168.1.51
#Access SSH from server02 to server01
ssh root@192.168.1.50

Bây giờ khi truy cập qua lại giữa 2 servers thông qua ssh sẽ không yêu cầu hỏi mật khẩu

Giám sát và xử lý sự cố hệ thống Linux

Posted: Tháng Mười 28, 2016 in Linux
Thẻ:

Có rất nhiều công cụ để quản trị hệ thống Linux nhưng trong một đống công cụ đấy, chúng ta cần chọn ra một số công cụ cần thiết, làm việc thực sự hiệu quả. Dưới đây là một số công cụ cần thiết để giám sát hiệu suất, thống kê tình trạng CPU, RAM, HDD, … của máy chủ Linux, từ đó đưa giải pháp khắc phục sự cố hệ thống

1. TOP – Công cụ giám sát tiến trình

top là công cụ hiển thị thông tin theo thời gian thực về CPU, Mem, … mà gần như người dùng nào Linux cũng biết (giống với Task Manager bên Windows).

Sử dụng một số “Hot key”

Trong khi lệnh top đang chạy

– Nhấn phím “F” để hiện thị các trường sắp xếp (mặc định sắp xếp với CPU). Di chuyển đến trường cần thiết lập và nhấn phím “s” để lựa chọn sắp xếp

Chúng ta có thể sử dụng tổ hợp phím tắt cho thao tác nhanh hơn. Ví dụ: Shift + M (sắp xếp theo thứ tự memory), Shift + P ( sắp xếp theo thứ tự CPU).

  • Nhấn phím số “1” để hiển thị thống kê hoạt động của tất cả các lõi CPU

– Nhấn phím “c” để hiển thị đường dẫn tiến trình đang chạy

top processes monitor

top – processes monitor

2. HTOP – Công cụ giám sát tiến trình

htop cũng là công cụ giám sát tiến trình thời gian thực giống như top, nhưng htop giao diện thân thiện với người dùng hơn, sử dụng các phím tắt (như F3, F4, F6) cho phép “search, filter, sort” dễ dàng hơn. Với htop chúng ta có thể lọc ra chương trình nào đang sử dụng cpu, memory nhiều nhất một cách dễ dàng.

htop công cụ bên thứ 3, vì vậy cần cài đặt gói htop trước khi sử dụng.

Nếu đang sử dụng Ubuntu thì có thể sử dụng: sudo apt-get instatll htop

filter chuỗi lệnh có string là ‘top’

htop with filter

Sort %memory sử dụng từ cao đến thấp

htop with sort

3.  PS – Display active processes

Lệnh ps hiển thị thông tin về các tiến trình đang hoạt động trên hệ thống.

Xem mọi tiến trình trong cú pháp chuẩn:

ps -ef

Xem mọi tiến trình trong cú pháp BSD:

ps -aux

Kết hợp với pipe(|) ta có thể sử dụng để lọc ra một số giá trị cần xuất.

In ra 5 process hoạt động chiếm nhiều RAM nhất (thứ tự cột in là memory, cpu, pid, user, tty, args)

ps -e -o pmem,pcpu,pid,user,args |sort -nrk 1 |head -5

ps -ef sort memory

Tương tự như trên, ta có thể tìm ra được process nào đang chiếm nhiều CPU nhất, …

4. IOTOP – Giám sát I/O disk

IOTOP được sử dụng để giám sát i/o cho disk theo thời gian thực.

Cài đặt trên Ubuntu: sudo apt-get install iotop

Sử dụng phím điều khiển trái hoặc phải để sắp xếp

iotop

5. IOSTAT – Thống kê I/O

iostat được sử dụng để thống kê CPU và I/O cho các thiết bị và phân vùng.

iostat, sar là các công cụ nằm trong gói sysstat. Cài đặt gói sysstat trên Ubuntu: sudo apt-get install sysstat

Thống kê mở rộng với mỗi 2s:

#iostat -x 2

iostat

6. NMON – Phân tích và giám sát

nmon là công cụ khá toàn diện được sử dụng để hiển thị thông tin về tài nguyên máy, CPU, memory, network, disk, file system, …

Cài đặt gói nmon để sử dụng: sudo apt-get install nmon

nmon

7. VMSTAT – Thống kê bộ nhớ ảo

vmstat dùng để xuất thông tin về: processes, memory, paging, block IO, traps, disks & hoạt động cpu.

vmstat có thể giúp chúng ta xác định được bottleneck hệ thống.

Bảng thông tin ý nghĩa các cột

Tham số

Ý nghĩa

Process

r

The number of runnable processes (running or waiting for run time)

b

The number of runnable processes (running or waiting for run time)

Memory

swpd

The amount of virtual memory used

free

The amount of idle memory

buff

The amount of memory used as buffers

cache

The amount of memory used as cache

Swap

si

Amount of memory swapped in from disk (/s)

so

Amount of memory swapped to disk (/s)

IO

bi

Blocks received from a block device (blocks/s)

bo

Blocks sent to a block device (blocks/s)

System

in

The number of interrupts per second, including the clock

cs

The number of context switches per second

CPU

us

Time spent running non-kernel code

sy

Time spent running kernel code

id

Time spent idle

wa

Time spent waiting for IO

st

Time stolen from a virtual machine
  • Nếu giá trị b > 0 thì có thể đang có tình trạng thiếu CPU

  • Nếu giá trị si/so của swap mà > 0, có thể liên quan đến vấn đề thiếu memory

  • Nếu giá trị wa của CPU càng cao thì có thể liên quan đến vấn đề về lưu trữ

vmstat

Ở hình trên ta thấy giá trị si/so = 1, vì vậy chúng ta kiểm tra tình trạng memory.

8. Một số công cụ quản lý dung lượng, disk

8.1 fdisk – manipulate disk partition table

fdisk là chương trình để tạo và thao tác trên phân vùng đĩa cứng.

  • Hiển thị các phân vùng
# fdisk -l
Disk /dev/sda: 292.3 GB, 2923x26211584 bytes, 570949632 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: 0x000bf4b4
Device Boot Start End Blocks Id System
/dev/sda1 2048 20482047 10240000 82 Linux swap / Solaris
/dev/sda2 * 20482048 570941439 275229696 83 Linux

8. 2. df – report file system disk space usage

df hiển thị lượng không gian ổ cứng có sẵn trên hệ thống file.

# df -T
Filesystem Type 1K-blocks Used Available Use% Mounted on
/dev/sda2 ext4 270778984 40459820 216541296 16% /
devtmpfs devtmpfs 6048636 0 6048636 0% /dev
tmpfs tmpfs 6063416 88 6063328 1% /dev/shm
tmpfs tmpfs 6063416 33680 6029736 1% /run
tmpfs tmpfs 6063416 0 6063416 0% /sys/fs/cgroup
tmpfs tmpfs 1212684 12 1212672 1% /run/user/1001
tmpfs tmpfs 1212684 0 1212684 0% /run/user/0
//Hiện thị không gian ổ cứng THEO GB
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 259G 39G 207G 16% /
devtmpfs 5,8G 0 5,8G 0% /dev
tmpfs 5,8G 88K 5,8G 1% /dev/shm
tmpfs 5,8G 33M 5,8G 1% /run
tmpfs 5,8G 0 5,8G 0% /sys/fs/cgroup
tmpfs 1,2G 12K 1,2G 1% /run/user/1001
tmpfs 1,2G 0 1,2G 0% /run/user/0

8. 3. du – estimate file space usage

du (disk usage) hiển thị dung lượng (kích thước) của file, thư mục

Hiển thị dung lượng của từng thư mục con trong thư mục /

root@vnhack:/home/keepwalking# du -sh /*
13M /bin
240M /boot
4,0K /cdrom
508K /dev
14M /etc
5,8G /home

9. lsof – list open files

lsof – Liệt kê các tập tin đang mở và các tiến trình mà đang mở tập tin đó. Các tập tin được mở trên hệ thống bao gồm: các thiết bị, thư mục và kết nối mạng

– Liệt kê các tiến trình mà đang mở một tập tin

#lsof /var/log/php5-fpm.log
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
php5-fpm 872 root 2w REG 8,4 434 787208 /var/log/php5-fpm.log
php5-fpm 872 root 5w REG 8,4 434 787208 /var/log/php5-fpm.log

– Chỉ các tiến trình trên toàn thư mục

# lsof +D /var/
VICE SIZE/OFF NODE NAME
cupsd 618 root 6u REG 8,4 872 787175 /var/log/cups/access_log
cupsd 618 root 7u REG 8,4 0 787556 /var/log/cups/error_log
cupsd 618 root 8u REG 8,4 0 788030 /var/log/cups/page_log
rsyslogd 620 syslog 5w REG 8,4 439737 787078 /var/log/syslog
rsyslogd 620 syslog 6w REG 8,4 155855 787294 /var/log/kern.log
rsyslogd 620 syslog 7w REG 8,4 80344 787307 /var/log/auth.log
cron 622 root cwd DIR 8,4 4096 796299 /var/spool/cron

 

– Danh sách các kết nối mạng

# lsof -i

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME

cupsd 618 root 10u IPv6 16598 0t0 TCP ip6-localhost:ipp (LISTEN)

cupsd 618 root 11u IPv4 16599 0t0 TCP localhost:ipp (LISTEN)

avahi-dae 659 avahi 12u IPv4 16580 0t0 UDP *:mdns

avahi-dae 659 avahi 13u IPv6 16581 0t0 UDP *:mdns

cups-brow 716 root 4u IPv6 16637 0t0 TCP ip6-localhost:45364->ip6-localhost:ipp (CLOSE_WAIT)

sshd 742 root 3u IPv4 40766 0t0 TCP *:ssh (LISTEN)

– Kiểm tra cổng xem đang sử dụng với tiến trình nào

(Sử dụng để giải quyết tình huống cài đặt một service mới nhưng cổng đã được sử dụng bởi một services trong hệ thống)

lsof -i:6379

lsof

10. netstat -Thống kê tình trạng mạng

netstat – Hiển thị thông tin về kết nối mạng, bảng định tuyến, … 

netstat cho phép hiển thị cả kết nối internet và domain socket

Một số tham số thường sử dụng kết hợp:

-p, --program: Show the PID and name of the program to which each socket belongs.
-l, --listening: Show only listening sockets. (These are omitted by default.)
-a, --all: Show both listening and non-listening sockets.
-t, --tcp: Show tcp connections
-u, --udp: Show udp connections
-n, --numeric: Show numerical addresses instead of trying to determine symbolic host, port or user names.

– Hiển thị chỉ kết nối internet (gồm tcp,udp)

netstat -ntalpu

– Kiểm tra tất chương trình/service nào đang chạy với cổng tương ứng

Cái này cho ta cái nhìn rõ ràng hơn về các chương trình đang chạy, từ đó xác định chương trình nào sẽ sử dụng để bật/tắt

netstat -ntalput |grep LISTEN

netstat grep listen

– Hiển thị bảng định tuyến

netstat –route

11. Một số tiện ích khác 

Ngoài một số công cụ dòng lệnh trên ta có thể sử dụng một số tiện ích bổ sung cho quản lý và giám sát hệ thống Linux

Một số tiện ích cho giám sát người dùng

Trong môi trường máy chủ với nhiều tài khoản người dùng cùng truy cập hệ thống và mỗi người dùng chạy các ứng dụng khác nhau. Xác định được đối tượng người dùng nào đang hoạt động trên hệ thống, từ đó đảm bảo người dùng login và chạy các processes là hợp pháp, cũng như xác định được đối tượng đang truy cập truy cập không hợp pháp vào hệ thống.

who : Hiển thị những người dùng hiện đang đăng nhập hệ thống

(Có thể sử dụng pinky, finger)

Sử dụng ‘who‘ cho ta biết đối tượng người dùng nào đang login hay đang sử dụng.

who
#người dùng đang logon
who am i
#Người dùng đang sử dụng, kiểu như logon bằng tk keepwalking, nhưng su sang tài khoản root để sử dụng
whoami

W: Lệnh w hiển thị thông tin về users đang login và các công việc users đang thực hiện

command w in linux

Kết hợp với lệnh ps -ef để show danh sách PIDs của người đang login, từ đó kill một số login session.

[keepwalking@vnsys]# ps -ef |grep tty7 |grep -v grep
root 11721 840 0 Th0514 tty1 00:00:00 /sbin
[keepwalking@vnsys]#kill -9 11721

Last: Lệnh last hiển thị danh sách các users đã login sau cùng vào hệ thống. Lệnh lastlog hoạt động dựa vào tìm kiếm thông tin trong tệp tin “/var/log/wtmp” hiển thị danh sách các users đã login vào hệ thống được ghi nhận vào tệp tin wtmp đó.

last command

Lastlog: Lệnh lastlog dựa vào nội dung trong tệp “/var/log/lastlog” để xuất ra thông tin login gần nhất của all users (all user in /etc/password)

Ngoài ra còn có một số tiện ích khác cho hệ thống:

uptime : Hiển thị thời gian hoạt động của hệ thống, số người dùng hiện tại đăng nhập và tốc độ load trung bình của hệ thống trước đó 1,5 và 15 phút