Skip to the content.

Tìm hiểu quản lý ổ đĩa.

I.Disk Device

1.ATA và SCSI controller

3. Solid state drive

II.Disk device system

1.fdisk.

Device Boot Start End Sectors Size Id Type /dev/sdb1 * 448862208 468860927 19998720 9,5G 82 Linux swap / Solaris /dev/sdb2 2046 448862207 448860162 214G 5 Extended /dev/sdb5 2048 448862207 448860160 214G 83 Linux

Partition table entries are not in disk order.

- `fdisk` cũng được sử dụng để tạo hoặc chỉnh sửa phân vùng.

## 2.dmesg
- Dùng để xem lại kernel boot message sau khi boot. Ổ đĩa cũng được kernel xác định khi boot.

root@m4700:~# dmesg | grep -i “scsi disk” [ 2.891607] sd 0:0:0:0: [sda] Attached SCSI disk [ 2.894217] sd 2:0:0:0: [sdb] Attached SCSI disk


## 3.lshw
- Công cụ `lshw` sẽ **list hardware**. lshw có thể hiển thị rất nhiều thông tin về ổ đĩa và các phân vùng với một số option.
Ví dụ:

root@m4700:~# lshw -class volume | grep -A1 -B2 scsi description: Windows NTFS volume physical id: 1 bus info: scsi@0:0.0.0,1 logical name: /dev/sda1 – description: Windows NTFS volume physical id: 2 bus info: scsi@0:0.0.0,2 logical name: /dev/sda2 – description: Windows NTFS volume physical id: 3 bus info: scsi@0:0.0.0,3 logical name: /dev/sda3 – description: Linux swap volume physical id: 1 bus info: scsi@2:0.0.0,1 logical name: /dev/sdb1 – description: Extended partition physical id: 2 bus info: scsi@2:0.0.0,2 logical name: /dev/sdb2


## 4.lsblk 
- Lệnh lsblk là lệnh dùng để liệt kê các thiết bị block trên hệ thống như ổ cứng, phân vùng,..

root@m4700:~# lsblk -a NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 465,8G 0 disk ├─sda1 8:1 0 579M 0 part ├─sda2 8:2 0 208,4G 0 part └─sda3 8:3 0 256,8G 0 part sdb 8:16 0 223,6G 0 disk ├─sdb1 8:17 0 9,5G 0 part [SWAP] ├─sdb2 8:18 0 1K 0 part └─sdb5 8:21 0 214G 0 part / sr0 11:0 1 1024M 0 rom



## 5.lsscsi
- Là lệnh dùng để liệt kê các thiết bị scsi

root@m4700:~# lsscsi [0:0:0:0] disk ATA WDC WD5000BEVT-6 1A02 /dev/sda [2:0:0:0] disk ATA KingDian M280 24 6A /dev/sdb [3:0:0:0] cd/dvd HL-DT-ST DVD+-RW GS30N A102 /dev/sr0

- Sử dụng option -c để hiển thị classic output .

## 6. /proc/scsi/scsi
Một cách khác để xác định các thiết bị scsi là thông qua /proc/scsi/scsi, nội dung file cũng là output của lệnh `lsscsi -c`

root@m4700:~# cat /proc/scsi/scsi Attached devices: Host: scsi0 Channel: 00 Id: 00 Lun: 00 Vendor: ATA Model: WDC WD5000BEVT-6 Rev: 1A02 Type: Direct-Access ANSI SCSI revision: 05 Host: scsi2 Channel: 00 Id: 00 Lun: 00 Vendor: ATA Model: KingDian M280 24 Rev: 6A
Type: Direct-Access ANSI SCSI revision: 05 Host: scsi3 Channel: 00 Id: 00 Lun: 00 Vendor: HL-DT-ST Model: DVD+-RW GS30N Rev: A102 Type: CD-ROM ANSI SCSI revision: 05

## 7.dd
Câu lệnh `dd` trong linux là một trong những câu lệnh thường xuyên được sử dụng. Câu lệnh dd dùng để sử dụng trong các trường hợp sau:

- Sao lưu và phục hồi toàn bộ dữ liệu ổ cứng hoặc một partition
- Chuyển đổi định dạng dữ liệu từ ASCII sang EBCDIC hoặc ngược lại
- Sao lưu lại MBR trong máy (MBR là một file dữ liệu rất quan trong nó chứa các lệnh để LILO hoặc GRUB nạp hệ điều hanh)
- Chuyển đổi chữ thường sang chữ hoa và ngược lại
- Tạo một file với kích cơ cô định
- Tạo một file ISO

