File system management on Linux is pretty easy once a person has experience and knowledge of what he is doing.

File systems can be two kinds:

  • Non-Journal File systems: ext2.

These file systems do not keep logs and can have corrupted data if there has been a power outage. The pluses of these file systems is their fast read/write speed.

  • Journal File systems: ext3,ext4.

These file systems keep a log (journal) which slows them down, however it is up to the System Admin to decide if he/she is willing to sacrifice speed for consistency.

First, when we add a new disk, we should be able to see it with the following command:

[root@lparaca ~]# fdisk -l
Disk /dev/sdh: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
**********************************************

After that we have to create a partition for that device using the same command, a device can have 4 primary partitions and many more extended partitions. Here we will create a primary partition for device /dev/sdh

[root@lparaca ~]# fdisk /dev/sdh
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x36089e2c.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): n  <- Create partition
Command action
   e   extended
   p   primary partition (1-4)
p  <- Primary
Partition number (1-4): 
Value out of range.
Partition number (1-4): 1  <- Partition ID in case you have others
First cylinder (1-2610, default 1):   
Using default value 1 <- First Cylinder
Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610):   
Using default value 2610 <- Last Cylinder

Command (m for help): w  <- Write the changes into the header

We can see now that the partition has been created

[root@lparaca ~]# ls /dev/sdh*
/dev/sdh  **/dev/sdh1**

After we have physical partition, we can create a volume group (e.g. group of physical volumes)

root@lparaca ~]# vgcreate oravg /dev/sdh1
  Physical volume "/dev/sdh1" successfully created
  Volume group "oravg" successfully created
[root@lparaca ~]# 

After we have the physical Volume we can start slicing it into pieces called Logical Volumes as follows:

Logical Volume

                              Size   LV Name  VG Name
[root@lparaca ~]# lvcreate -L 19G -n orahome  oravg
  Logical volume "lvol0" created.
[root@lparaca ~]# 

We can also display the stats of the newly created logical volume with:

root@lparaca ~]# lvdisplay /dev/orahome/lvol0 
  --- Logical volume ---
  LV Path                /dev/orahome/lvol0
  LV Name                lvol0
  VG Name                orahome
  LV UUID                hHtiIK-1kSn-RgIF-Aw8Y-M3WT-88HD-ZIXD6q
  LV Write Access        read/write
  LV Creation host, time lparaca, 2018-01-11 11:18:08 +0100
  LV Status              available
  # open                 0
  LV Size                19.00 GiB
  Current LE             4864
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:2

File System

Once the logical volume is created, we can create a file system on it. There are two main types of file systems:

  • Journal File systems: ext3, ex4
  • Non-Journal: ext2

We will create a journal file system to prevent from corruption in case of a power outage.

[root@lparaca ~]# mkfs.ext4 /dev/orahome/lvol0
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
1245184 inodes, 4980736 blocks
249036 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
152 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
        4096000

Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 33 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
[root@lparaca ~]# 

Once the file system is created we can mount, but before that we have to edit the /etc/fstab, indificated what and where we mount it:


#
# /etc/fstab
# Created by anaconda on Thu Jan 11 10:24:16 2018
#
# 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/vg_lparaca-lv_root /                       ext4    defaults        1 1
UUID=d05f17dc-5506-446d-802b-10b0e8528411 /boot                   ext4    defaults        1 2
/dev/mapper/vg_lparaca-lv_swap swap                    swap    defaults        0 0
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0
**/dev/orahome/lvol0      /u01/app/oracle/product/11.2.0/ ext4 defaults 0 0 **                                                                                                                                                                                                     


Once the file system is created and the /etc/fstab file edited as mentioned above, we can MOUNT the file system as follows:

[root@lparaca ~]# cat /etc/fstab 

