Linux Swap Space Creation and Monitoring

Overview

This Post is intended to understand the swap creation, monitoring and extending in Redhat Linux.

Swap space is a restricted amount of physical memory that is allocated for use by the operating system when the amount of physical memory (RAM) is full. If the system needs more memory resources and the RAM is full, inactive pages in memory are moved to the swap space. While swap space can help machines with a small amount of RAM, it should not be considered a replacement for more RAM. Swap space is located on hard drives, which have a slower access time than physical memory. Read more

Recommended System Swap Space
In years past, the recommended amount of swap space increased linearly with the amount of RAM in the system. But because the amount of memory in modern systems has increased into the hundreds of gigabytes, it is now recognized that the amount of swap space that a system needs is a function of the memory workload running on that system. However, given that swap space is usually designated at install time, and that it can be difficult to determine beforehand the memory workload of a system, Redhat recommend determining system swap using the following table.

Amount of RAM in the System Recommended Amount of Swap Space
4GB of RAM or less a minimum of 2GB of swap space
4GB to 16GB of RAM a minimum of 4GB of swap space
16GB to 64GB of RAM a minimum of 8GB of swap space
64GB to 256GB of RAM a minimum of 16GB of swap space
256GB to 512GB of RAM a minimum of 32GB of swap space

Note : On most distributions of Linux, it is recommended that you set swap space while installing the operating system

 

How to Monitor Swap Space

We shall look at different commands and tools that can help you to monitor your swap space usage in your Linux systems as follows

Using the swapon Command

To view all devices marked as swap in the /etc/fstab file you can use the –all option. Though devices that are already working as swap space are skipped

If you want to view a summary of swap space usage by device, use the – summary (swapon –s) option.

[[email protected] ~]# swapon –summary
Filename                                Type            Size    Used    Priority
/dev/dm-1                               partition       2097148 0       -1
[[email protected] ~]# swapon -s
Filename                                Type            Size    Used    Priority
/dev/dm-1                               partition       2097148 0       -1
Note :- Use –help option to view more options and information.
Using /proc/swaps

The /proc filesystem is a process information pseudo-file system. It actually does not contain ‘real’ files but runtime system information, for example system memory, devices mounted, hardware configuration and many more.

[[email protected] ~]# cat /proc/swaps

Filename                                Type            Size    Used    Priority

/dev/dm-1                               partition       2097148 0       -1

[[email protected] ~]#

