Chapter 6

MANAGING BASIC STORAGE

Thin provisioning is a method of optimizing the utilization of available storage by allocating storage space only as it is needed.

Thick provisioning, also known as fixed or allocated provisioning, involves allocating the full amount of required storage space at the time of provisioning.

To get an overview of currently existing devices:

lsblk
/dev/sdx     - SCSI and SATA disks
/dev/vdx     - KVM virtual machines
/dev/nvmexny - is used for NVME devices

Naming convention:

/dev/sda2 - second partition on the first hard disk
/dev/sdb1 - first partition on te second hard disk
/dev/nvme0n1p1 - first partition on the first hard disk
/dev/nvme0n3p2 - second partition on the third hard disk

MBR vs GPT

MBR:

  • 512 bytes to store boot information

  • 64 bytes to store partitions

  • Place for 4 partitions only with max size of 2 TiB

  • To use more partitions, extended and logical partitions must be used

GPT

  • More space to store partitions

  • used to overcome MBR limitations

  • 128 partitions maximum

Creating partitions

Common tools:

fdisk - creates MBT and GPT partitions 
gdisk - creates GPT by default
parted- can be scripted easily

Aliases:

linux - standard linux
swap  - linux swap
uefi  - uefi boot
lvm   - logical volume manager

Əgər yeni partition yaradarkən fdisk içində n əmrindən sonra bu üç yazı çıxırsa bu o deməkdir ki, MBR partition table olunub həmin disk. Çünki 4 free yer var cəmi, extended partition seçimi var və 128 partitionun yaradılması biraz inanılmazdır.

[root@localhost ali]# fdisk /dev/nvme0n1

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
All space for primary partitions is in use

MBR-dan istifadə edən zaman əgər 3 primary partition varsa bu zaman dördüncünü mütləq extended partition yaratmaq lazımdır ki, LVM-lərdən istifadə edə bilinsin.

Filesystems

XFS is the default filesystem

  • fast and scalable

  • uses CoW(copy on write) to guarantee data integrity

  • size can be increased, not decreased

Ext4 was default in RHEL6 and still used

  • backward compatible to Ext2

  • uses journal to guarantee data integrity

  • size can be increased decreased

vfat offers multi-OS support

  • used for shared devices

btrfs is a new and advanced filesystem

Creating filesystems

[root@localhost ali]# mkfs.[Tab][Tab]
mkfs.cramfs  mkfs.ext2    mkfs.ext3    mkfs.ext4    mkfs.fat     mkfs.minix   mkfs.msdos   mkfs.vfat    mkfs.xfs 

mounting filesystems:

# Mount command shows all mounted filesystems, including administrative kernel mounts
mount

# This command mounts vdb1 filesystem into /mnt folder:
mount /dev/vdb1 /mnt

# You should unmount filesystem before disconnecting a device
umount

# lsof command will tell you about open files in mount
lsof /mnt

# findmnt command shows which filesystem is mounted where in the directory structure
findmnt

Example 1 - using fdisk:

1) Created partition

[root@localhost ali]# lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0          11:0    1 12.8G  0 rom  /run/media/ali/Rocky-8-9-x86_64-dvd
nvme0n1     259:0    0   50G  0 disk 
├─nvme0n1p1 259:1    0    1G  0 part /boot
└─nvme0n1p2 259:2    0   49G  0 part 
  ├─rl-root 253:0    0 45.1G  0 lvm  /
  └─rl-swap 253:1    0  3.9G  0 lvm  [SWAP]
nvme0n2     259:3    0   20G  0 disk 
[root@localhost ali]# fdisk /dev/nvme0n2

Welcome to fdisk (util-linux 2.32.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-41943039, default 2048): 
Last sector, +sectors or +size{K,M,G,T,P} (2048-41943039, default 41943039): +2G

Created a new partition 1 of type 'Linux' and of size 2 GiB.

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

2) Created filesystem on this partition:

[root@localhost ali]# mkfs.xfs /dev/nvme0n2p1

3) Mounted the filesystem:

As you can see on the last line, mountpoint of /dev/nvme0n2p1 is /mnt

[root@localhost ali]# mount /dev/nvme0n2p1 /mnt
[root@localhost ali]# 
[root@localhost ali]# lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0          11:0    1 12.8G  0 rom  /run/media/ali/Rocky-8-9-x86_64-dvd
nvme0n1     259:0    0   50G  0 disk 
├─nvme0n1p1 259:1    0    1G  0 part /boot
└─nvme0n1p2 259:2    0   49G  0 part 
  ├─rl-root 253:0    0 45.1G  0 lvm  /
  └─rl-swap 253:1    0  3.9G  0 lvm  [SWAP]
nvme0n2     259:3    0   20G  0 disk 
└─nvme0n2p1 259:4    0    2G  0 part /mnt