#
# /etc/fstab
# Created by anaconda on Thu Jan 11 10:24:16 2018
#
# 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/vg_lparaca-lv_root /                       ext4    defaults        1 1
UUID=d05f17dc-5506-446d-802b-10b0e8528411 /boot                   ext4    defaults        1 2
/dev/mapper/vg_lparaca-lv_swap swap                    swap    defaults        0 0
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0
/dev/orahome/lvol0      /u01/app/oracle/product/11.2.0/ ext4 defaults 0 0
[root@lparaca ~]# mkdir -p /u01/app/oracle/product/11.2.0/
[root@lparaca ~]# mount /u01/app/oracle/product/11.2.0/
[root@lparaca ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg_lparaca-lv_root
                       18G  1.7G   15G  10% /
tmpfs                 939M     0  939M   0% /dev/shm
/dev/sda1             477M   28M  425M   7% /boot
/dev/mapper/orahome-lvol0
                       19G   44M   18G   1% **/u01/app/oracle/product/11.2.0**
[root@lparaca ~]# 

Extend File system

To extend a file system we need several things:

  1. Check if the new raw disk has been added
  2. Format the disk
  3. Create Physical Volume from the partition
  4. Add the disk to the volume group
  5. Extend the logical volume to which the file system (which we want to increase) is mounted
  6. Resize the file system

So let's get started :)

In order to check the disk, we can simply use the “fdisk command”

[root@oratest2 ~]# fdisk -l

Disk /dev/sda: 108 MB, 108134400 bytes
4 heads, 32 sectors/track, 1650 cylinders
Units = cylinders of 128 * 512 = 65536 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           2        1633      104448   83  Linux

Disk /dev/sdb: 21.4 GB, 21476016128 bytes
215 heads, 36 sectors/track, 5419 cylinders
Units = cylinders of 7740 * 512 = 3962880 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1        5420    20971520   8e  Linux LVM

Disk /dev/sdc: 73.0 GB, 73019817984 bytes
90 heads, 44 sectors/track, 36014 cylinders
Units = cylinders of 3960 * 512 = 2027520 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1               1       36014    71307264   8e  Linux LVM

Disk /dev/sdd: 75.1 GB, 75161927680 bytes
255 heads, 63 sectors/track, 9137 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdd1               1        9137    73392921   83  Linux

Disk /dev/sde: 75.1 GB, 75161927680 bytes     <- OUR NEW DISK
255 heads, 63 sectors/track, 9137 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Disk /dev/sde doesn't contain a valid partition table   <- WITHOUT PARTITION
[root@oratest2 ~]# fdisk /dev/sde
>sxh>


=====Format the disk=====
Again with "fdisk" we can format the disk as follows:


<sxh bash>
[root@oratest2 ~]# fdisk /dev/sde
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel. Changes will remain in memory only,
until you decide to write them. After that, of course, the previous
content won't be recoverable.


The number of cylinders for this disk is set to 9137.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
   (e.g., DOS FDISK, OS/2 FDISK)
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): p

Disk /dev/sde: 75.1 GB, 75161927680 bytes
255 heads, 63 sectors/track, 9137 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4):
Value out of range.
Partition number (1-4): 1
First cylinder (1-9137, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-9137, default 9137):
Using default value 9137

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

Now the disks' partition, will be visible from OS side:

Disk /dev/sde: 75.1 GB, 75161927680 bytes
255 heads, 63 sectors/track, 9137 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sde1               1        9137    73392921   83  Linux

After a partition is created we can create a physical volume on that partition:

[root@oratest2 ~]# pvcreate /dev/sde1
  Physical volume "/dev/sde1" successfully created
[root@oratest2 ~]#
[root@oratest2 ~]#

That volume can be seen as follows:

[root@oratest2 ~]# pvdisplay
 "/dev/sde1" is a new physical volume of "69.99 GB"
  --- NEW Physical volume ---
  PV Name               /dev/sde1
  VG Name                                     <- NO ASSOCIATED VOLUME GROUP
  PV Size               69.99 GB
  Allocatable           NO
  PE Size (KByte)       0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               ZOA0V3-QvMG-ihYN-WQIg-j1WZ-FjcX-e4dphP

Now, it is time to finally associate our Physical volume with a volume group:

Firstly, we have to partition the new bare metal :)

[root@matar ~]# fdisk /dev/sde
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 0xdabe3889.

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

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

Calling ioctl() to re-read partition table.
Syncing disks.
[root@matar ~]# 

Then, we have to check, which is the volume group which we want to extend> Please BE SURE, you know the volume group of the logical volume on which your File system is mounted and which you wish to extend. This can be seen from the “df” command:

[root@oratest2 ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/ORATEST_DATA_VG01-lvol0  68G   50G   16G  77% /u01/data     <- The file system I want to extend
               ^
               |
           The logical volume :)

Once we find the logical volume, we can find the associated logical group, using the lvdispaly command:

  --- Logical volume ---
  LV Name                /dev/ORATEST_DATA_VG01/lvol0              <- Logical Volume
  VG Name                ORATEST_DATA_VG01                         <- Volume group
  LV UUID                G6Ln3Y-ZEOK-rPQe-XgFM-v8v1-a06s-DrQ3Ne
  LV Write Access        read/write
  LV Status              available
  # open                 1
  LV Size                68.GB
  Current LE             35836
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:8

After we are 1000% sure, we can extend the Volume group as follows:

[root@oratest2 data]# vgextend ORATEST_DATA_VG01 /dev/sde1    <-We added the new partition (/dev/sde1) to the volume group (ORATEST_DATA_VG01) 
  Volume group "ORATEST_DATA_VG01" successfully extended

After, we have added the physical volume to the volume group, we can see that the amount of our FREE sectors increased from 0 → 18172

[root@oratest2 data]# vgdisplay
  --- Volume group ---
  VG Name               ORATEST_DATA_VG01
  System ID
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  3
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               139.98 GB
  PE Size               4.00 MB
  Total PE              35836
  Alloc PE / Size       17664 / 69.00 GB
  Free  PE / Size       18172 / 70.98 GB
  VG UUID               1UbWQt-wzjX-KlWF-O7Ds-wiVt-wdYH-WfzmMw

Since we are sure that the logical volume, on which our filesystem is mounted is: “ORATEST_DATA_VG01-lvol0”, we can extend the logical volume as follows:

[root@oratest2 data]# lvextend -l +18172 /dev/mapper/ORATEST_DATA_VG01-lvol0
  Extending logical volume lvol0 to 139.98 GB

Finally we can resize the File system as follows:

[root@oratest2 data]# resize2fs /dev/mapper/ORATEST_DATA_VG01-lvol0
resize2fs 1.39 (29-May-2006)
Filesystem at /dev/mapper/ORATEST_DATA_VG01-lvol0 is mounted on /u01/data; on-line resizing required
Performing an on-line resize of /dev/mapper/ORATEST_DATA_VG01-lvol0 to 36696064 (4k) blocks.
The filesystem on /dev/mapper/ORATEST_DATA_VG01-lvol0 is now 36696064 blocks long.

[root@oratest2 data]# df -h

/dev/mapper/ORATEST_DATA_VG01-lvol0 138G   50G   82G  38% /u01/data

Phew! That was something :) This is how you extend filesystem in Linux, to have more space for useless data :) Cheers :)

Refresh the SCSI-Disk information

If you add a disk on VM, it MIGHT not be there IMMEDIATELY so you have two options:

  • Restart the server
  • Rescan the disks

So since restarting of the server isn't always possible to restart the server. Luckly we have a command for that:

Re-scan SCSIs

echo "- - -" > /sys/class/scsi_host/host0/scan
echo "- - -" > /sys/class/scsi_host/host1/scan
echo "- - -" > /sys/class/scsi_host/host2/scan
echo "- - -" > /sys/class/scsi_host/host3/scan

After that the disk should be available using fdisk:

Disk /dev/sdp: 107.3 GB, 107374182400 bytes
255 heads, 63 sectors/track, 13054 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Disk /dev/sdp doesn't contain a valid partition table

  • linux_fs_mgm_lvm.txt
  • Last modified: 2020/09/11 07:25
  • by andonovj