Using ‘free’ Command
The free command is used to display the amount of free and used system memory. Using the free command with -h option, which displays output in a human readable format.
[[email protected] ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:           7.6G        674M        6.5G        9.8M        507M        6.7G
Swap:          2.0G          0B        2.0G
 Using top Command
To check swap space usage with the help of ‘top’ command
Using the vmstat Command
This command is used to display information about virtual memory statistics
[[email protected] ~]# vmstat
procs ———–memory———- —swap– —–io—- -system– ——cpu—–
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 6791708   2784 516484    0    0     7     0   24   23  0  0 100  0  0
ADDING SWAP SPACE
Sometimes it is necessary to add more swap space after installation
You have three options: create a new swap partition, create a new swap file, or extend swap on an existing LVM2 logical volume. It is recommended that you extend an existing logical volume
Extending Swap on an LVM2 Logical Volume
To extend an LVM2 swap logical volume(suppose /dev/mapper/centos-swap is our swap volume)
1. Disable swapping for the associated logical volume:
[[email protected] ~]# swapoff -v /dev/mapper/centos-swap
swapoff /dev/mapper/centos-swap
[[email protected] ~]# swapon -s
2. Resize the LVM2 logical volume by 256 MB
 [[email protected] ~]# lvresize /dev/mapper/centos-swap -L +256M
  Size of logical volume centos/swap changed from 2.00 GiB (512 extents) to 2.25 GiB (576 extents).
  Logical volume centos/swap successfully resized.
3. Format the new swap space
[[email protected] ~]# mkswap /dev/centos/swap
mkswap: /dev/centos/swap: warning: wiping old swap signature.
Setting up swapspace version 1, size = 2359292 KiB
no label, UUID=5e487401-9ae0-4e1d-adff-2346edfc6244
4. Enable the extended logical volume
[[email protected] ~]# swapon -va
swapon /dev/mapper/centos-swap
swapon: /dev/mapper/centos-swap: found swap signature: version 1, page-size 4, same byte order
swapon: /dev/mapper/centos-swap: pagesize=4096, swapsize=2415919104, devsize=2415919104
5. Test that the logical volume has been extended properly
[[email protected] ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:           7.6G        677M        6.5G        9.8M        507M        6.7G
Swap:          2.2G          0B        2.2G
[[email protected] ~]# swapon -s
Filename                                Type            Size    Used    Priority
/dev/dm-1                               partition       2359292 0       -1
Creating an LVM2 Logical Volume for Swap
To add a swap volume group (suppose /dev/centos/swap2 is the new volume)
1. Create the LVM2 logical volume of size 256 MB
[[email protected] ~]# lvcreate centos -n swap2 -L 256M
  Logical volume “swap2” created.
2. Format the new swap space
[[email protected] ~]# mkswap /dev/centos/swap2
Setting up swapspace version 1, size = 262140 KiB
no label, UUID=6ea40455-47a0-46bf-844e-ec0ebd4a4e6a
3. Add the following entry to the /etc/fstab file
/dev/mapper/centos-swap2 swap                    swap    defaults        0 0
4. Enable the extended logical volume
[[email protected] ~]# swapon –va
swapon /dev/mapper/centos-swap2
swapon: /dev/mapper/centos-swap2: found swap signature: version 1, page-size 4, same byte order
swapon: /dev/mapper/centos-swap2: pagesize=4096, swapsize=268435456, devsize=268435456
5. Verify the swap space
[[email protected] ~]# swapon -s
Filename                                Type            Size    Used    Priority
/dev/dm-1                               partition       2097148 0       -1
/dev/dm-3                               partition       262140  0       -2
Creating a Swap File
To Add a swap file
1. Determine the size of the new swap file in megabytes and multiply by 1024 to determine the number of blocks. For example, the block size of a 64 MB swap file is 65536.
2. At a shell prompt as root, type the following command with count being equal to the desired block size:
[[email protected] ~]# dd if=/dev/zero of=/swapfile bs=1024 count=65536
65536+0 records in
65536+0 records out
67108864 bytes (67 MB) copied, 0.0893063 s, 751 MB/s
[[email protected] ~]# ls -ld /swapfile
-rw-r–r–. 1 root root 67108864 May 17 16:38 /swapfile
[[email protected] ~]# du -sh /swapfile
64M     /swapfile
3. Change the permissions of the newly created file
[[email protected] ~]# chmod 0600 /swapfile
4. Setup the swap file with the command
[[email protected] ~]# mkswap /swapfile
Setting up swapspace version 1, size = 65532 KiB
no label, UUID=8a404550-e8a3-4f2b-9daf-137fc34f7b6d
5. Edit /etc/fstab and enable the newly added swap space
/swapfile          swap            swap    defaults        0 0
[[email protected] ~]# swapon -va
swapon /swapfile
swapon: /swapfile: found swap signature: version 1, page-size 4, same byte order
swapon: /swapfile: pagesize=4096, swapsize=67108864, devsize=67108864
6. Verify the swap space created.
[[email protected] ~]# swapon -s
Filename                                Type            Size    Used    Priority
/dev/dm-1                               partition       2097148 0       -1
/dev/dm-3                               partition       262140  0       -2
/swapfile                               file    65532   0       -3
Hope this has helped you ..
Thanks!!!!

Creating and deleting a hard link in Linux

In one of our recent post (click here to read) we discussed about soft links . Now in this post we will discuss how to create and delete a hard link in Linux.

Hard links are also shortcuts used in Linux, but it is bit different from Soft Links. In case of a hard link, no new Inode will be created. If you are creating a hardlink to a fie with inode number 123456, hard link will use the same Inode. In case of soft links, a new Inode will be created for the link. Data can still be accessed via link even if the original file is deleted or moved to a different location. Read more

Here Let us see the commands and some examples of them.

Syntax :

ln sourcefile linkfile    #ln command is used for hard link creation with this syntax.

Examples :

[[email protected] test]# cat >> testfile  #Created a file named testfile for use in next steps
this is a test file

[[email protected] test]# ls -li

30760 -rw-rw-r– 1 admin admin 20 Jan 3 11:39 testfile #Listing with inode number (30760)

[[email protected] test]#ln testfile testlink #Created a link named testlink

[[email protected] test]# ls -li

30760 -rw-rw-r– 1 admin admin 20 Jan 3 11:39 testfile #Both files with same inode number

30760 -rw-rw-r– 1 admin admin 20 Jan 3 11:39 testlink

[[email protected] test]#more testlink #Source being accessed via link.
this is a test file

 

[[email protected] test]#rm -rf testfile #Deleting the source file

[[email protected] test]#more testlink #Actual content via link even after source deletion.
this is a test file

[[email protected] test]#

Now let us see the link removal. unlink command can be used to remove a link.

Syntax :

unlink linkname

Example

[[email protected] test]#unlink testlink

[[email protected] test]#

Thus we have tried creating and deleting a hard link in Linux. Hope this was helpful for you.

For more posts on Linux please click here. We are happy to have your suggestions/queries in the comments section below.

 

Creating and removing a Symbolic link (soft link) in Linux

Symbolic links or soft links are like shortcuts in Windows systems. We use these to point/redirect to another file/directory. Links are a mandatory in some cases where we need a shortcut to actual data, in our day-to-day tasks. With soft links, we can even point to a directory – which is not possible with hard links. Hard links are discussed in another post, which can be accessed by clicking here.

Let us see how can we create a soft link, how to use it and how can we remove/delete the link below. Read more

Symbolic link can be created by running the ln -s command. Let us see the syntax and example for creating a link.

Syntax :

ln -s target source(linkname)

Example :

[[email protected] test]#ln -s /home/beginnersforum/linux testlink   #A link to linux directory will be created with name testlink

[[email protected] test]#ls -l

lrwxrwxrwx 1 root root   26 Jan  1 2015  testlink -> /home/beginnersforum/linux

[[email protected] test]

Here in the above example, we have created a link named testlink to the directory /home/beginnersforum/linux. Now accessing the testlink will redirect us to the linux directory as required.

 

Now we will see how we can remove the link,.  The command will be unlink for removing the link. Below are the syntax and example for the command.

Syntax :

unlink linkname

Example :

[[email protected] test]#ls -l

lrwxrwxrwx 1 root root   26 Jan  1 2015  testlink -> /home/beginnersforum/linux

[[email protected] test]#unlink testlink                    #Removing the link named testlink

[[email protected] test]#ls -l

[[email protected] test]#

Thus in the above unlink command example, we have removed the link named testlink which was created in our previous example.

For more options with these commands, you may refer to the man pages (man ln, man unlink).

That’s it..! We are done with creation and deletion of soft links. Hope this helped you.

For more posts on Linux please click here. We are happy to have your suggestions/queries in the comments section below.

 

How to resize a linux filesytem without Data Loss

Today i’m going to show you how to resize a filesystem without data loss.This can be quite useful, if you do not use the LVM technology.

Note:- Before doing this in live enviornment, kindly test it in your testbox
Here i’m using my susebox .
Tools Used :- fdisk, umount, fsck, tune2fs, e2fsck, resize2fs.

I’m going to resize the /dev/sdb1 in this tutorial. ( if your partition is named diferently, kindly replace it) Read more

a

s

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

In the above screenshot, you can able to see the harddisk size, mount point etc.

So /dev/sdb harddisk is of 16GB size

/dev/sdb1 is 8.7 GB . and it’s mounted to /testdir directory.

To extend the size of /dev/sdb1 , the filesystem should be unmounted. Here /dev/sdb1 is mounted on /testdir, run the umount command to unmount the same.

s

 

 

 

 

 

 

Now run fsck -n /dev/sdb1 for checking the filesystem.

a

 

 

 

 

Then we need to remove the journal from the filesystem , this will bring ext2 filesystem to /dev/sdb1

s

 

 

 

 

Now run e2fsck to check the filesystem,

t

 

 

 

 

 

 

 

Now we can resize the filesystem using resize2fs tool.

Resize2fs can resize ext2 file systems, but not ext3 file systems, that’s why we changed /dev/sdb1 to ext2 by removing journel from it.

8.7GB is the size of /dev/sdb1 (check the above df -h screenshot). Now we are going to extend  the /dev/sdb1 from 8.7 GB to 15 GB .

Note :- In case of shrinking data , don’t make it smaller than 1.9GB (space used as per df-kh output), you will lose data!

 


So we are going to run resize2fs /dev/sdb1 15000M

dd

 

 

 

 

 

Kindly note the number of blocks (384000) and their size (4k). We need it later..

Now we are going to delete the partition /dev/sdb1 using fdisk tool

” Dont worry about your data 🙂 ”

sss

 

 

 

 

 

 

Next we will create a new /dev/sdb1 partition. It was a primary partition earlier, so  choose p again, and again it is our partition no. 1:

sss

 

 

 

 

 

 

Then comes the important part,

Size of the partition:-

The  First Cylinder is not an issue , it’s default (1). But in the case of  Last Cylinder , we don’t have the value , So we can specify the size in kilobyes (K) .

We can calculate the size like this ,

Last Cylinder Size = The amount of blocks from the resize2fs output *  the size of block

// amount of blocks = 384000 .

// Size of block = 4k

Last Cylinder Size =    384000 * 4k =  1536000K

Apply this with +1536000K and write the partition using ‘w’

dddddThen run fsck -n /dev/sdb1.

 

Then  create the journal on our new /dev/sdb1, thus turning it into an ext3 partition again:

www

 

 

 

 

 

 

Check the size of filesystem,

q

 

 

 

 

Check with df -h and you are good to mount the filesystem.

Capture

 

 

 

 

 

 

Hope this helped.

 

How to use sudo – root privilege for a normal user

Sudo works under Linux / Mac OS X and all UNIX like operating systems. /etc/sudoers (config file that defines or list of who can run what) allows you to delegate authority to give certain users or groups of users the ability to run various commands as the superuser(root) or another user without needing the root password. This is useful for delegating roles and permissions to other users without sharing the root password.

This file must be edited with the visudo command as the root user . The sudo command allows users to do tasks on a Linux system as another user.

Read more

How do I use sudo?

Let us take an example here,

If you want to give the user John, access to restart httpd service. First, Login as root user, then use visudo command edit the config file:

# visudo

 

 

Append the following lines to file:

John ALL= /etc/init.d/httpd restart

Save and close file . Now John user can restart httpd service by typing the following command:

$ sudo /etc/init.d/httpd restart

Output:

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
Password:
Stopping httpd: [ OK ]
Starting httpd: [ OK ]

The sudo command has logged the attempt to the log file /var/log/secure or /var/log/auth.log file:

# tail -f /var/log/secure

Sample outputs:

Nov 15 06:05:36 localhost sudo: John : TTY=pts/1 ; PWD=/home/John ; USER=root ; COMMAND=/etc/init.d/httpd restart

Before running a command with sudo, users usually supply their password. Once authenticated, and if the /etc/sudoers configuration file permits the user access, the command will be run. sudo logs each command run.
a) If you want to allow John to run various commands:

John ALL=/sbin/halt, /bin/kill, /etc/init.d/httpd

b) Allow user John to restart httpd without any password i.e. as root without authenticating himself:

John ALL= NOPASSWD: /etc/init.d/httpd restart

c) Allow user Alex to run any command from /usr/bin directory:

Alex ALL = /usr/bin/*

 

 

d) Allow user Alex to run ALL commands:

Alex ALL =(ALL) ALL

e) If you want to allow system admin user to run all commands (add users to a group eg:- unixsa)
Append the following line:

## Allows people in group unixsa to run all commands
 %unixsa ALL=(ALL) ALL

Save and close the file. Finally, add a group called unixsa:

# groupadd unixsa

Add a user called Alex (existing user) to group unixsa:

# usermod -a -G unixsa Alex

Verify group membership:

# id Alex

Sample Outputs:

uid=5001(Alex) gid=5001(Alex) groups=5001(Alex),110(unixsa)

Login as user Alex and to run any command as the root type:

$ sudo /etc/init.d/network restart

f) If database admin user want to run command as oracle

Append the following lines to /etc/sudoers file:

John ALL=(oracle) /u01/app/oracle/product/11.1.0/db_1/bin/dbstart

In this case, it’s that indicating the user John can execute the dbstart command as oracle occurs. When using sudo to assume the role of a user other than root, use the -u option and give the user name as an argument, followed by the command that should be executed.

$ whoami
John

 

$ sudo -u oracle /u01/app/oracle/product/11.1.0/db_1/bin/dbstart

Output:

Password:
 Processing Database instance "TEST": log file /u01/app/oracle...

That’s all, we have tried all the common options for the sudo command. You may have your queries in the comments section.

 

Red Hat Enterprise Linux specification comparison, RHEL 3/4/5/6 and RHEL 7

Let’s have a look at the specification comparison between different recent versions. Here is list of Hardware and software features (from RedHat) in RHEL 3/4/5/6 and the RHEL 7.

RHEL Read more

Specification Version 3 Version 4 Version 5 Version 6 Version 7
Maximum logical CPUs
x86 16 32 32 32 N/A
Itanium 2 8 256 [512] 256 [1024] N/A N/A
x86_64 8 64 [64] 160 [255] 240 [4096] 160 [5120]
POWER 8 64 [128] 128 128 128
System z 64 (z900) 64 (z10 EC) 101 (zEC12) 101 (zEC12) 101 (zEC12)
Maximum memory
x86 64GB 64GB 16GB 16GB N/A
Itanium 2 128GB 2TB 2TB N/A N/A
x86_64 128GB 256GB [1TB] 1TB 6TB [64TB] 3TB [64TB]
POWER 64GB 128GB [1TB] 512GB [1TB] 2TB 2TB
System z 256GB (z900) 1.5TB (z10 EC) 3TB (z196) 3TB (z196) 3TB (z196)
Maximum number of device paths (“sd” devices)
256 256 1,024 8,192 10,000
Required minimums
x86 256MB 256MB 512MB minimum/1 GB/logical CPU recommended 512MB minimum/1 GB/logical CPU recommended N/A
x86_64 256MB 256MB 512MB minimum/1 GB/logical CPU recommended 1GB minimum/1 GB/logical CPU recommended 1GB minimum/1 GB/logical CPU recommended
Itanium 2 512MB 512MB 512MB/1 GB/logical CPU recommended N/A N/A
POWER 512MB 512MB 1GB minimum/2GB recommended 2GB minimum/2GB required per install 2GB minimum/2GB required per install
Minimum diskspace 800MB 800MB 1GB minimum/5GB recommended 1GB minimum/5GB recommended 10GB minimum/20GB recommended
File systems and storage limits
Maximum filesize (Ext3) 2TB 2TB 2TB 2TB 2TB
Maximum file system size (Ext3) 2TB 8TB 16TB 16TB 16TB
Maximum file size (Ext4) 16TB 16TB 16TB
Maximum file system size (Ext4) 16TB [1EB] 16TB [1EB] 50TB [1EB]
Maximum file size (GFS) 2TB 16TB [8EB] 16TB [8EB] N/A N/A
Maximum file system size (GFS) 2TB 16TB [8EB] 16TB [8EB] N/A N/A
Maximum file size (GFS2) 100TB [8EB] 100TB [8EB] 100TB [8EB]
Maximum file system size (GFS2) 100TB [8EB] 100TB [8EB] 100TB [8EB]
Maximum file size (XFS) 100TB [8EB] 100TB [8EB] 500TB [8EB]
Maximum file system size (XFS) 100TB [16EB] 100TB [16EB] 500TB [16EB]
Maximum Boot LUN size (BIOS) 2TB 2TB 2TB
Maximum Boot LUN size (UEFI) N/A 32bit (i686) – 2TB,
64bit – 16TB (tested limit)
50TB
Maximum x86 per-process virtual address space Approx. 4GB Approx. 4GB Approx. 3GB Approx. 3GB N/A
Maximum x86_64 per-process virtual address space 512GB 2TB 128TB 128TB
Kernel and OS features
Kernel foundation Linux 2.4.21 Linux 2.6.9 Linux 2.6.18 2.6.32 – 2.6.34 3.10
Compiler/toolchain GCC 3.2 GCC 3.4 GCC 4.1 GCC 4.4 GCC 4.8.2
Languages supported 10 15 19 22 22
NIAP/CC certified Yes (3+) Yes (4+) Yes (4+) Yes (4+) Under Evaluation (4+)
Common Criteria certified KVM Evaluated Evaluated Under Evaluation
IPv6 Ready Logo Phase 2 Ready Logo Phase 2 Under Evaluation
FIPS certified Yes (7 modules) Yes (8 modules) Under Evaluation (9 modules)
Common Operating Environment (COE) compliant Yes Yes N/A N/A N/A
LSB-compliant Yes – 1.3 Yes – 3 Yes – 3.1 Yes – 4.0 Under Evaluation (4.1)
GB18030 No Yes Yes Yes Yes
Client environment
Desktop GUI Gnome 2.2 Gnome 2.8 Gnome 2.16 Gnome 2.28 Gnome 3.8
Graphics XFree86 X.org X.org 7.1.1 X.org 7.4 X.org 7.7
OpenOffice V1.1 V1.1.2 V2.0.4 V3.2 LibreOffice V4.1.4
Gnome Evolution V1.4 V2.0 V2.8.0 V2.28 V3.8.5
Default browser Mozilla Firefox Firefox 1.5 Firefox 3.6 Firefox 24.5

Structure of Linux

Here we will be discussing the basics of LINUX, starting with the structure of the OS. The Basic components will be the Kernel, Shell and FHS (Filesystem Hierarchy Standard) . Let’s go through these components in detail..

STRUCTURE

The Kernel

Read more

The Kernel is the Heart of an operating system (OS). Kernel manages everything of a Linux OS. It performs tasks that create and maintain the Linux environment.  It is the communication channel between the hardware and shell. The hardware operations are directed by Shell and are passed through to the right hardware by Kernel.

Structure

SHELL

 

 

Simply put, the shell is a program that takes your commands from the keyboard and gives them to the operating system to perform. . It  is the interface between you and Linux . The commands which we issued , which is interpreted and passed on to the kernel for processing.

 

1

 

There are variable types of shells available in Linux. Most Linux varieties use Bourne-Again shell(bash) but support various others: Korn Shell, Bourne shell, C shell, etc. For all intensive purposes you can just stick with bash but I will show you how to change this if you want to. As you advance you can use shells to create scripts to automate tasks, making your daily routine all the more easier

Filesystem Hierarchy Standard

Linux uses the Filesystem Hierarchy Standard (FHS) file system structure, which defines the names, locations, and permissions for many file types and directories.

4

/ – The root directory. Everything in Linux is under root directory. The first stage of Linux filesystem structure.

/bin – Most of the command binary files are under this directory. General commands including ls, man, mv etc… are all under /bin.

/boot – Necessary boot files for Linux are kept under /boot.

 

 

/dev – The device files are located in /dev

/etc – Configuration files are saved under /etc. This directory is just like the control panel for a Windows host.

/home – For all users except the root user, the home directory will be placed in /home. For e.g, /home/beginnersforum.

/media – /media will be used for mounting external storage devices

/mnt – Temporary mounted file systems

/opt — Application programs directory

/sbin — Additional system binaries.

/tmp – As the name indicates, a temporary directory for files.

/usr – The largest directory in Linux. Application files and config files are also kept under here

/var – var stands for variable , that the Variable data on a system. Data that will change as the system is running (Log files, backups, cache, etc.)

/root – Home directory for root as already discussed

This directory structure is everything in Linux.

We can conclude the basic components of Linux here even-though the topic is very deep. More in coming posts. Enjoy reading…!