# III. Disk partition 
## 1.Partition là gì? Primary, extended và logical partition.
- Partition được coi là một phần được chia ra một cách logic từ ổ cứng.
- Có 3 loại phân vùng là: primary partiton, extended partition và logical partition.
- **Primary partition** là phân vùng có thể lưu trữ được cả hệ điều hành và những dữ liệu khác. Trên một ổ cứng chỉ có thể tạo tối da 4 phân vùng dạng primary. **Extended partition** là phân vùng mở rộng trên ổ cứng, tối đa chỉ có một phân vùng extended trên một ổ cứng vật lý, nếu trên một ổ cứng có một phân vùng extended thì chỉ có thể tạo tối đa ba phân vùng primary. **Logical partition** là phân vùng ảo được chứa trên extended partition. 
Mỗi phân vùng đều chứa một đoạn mã để có thể biết được hệ điều hành hay filesystem trên phân vùng đó là gì.

|Loại phân vùng| Đặt tên
|-|-|
|Primary (max 4)| 1-4
|Extended (max 1)| 1-4
|Logical |5

## 2.Tên phân vùng.
Tên ổ cứng được đặt theo chữ cái ví dụ:sda, sdb,... còn phân vùng được đặt theo số bắt đầu từ 1. Phân vùng primary được đánh số từ 1 đến 4. Logical partition luôn luôn được đánh số từ 5. 

## 3.Tra cứu thông tin về phân vùng.
- **fdisk -l** có thể được sử dụng để xem thông tin về các phân vùng trên các ổ cứng.
Ví dụ

Disk /dev/sdb: 223,6 GiB, 240057409536 bytes, 468862128 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 Disklabel type: dos Disk identifier: 0x1dd0231f

Device Boot Start End Sectors Size Id Type /dev/sdb1 * 448862208 468860927 19998720 9,5G 82 Linux swap / Solaris /dev/sdb2 2046 448862207 448860162 214G 5 Extended /dev/sdb5 2048 448862207 448860160 214G 83 Linux

Ở ví dụ trên có 3 phân vùng trên ổ /dev/sdb, phân vùng thứ nhất(sdb1) là phân vùng swap của linux, phân vùng thứ hai(sdb2) là phân vùng extended. Phân vùng thứ 3 (sdb5) là phân vùng logical chứa hệ điều hành.
- **/proc/partitions**: Đây là file chứa một bảng với các giá trị *major*, *minor*, số block của partition và tên của partition.
Ví dụ:

root@m4700:~# cat /proc/partitions major minor #blocks name

7 0 1008 loop0 7 1 154652 loop1 8 0 488386584 sda 8 1 592896 sda1 8 2 218543104 sda2 8 3 269248512 sda3 8 16 234431064 sdb 8 17 9999360 sdb1 8 18 1 sdb2 8 21 224430080 sdb5 11 0 1048575 sr0

-Trong đó:
    - **major**: là số để xác định loại thiết bị , ví dụ **8** là **sd( scsi device)**.
    - **minor**: là số nhận dạng duy nhất của phân vùng trong một ổ cứng.