it is also able to seen in mount command:

[root@localhost ali]# mount | grep '^/'
/dev/mapper/rl-root on / type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)
/dev/nvme0n1p1 on /boot type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)
/dev/sr0 on /run/media/ali/Rocky-8-9-x86_64-dvd type iso9660 (ro,nosuid,nodev,relatime,nojoliet,check=s,map=n,blocksize=2048,uid=1000,gid=1000,dmode=500,fmode=400,uhelper=udisks2)
/dev/nvme0n2p1 on /mnt type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)

it can also able to seen in findmnt command:

[root@localhost ali]# findmnt
TARGET                                  SOURCE              FSTYPE              OPTIONS
/                                       /dev/mapper/rl-root xfs                 rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota
<-SNIPPED->
└─/mnt                                  /dev/nvme0n2p1      xfs                 rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota

to unmount device:

[root@localhost ali]# lsof /mnt
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
      Output information may be incomplete.
[root@localhost ali]# umount /mnt

Əgər wrong fs type erroru gəlirsə deməli ya filesystem yaratmaq yadımnan çıxıb ya da extended içindəki logical partitionu mount etmək yerinə extended partitionu mount etməyə çalışıram.

Example 2 - using gdisk:

gdisk /dev/nvme0n2

Partition number (1-128, default 1): 1
First sector (34-41943006, default = 2048) or {+-}size{KMGTP}: 
Last sector (2048-41943006, default = 41943006) or {+-}size{KMGTP}: +2G
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): 8e00
Changed type of partition to 'Linux LVM'

Command (? for help): p
Disk /dev/nvme0n2: 41943040 sectors, 20.0 GiB
Model: VMware Virtual NVMe Disk
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): C2535E9B-8E81-47F1-8349-81F3BB14DD79
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 41943006
Partitions will be aligned on 2048-sector boundaries
Total free space is 37748669 sectors (18.0 GiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048         4196351   2.0 GiB     8E00  Linux LVM

Command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/nvme0n2.
The operation has completed successfully.

/etc/fstab

Mountları reboot persistent etmək üçün mountları fstab-a yazmaq lazımdır

/dev/sdb1    /data    ext4    defaults 0,0
systemd-fstab-generator
systemctl deamon-reload

/etc/fstabda edilən hər hansı səhvə görə sistem normal boot edilməyə bilər. fstab-ın syntaxını doğrulamaq üçün aşağıdakı komandaları icra etmək lazımdır:

mount -a            # mount olunmamış filesystemləri mount edir
findmnt --verify    # fstabda error və warning olmamasına baxır

Əgər OS açılmasa, grub boot menuda kernel sətri axırındakı aşağıdakı sətirləri silmək lazımdır ki, errorları görək:

rhgb quiet

reboot etdikdə 1min30san görsədəcək error olan job complete olmağı üçün. Gözlədikdən sonra shell gələcək.

fstab-dakı yazdığımız şeylər systemd mount-a tərcümə edilir OS tərəfindən. fstab-dan yaradılmış fayllara aşağıdakı qovluqda baxmaq mümkündür:

ls /run/systemd/generator
cat /run/systemd/generator/boot.mount

Hər hansı mounta bu komanda ilə də baxmaq mümkündür

systemctl cat tmp.mount

systemctl ilə mountun aktivləşdirilməsi

# mount komandasında tmp adı keçən sətirləri ekrana yazdıraq

[root@localhost ali]# mount | grep tmp
devtmpfs on /dev type devtmpfs (rw,nosuid,seclabel,size=1830940k,nr_inodes=457735,mode=755)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,seclabel)
tmpfs on /run type tmpfs (rw,nosuid,nodev,seclabel,mode=755)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,seclabel,mode=755)
tmpfs on /run/user/1000 type tmpfs (rw,nosuid,nodev,relatime,seclabel,size=372084k,mode=700,uid=1000,gid=1000)

# systemctl vasitəsilə tmp.mount-u aktivləşdirək

[root@localhost ali]# systemctl enable --now tmp.mount
Created symlink /etc/systemd/system/local-fs.target.wants/tmp.mount → /usr/lib/systemd/system/tmp.mount.

# son sətirdə aktivləşdirdiyimiz mountun əlavə edildiyini görürük:

[root@localhost ali]# mount | grep tmp
devtmpfs on /dev type devtmpfs (rw,nosuid,seclabel,size=1830940k,nr_inodes=457735,mode=755)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,seclabel)
tmpfs on /run type tmpfs (rw,nosuid,nodev,seclabel,mode=755)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,seclabel,mode=755)
tmpfs on /run/user/1000 type tmpfs (rw,nosuid,nodev,relatime,seclabel,size=372084k,mode=700,uid=1000,gid=1000)
tmpfs on /tmp type tmpfs (rw,nosuid,nodev,seclabel)


