Zob. http://www.ibm.com/developerworks/library/l-lpic1-102-1/
Dane gromadzone są na pojedynczych dyskach lub grupach dysków zorganizowanych w fizyczne wolumeny lub macierze dyskowe. Dyski mogą być typu SATA, SAS, SSD.
Oto budowa tradycyjnego dysku:
Na dysk składają się sektory, które można grupować w partycje, czyli ciągłe obszary dysku. Informacja o partycjach, ich rozmiarze i przeznaczeniu, nazwie, itp. jest przechowywana w tablicy partycji.
Oto jakie informacje można uzyskać o pewnym dysku SATA przy pomocy komend:
fdisk
# fdisk -l /dev/sda
Disk /dev/sda: 465.8 GiB, 500107862016 bytes, 976773168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: CF6D32A2-909C-4745-9A63-9B35E2014598
Device Start End Sectors Size Type
/dev/sda1 2048 4095 2048 1M BIOS boot
/dev/sda2 16384 733183 716800 350M Microsoft basic data
/dev/sda3 733184 105611263 104878080 50G Microsoft basic data
/dev/sda4 105611264 106635263 1024000 500M Linux filesystem
/dev/sda5 106637312 976773119 870135808 414.9G Linux LVM
parted
# parted /dev/sda print
Model: ATA HGST HTS725050A7 (scsi)
Disk /dev/sda: 500GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 2097kB 1049kB BIOS boot partition bios_grub
2 8389kB 375MB 367MB ntfs Microsoft basic data msftdata
3 375MB 54.1GB 53.7GB ntfs Microsoft basic data msftdata
4 54.1GB 54.6GB 524MB ext4 Linux filesystem
5 54.6GB 500GB 446GB Linux LVM lvm
# parted /dev/sda unit s print
Model: ATA HGST HTS725050A7 (scsi)
Disk /dev/sda: 976773168s
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 2048s 4095s 2048s BIOS boot partition bios_grub
2 16384s 733183s 716800s ntfs Microsoft basic data msftdata
3 733184s 105611263s 104878080s ntfs Microsoft basic data msftdata
4 105611264s 106635263s 1024000s ext4 Linux filesystem
5 106637312s 976773119s 870135808s Linux LVM lvm
gdisk
# gdisk -l /dev/sda
GPT fdisk (gdisk) version 1.0.1
Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: present
Found valid GPT with protective MBR; using GPT.
Disk /dev/sda: 976773168 sectors, 465.8 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): CF6D32A2-909C-4745-9A63-9B35E2014598
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 976773134
Partitions will be aligned on 2048-sector boundaries
Total free space is 16365 sectors (8.0 MiB)
Number Start (sector) End (sector) Size Code Name
1 2048 4095 1024.0 KiB EF02 BIOS boot partition
2 16384 733183 350.0 MiB 0700 Microsoft basic data
3 733184 105611263 50.0 GiB 0700 Microsoft basic data
4 105611264 106635263 500.0 MiB 8300 Linux filesystem
5 106637312 976773119 414.9 GiB 8E00 Linux LVM
Komenda sgdisk -l /dev/sda
daje analogiczną informację, ale bez sekcji Partition table scan.
W przypadku dysku SSD otrzymujemy takie informacje:
# parted /dev/sdb print
Model: ATA SanDisk SSD U110 (scsi)
Disk /dev/sdb: 16.0GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 1049kB 16.0GB 16.0GB primary ext4
Jeśli mamy w systemie dostępną tradycyjną dyskietkę o pojemności 1.44 MB, to jej opis wygląda następująco:
# fdisk /dev/fd0
Disk /dev/fd0: 1 MB, 1474560 bytes
2 heads, 18 sectors/track, 80 cylinders
Units = cylinders of 36 * 512 = 18432 bytes
Device Boot Start End Blocks Id System
Pierwszy sektor dysku, tzw. MBR (sektor 0, Master Boot Record) zawiera kod programu do ładowania systemu operacyjnego oraz tabelę partycji MSDOS. Tego typu tablica ma 4 pozycje po 16 bajtów każda, dzięki czemu można zdefiniować
maksymalnie 4 partycje typu podstawowego (primary)
3 partycje podstawowe i partycję rozszerzoną (extended)
Partycja rozszerzona pozwala zdefiniować wiele partycji logicznych. Najpierw definiowana jest pierwsza poprzez wskazanie adresu pierwszego sektora partycji logicznej. W nim umieszczana jest tabela partycji z adres drugiej partycji logicznej, itd.
Partycje ograniczona są do 232 x 512 B=2 TiB.
Poprawny sektor zerowy musi kończyć się sygnaturą AA55.
W przypadku używania tablicy GPT (GUID Partition Table, standard UEFI) liczba partycji jest dowolna (domyślnie 128).
Zalety GPT:
LBA 0: określa MBR dla zachowania wstecznej kompatybilności, protective MBR z~partycją typu 0xEE wypełniającą cały dysk lub partycję długości 2~TiB
LBA 1: nagłówek określa maksymalną liczbę partycji (domyślnie 128), wielkość opisu partycji (domyślnie 128 B), sumy kontrolne CRC32 i UUID dysku
opis partycji: 64-bitowy początek i koniec (LBA), typ (UUID), nazwa (do 36 znaków kodowych UTF-16LE)
partycje mogą być większe niż 2 TiB (do 8 ZiB)
partycje są identyfikowane przez GUID (przenaszalność dysków)
typy partycji są identyfikowane prze GUID (brak konfliktów)
46 bajtowa etykieta partycji (UTF-16)
CRC32 uzywane do kontroli integralności tablicy partycji
kopia tablicy przechowywana jest na końcu dysku
Oto przykład informacji o partycji typu Linux filesystem uzyskanej przy pomocy komendy gdisk
:
Command (? for help): i
Using 1
Partition GUID code: 0FC63DAF-8483-4772-8E79-3D69D8477DE4 (Linux filesystem)
Partition unique GUID: 079BF95E-A726-44E6-886E-8428ED1E6C0E
First sector: 2048 (at 1024.0 KiB)
Last sector: 206847 (at 101.0 MiB)
Partition size: 204800 sectors (100.0 MiB)
Attribute flags: 0000000000000000
Partition name: 'Linux filesystem'
Przykładowe typy partycji GPT:
0700 |
Microsoft basic data |
0c01 |
Microsoft reserved |
2700 Windows RE |
3000 |
ONIE boot |
3001 |
ONIE config |
3900 Plan 9 |
4100 |
PowerPC PReP boot |
4200 |
Windows LDM data |
4201 Windows LDM metadata |
4202 |
Windows Storage Spac |
7501 |
IBM GPFS |
7f00 ChromeOS kernel |
7f01 |
ChromeOS root |
7f02 |
ChromeOS reserved |
8200 Linux swap |
8300 |
Linux filesystem |
8301 |
Linux reserved |
8302 Linux /home |
8303 |
Linux x86 root (/) |
8304 |
Linux x86-64 root (/ |
8305 Linux ARM64 root (/) |
8306 |
Linux /srv |
8307 |
Linux ARM32 root (/) |
8400 Intel Rapid Start |
8e00 |
Linux LVM |
a500 |
FreeBSD disklabel |
a501 FreeBSD boot |
… |
… |
… |
… |
… … |
Z każdym dyskiem związane jest urządzenie blokowe /dev/hd[a-z] (dyski ATA), /dev/sd[a-z] (dyski SATA/SCSI), /dev/vd[a-z] (dyski maszyny wirtualnej). Jeśli dysk ma partycje, to opisane są one odpowiednimi dodatkowymi plikami w katalogu /dev nazwach typu <dysk-numer partycji>, np. /dev/sdb3.
Komenda parted
pozwala na pracę w trybie wsadowym i interaktywnym.
Oto kilka typowych przykładów użycia tej komendy w trybie wsadowym:
# parted [-s] /dev/vdb help
# parted [-s] /dev/vdb mklabel msdos
# parted [-s] /dev/vdb mkpart primary 1 20%
# parted [-s] /dev/vdb mkpart primary 1 100%
# parted [-s] -- /dev/vdb mkpart primary 1 -100
# parted [-s] /dev/vdb mkpart primary 1 200 mkpart primary 200 400 mkpart primary 600 800
# parted [-s] /dev/vdb set 1 bios_grub on
# parted [-s] /dev/vdb set 2 swap on
# parted [-s] /dev/vdb set 3 boot on
# parted [-s] /dev/vdb set 3 lvm on|off
# parted [-s] /dev/vdb set 3 raid on|off
# parted [-s] /dev/vdb rm 1 rm 2 rm 3
Do bardziej zaawansowanego (wsadowego) zarządzania dyskami służy komenda sgdisk. Przy jej pomocy można łatwo utworzyć plik zawierający kopię tablicy GPT:
# sgdisk -b backup-vdb.gpt /dev/vdb
W razie potrzeby można także łatwo tablicę odtworzyć:
# sgdisk -l backup-vdb.gpt /dev/vdb
W przypadku korzystania z tablicy MSDOS można archiwizować i odtwarzać cały MBR przy
pomocy komendy dd
:
# dd if=/dev/vda of=/root/mbr-vda.img bs=512 count=1
# dd if=/dev/vdb of=/root/mbr-vdb.img bs=512 count=1
# dd if=/dev/zero of=/dev/vdb bs=512 count=1
# dd if=/root/mbr-vdb.img of=/dev/vdb bs=512 count=1
Zawartość MBR-a może być analizowana przy pomocy komendy od
:
# od -t x1 /root/mbr-vda.img
Pojemność dysku była do niedawna określona przez jego ,,geometrię’’, czyli liczbę cylindrów, ścieżek na cylinder (liczbę głowic), sektorów na ścieżkę oraz bajtów w sektorze. Teraz podaje się pojemność dysku w sektorach lub bajtach, w jednostkach takich jak MB, GB, TB, itd, gdzie 1MB=106 B, 1GB=109 B, 1TB=1012 B.
LOGICZNE WOLUMINY
Jeśli na dysku jest tworzona jedna partycja o wielkości całej dostępnej przestrzeni dyskowej, to jej rozmiar wyznacza maksymalną przestrzeń dyskową, którą będzie można wykorzystać przy tworzeniu systemu plików.
Można obejść to ograniczenie wykorzystując do zarządzania przestrzenią dyskową system LVM (Logical Volume Management), czyli system zarządzania logicznymi woluminami:
Fizyczna przestrzeń na dysku (partycje dyskowe) po uzupełnieniu o dane administracyjne jest określana jako wolumin fizyczny (PV, Physical Volume) składający się z fizycznych ekstentów (PE, Physical Extent).
Grupę fizycznych ekstentów można przypisać do grupy woluminowej (VG, Volume Group), na którą mogą się składać fizyczne ekstenty pochodzące z tego samego lub różnych dysków.
Fizyczne ekstenty z danej grupy woluminowej mogą zostać przydzielone do logicznego woluminu (LV, Logical Volume), który jest odpowiednikiem tradycyjnej partycji.
Na logicznym woluminie tworzony jest system plików.
Tworzenie logicznego woluminu przebiega w następujących krokach:
tworzenie partycji LVM:
# parted /dev/vdb mkpart primary 1 50% set 1 lvm on
# parted /dev/vdb mkpart primary 50% 100% set 2 lvm on
tworzenie PV
# pvcreate /dev/vdb1 /dev/vdb2
# pvs
tworzenie GV
# vgcreate test /dev/vdb1 /dev/vdb2
# vgdisplay [-v test]
tworzenie LV
# lvcreate -L 500M -n p1 test
# lvs
Zalety LVM
dynamiczna zmiana wielkości systemu plików (lvextend
, lvreduce
, resize2fs
)
dodawanie/ujmowanie przestrzeni fizycznej
przesuwanie grupy woluminu na inny nośnik fizyczny
tworzenie ,,zdjęć’’ logicznych woluminów
tworzenie woluminów zwierciadlanych (linear vs mirrored volumes)
przeplot (striping) – zapisywanie danych związanych z danym logicznym woluminem na fizycznych woluminach, które go tworzą
Zob. przykłady użycia LVM-a: LVM-1.
Self-Monitoring, Analysis and Reporting Technology (SMART), zob. http://www.linuxjournal.com/magazine/monitoring-hard-disks-smart?page=0,1},
Najczęściej używane komendy sprawdzające stan dysku:
# smartctl --info|-i /dev/sda
# smartctl --all|-a /dev/sda
# smartctl --xall /dev/sda
Czasami trzeba wskazać rodzaj urządzenia, gdyż urządzenie blokowe jest związane ze sterownikiem macierzy dyskowej, np. PERC:
# smartctl -a -d megaraid,[12] /dev/sda
Komendy
# smartctl --test short|long /dev/sda
# smartctl -c /dev/sda
służą do przeprowadzania testów stanu dysku.
Zob. https://www.thomas-krenn.com/en/wiki/SMART_tests_with_smartctl
The goal of the short test is the rapid identification of a defective hard drive. Therefore, a maximum run time for the short test is 2 min. The test checks the disk by dividing it into three different segments. The following areas are tested:
Electrical Properties: The controller tests its own electronics, and since this is specific to each manufacturer, it cannot be explained exactly what is being tested. It is conceivable, for example, to test the internal RAM, the read/write circuits or the head electronics.
Mechanical Properties: The exact sequence of the servos and the positioning mechanism to be tested is also specific to each manufacturer.
Read/Verify: It will read a certain area of the disk and verify certain data, the size and position of the region that is read is also specific to each manufacturer.
Komendy
# smartctl -l selftest /dev/sda
# smartctl -a /dev/sda
wyświetlają wyniki testu. Zestaw wyświetlanych parametrów i interpretacja ich wartości zależy od producenta sprzętu. Zob. https://www.smartmontools.org/wiki/FAQ.