## 4.Phân vùng một ổ đĩa mới.
- Đầu tiên, kiểm tra ổ đĩa mới với `fdisk -l` để xem linux đã nhận ổ mới chưa. 
```bash
[root@cen3 ~]# fdisk -l

Disk /dev/sdb: 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

Linux đã nhận ổ cứng mới là /dev/sdb nhưng nó chưa có một phân vùng nào.

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 0x38b5c784.

Command (m for help):

- Chúng ta có thể gõ `m` rồi nhấn enter để xem các tùy chọn trong fdisk.

- Sau đó, kiểm tra các phân vùng có trên ổ đĩa để chắc chắn đó là ổ đĩa chống.

Command (m for help): p

Disk /dev/sdb: 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: 0x38b5c784

Device Boot Start End Blocks Id System

Command (m for help):

- Ổ đĩa chống, gõ `n` để tạo một phân vùng mới, chọn p để chọn loại phân vùng là primary, chọn 1 cho số của partition và sau đó chọn kích thước của phân vùng.

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): 1 First sector (2048-41943039, default 2048): Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): Using default value 41943039 Partition 1 of type Linux and of size 20 GiB is set

Nhập p để xem lại các phân vùng đã tạo và w để lưu cấu hình về phân vùng mới.

Command (m for help): p

Disk /dev/sdb: 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: 0x4cb811ac

Device Boot Start End Blocks Id System /dev/sdb1 2048 41943039 20970496 83 Linux

Command (m for help): w The partition table has been altered!

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

Hoàn tất quá trình phân vùng với fdisk.

- Format một partition với lệnh dd:
`dd if=/dev/zero of=/dev/sdb1`

# IV.Filesystem
## 1. Giới thiệu về filesystem.
- Filesystem là cách tổ chức file trong phân vùng. Bên cạnh lưu trữ dựa trên tệp, filesystem thường chứa các thư mục, kiểm soát truy cập và chữa các meta data về file như thời gian truy cập, thời gian chỉnh sửa, và người sở hữu file.

- **man fs** là lệnh dùng để xem hướng dẫn về filesystem.
- **/proc/filesystems** là file chứa các filesystem được hỗ trợ của hệ thống.
- **/etc/filesystems** là file chứa một danh sách các filesystem được tự động xác định.

## 2.Các filesystem phổ biến.
- **ext2**:
       - Được phát triển để khắc phục giới hạn của ext filesystem trước.
       - Không có tính năng ghi nhật ký.
       - Kích thước file tối đa là 2TB.
       - Kích thước filesystem tối đa là 32TB
- **ext3**:
       - Được giới thiệu ở Linux kernel 2.4.15
       - Lợi ích lớn nhất của ext3 là ghi nhật ký.
       - Kích thước tối đa của file là 2TB.
       - Kích thước filesystem tối đa là 32TB
       - Có thể convert ext2 sang ext3.
- **ext4**:
       - Được giới thiệu trong linux kernel 2.6.19.
       - Hỗ trợ kich thước file độc lập và filesystem lớn hơn.
       - Kích thước tối đa của một file là 16TB 
       - Kích thước tối đa của filesystem là 1EB = 1048576TB
       - Thư mục có thể chứa 64000 thư mục con(ext3 là 32000)
       - Một số tính năng mới trên ext4: multiblock allocation, delayed allocation, journal checksum. fast fsck,...
- **xfs**: 
       - RHEL 7 sử dụng xfs là filesystem mặc định. 
       - Nó là một filesystem có khả năng mở rộng cao.
- **btrfs**:
       - Là một filesystem mới được phát triển từ 2007.
       - Là một filesystem ghi nhật ký.
       - Có khả năng mở rông lớn và được kỳ vọng thay thế ext4 trong tương lai

|Feature	|EXT4	|XFS	|BTRFS|
|-|-|-|-|
|Development started	|2006	|1994	|2009|
|Max volume size	|1Ebytes	|8Ebytes	|16Ebytes|
|Max file size	|16 Tbytes	|8 Ebytes	|16 Ebytes
|Transparent compression	|No	|No	|Yes
|Attributes	|Yes	|Yes	|Yes
|Snapshots	|No	|Planned	|Yes
- **vfat**: 
       - Filesystem vfat tồn tại ở một số dạng: fat12 cho đĩa mềm, fat16 cho msdot, fat32 cho những ổ đĩa lớn hơn.
       - Linux hỗ trợ tất cả dạng của vfat, nhưng vfat thiếu nhiều tính năng bảo mật.
       - Ổ fat có thể được đọc ở mọi hệ điều hành, máy ảnh, các hệ điều hành khác,...
       
## 3.Một số câu lệnh làm việc với filesystem.

- **mkfs** là lệnh dùng để build filesystem. Cú pháp:
`mkfs [options] [-t type fs-options] device [size]`
- **lsblk** - list block device: là lệnh hiển thị thông tin về các block device, khi thêm tùy chọn -f thì nó sẽ hiển thị cả filesystem của nó.

root@m4700:~# lsblk -f NAME FSTYPE LABEL UUID MOUNTPOINT sda
├─sda1 ntfs System Reserved D8F4D312F4D2F1AC
├─sda2 ntfs 6ACEDCB9CEDC7EAF
└─sda3 ntfs data-disk 1905584B3E387C70
sdb
├─sdb1 swap 141380cc-a7a4-412c-97d0-78eae84adff6 [SWAP] ├─sdb2
└─sdb5 ext4 fd792d9a-9048-41d1-8954-3a420b68ed4a /

- **df -Th** Lệnh df là lệnh hiển thị dung lượng đang sử dụng của các phân vùng ổ cứng đang được mount vào hệ thống, với option -T là để nó hiển thị thêm về filesystem của phân vùng và -h là để hiển thị dung lượng dưới dạng có thể đọc được.

# V.Mounting 
Mount là một quá trình mà trong đó hệ điều hành làm cho các tập tin và thư mục trên một thiết bị lưu trữ (như ổ cứng, CD-ROM hoặc tài nguyên chia sẻ) có thể truy cập được bởi người dùng thông qua hệ thống tệp của máy tính.
Mọi file, thư mục đều phải có đường dẫn từ thư mục / đến nó. Khi thêm file system cũng cần phải có một vị trí nào đó trong cây thư mục. Thư mục đặt file system được gọi là **mount point**.

## 1.Mount local filesystem 
- **Tạo mount point**: Tạo một thư mục sử dụng làm mount point sử dụng lệnh `mkdir`:
```bash
mkdir /media/data

2.Xem các file system đã mount.

3./etc/fstab

File /etc/fstab (filesystem table) chứa một danh sách các file system, mount point, các tùy chọn để tự động mount chúng mỗi lần khởi động. Ví dụ:

[root@cen3 ~]# cat /etc/fstab
UUID=dbfb65d6-957e-4fbb-9f37-07cc6666a046 /                       xfs     defaults        0 0
UUID=a344d40f-44c2-41a7-a39e-caa2990b9d26 swap                    swap    defaults        0 0

Khi thêm dòng sau, nó sẽ tự động mount /dev/sdb1 vào mount point /media/data:

/dev/sdb1                                 /media/data             ext4    defaults        0 0

2. Raid 0.

3. Raid 1

Raid 10.