# fstab systemctlə çevrildiyi üçün /tmp mountunu fstabda görmək mümkün deyil çünki
# heç vaxt burda yazılmamışdı

[root@localhost ali]# grep tmp /etc/fstab


# tmp.mountun statusuna systemctl əmri vasitəsilə baxırıq:

[root@localhost ali]# systemctl status tmp.mount
● tmp.mount - Temporary Directory (/tmp)
   Loaded: loaded (/usr/lib/systemd/system/tmp.mount; enabled; vendor preset: disabled)
   Active: active (mounted) since Wed 2024-06-26 10:40:07 +0330; 52s ago
    Where: /tmp
     What: tmpfs
     Docs: man:hier(7)
           https://www.freedesktop.org/wiki/Software/systemd/APIFileSystems
    Tasks: 0 (limit: 22886)
   Memory: 4.0K
   CGroup: /system.slice/tmp.mount

Jun 26 10:40:07 localhost.localdomain systemd[1]: Mounting Temporary Directory (/tmp)...
Jun 26 10:40:07 localhost.localdomain systemd[1]: Mounted Temporary Directory (/tmp).

Persistent naming attributes

blkid         # shows all devices with their naming attributes
tune2fs -L    # is used to set a label on an EXT filesystem
xfs_admin -L  # is used to set a label on an XFS filesystem
mkfs.* -L     # is used to set a label while creating a filesystem

XFS UUID clone error

Nəyə görə UUİD-ləri istifadə edirik?

Əgər 2 partition yaratmışıqsa, məs. /dev/sda5 və /dev/sda6. /etc/fstab içində /dev/sda5-i silsək, əvvəlki /dev/sda6 adını dəyişib /dev/sda5 olacaq çünki ordered numberlə nizamlanır adlar.

Bunun qarşısına keçməkçün fstab-da UUİD vermək lazımdır.

UUID-lərə bu komanda ilə baxmaq mümkündür:

lsblk --fs

UUİD vermək qaydası:

# bu bizə sda5-in UUID-sini verir
blkid | grep sda5 | awk '{ print $2 }' >> /etc/fstab 

Sonra isə həmin UUID-ni /etc/fstab içində yazırıq:

UUID="blablabla"    /qovluq    ext4    defaults    0 0

XFS filesystem clone edildikdə UUID-si də clone olunur. Bu səbəbdən clone edilmiş filesystemə yeni UUID təyin etmək üçün:

xfs_admin -U generate /dev/sdb1

parted

[root@localhost ali]# parted /dev/nvme0n2 unit GiB print
Model: NVMe Device (nvme)
Disk /dev/nvme0n2: 20.0GiB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start    End      Size     Type     File system  Flags
 1      0.00GiB  2.00GiB  2.00GiB  primary  xfs

Parted vasitəsilə disk-in partition table-nı GPT-yə çevirmək üçün:

parted /dev/nvme0n2 mklabel gpt

MBR-a çevirmək üçün:

parted /dev/nvme0n2 mklabel msdos

diskə partition table verilməsi və partition yaradılması

Bu komanda /dev/nvme0n2 diskini GPT-yə çevirir, userdata adlı partition yaradır, filesystemi xfs edir, və ölçünü 1000MB təyin edir:

parted /dev/nvme0n2 mklabel gpt mkpart usersdata xfs 2048s 1000MB

Bu komanda /dev/nvme0n2 diskini MBR-a çevirir, primary partition yaradır, filesystemi xfs edir, və ölçünü 1000MB edir:

parted /dev/nvme0n2 mklabel msdos mkpart primary xfs 2048s 1000MB

Həmin komanda interaktiv formada da icra edilə bilər:

[root@localhost ali]# parted /dev/nvme0n2
GNU Parted 3.2
Using /dev/nvme0n2
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted)                                                                  
(parted) mklabel msdos                                                    
Warning: The existing disk label on /dev/nvme0n2 will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No? yes                                                               
(parted)                                                                  
(parted) mkpart                                                           
Partition type?  primary/extended? primary                                
File system type?  [ext2]? xfs                                            
Start? 2048s                                                              
End? 3GiB
(parted)                                                                  
(parted) print                                                            
Model: NVMe Device (nvme)
Disk /dev/nvme0n2: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start   End     Size    Type     File system  Flags
 1      1049kB  3221MB  3220MB  primary  xfs          lba

(parted) quit                                                             
Information: You may need to update /etc/fstab.

[root@localhost ali]#                                                     
[root@localhost ali]# udevadm settle

Bu komanda sistemin yeni partitionu detect edib həmin partitionu /dev qovluğunda yaratmasını gözləyir:

udevadm settle

SWAP partition

Last updated

Was this helpful?