Install and Configure SMTP Server on Windows Server 2016

The steps to setup and configure an SMTP Server or mail relay on Windows Server 2016 are almost exactly the same as those for Windows Server 2012 except for a few differences. Confusion has arisen due to slight GUI changes in Server 2016, which has led me to create this post to help anyone that requires explicit step-by-step instructions.

Note: The exact steps for installing SMTP Server on Windows Server 2012 can be found in this previous post of mine.

Installing the SMTP feature

1. Click on the Windows button and click on the Server Manager icon in the menu to load the Server Manager Dashboard:

20170526164721

Alternatively, open it via Powershell by entering servermanager.exe at the prompt to load the Server Manager Dashboard:

PS C:\> servermanager.exe

2. When the Server Manager Dashboard loads, click on Add roles and features in the center pane as highlighted below:

20170526012744

The Add Roles and Features Wizard will load, click Next to go past the initial Before You Begin Page:

20170526012839

3. In the Select installation type section, select Role-based or feature-based installation and click Next:

20170526013937

4. In the Select destination server section, select your server, in my example below, my server is called vs11app003, then click Next to proceed:

20170526014003

5. In the Select Server Roles section do not select anything and click Next to proceed:

20170526014032

6. In the Select features check SMTP Server:

20170526014121

Doing so will initiate a prompt to install the required roles services and features. Ensure you check the Include management tools (if applicable) box per the below and click Add Features to proceed:

20170526014203

7. Back at the Select features section, with SMTP Server selected click Next to proceed:

20170526014233

8. In the Web Server Role (IIS) section click Next to proceed:

20170526014309

9. Check Web Server then click Next to proceed:

20170526014513

10. The Confirm installation selections section will show all the role and feature configuration options you previously selected:

20170526014602

Checking Restart the destination server automatically if required is not necessary, if you do you will see the following warning:

20170526014630

Click Yes and the installation will begin:

20170526014709

11. Once the installation completes click Close:

20170526090039

The installation should complete shortly. You nay need to reboot your server to fully complete the installation.

Configuring the SMTP Server

The next step is to configure SMTP. To do so we will need to open Internet Information Services (IIS) Manager 6.

12. Click on the Windows button per step 1 to load the Server Manager Dashboard. Then click Tools and then click on Internet Information Services (IIS) 6.0 Manager to load IIS Manager 6:

20170528005334

13. In IIS 6 Manager, expand the server name, in my example below it is VS11APP003, then right-click on [SMTP Virtual Server #1] and select Properties:

20170526090654

14. In the General tab, unless you want the SMTP Server to use a specific IP address,  leave the settings as they are so that the IP address is set to (All Unassigned):

20170526090949

15. To proceed, click on the Access tab:

20170526092536

16. Click on the Authentication button and ensure Anonymous access is checked and then click OK:

20170526092606

17. Once back in the Access tab, click on the Connection button. Select Only the list below and then click Add. Enter 127.0.0.1 as the IP address and then click OK:

20170526092934

The Connection setting controls which computers can connect to the SMTP server and send mail. By granting only localhost (127.0.0.1) access, limits only the server itself the ability to connect to the SMTP server. This is a requirement for security. Click OK to return to the Access tab and then click on the Relay button. Enter 127.0.0.1 as the IP address and then click OK:

20170526092759

The Relay section determines which computers can relay mail through this SMTP server. By only allowing the localhost IP address (127.0.0.1) relay permissions it means that only the server itself can relay mail. Conversely, it prevents the SMTP server from being an open relay and being used to send unsolicited spam email by other computers on the internet, which could lead to the SMTP server being blacklisted.

18. Next, go to the Messages tab. Here you can enter an email address where copies of non-delivery reports are sent to. You can also configure the location of the Badmail director, however, the default setting should suffice:

20170526093025

19. Next, go to the Delivery tab:

20170528010430

20. Click on the Outbound Security button and ensure Anonymous access is selected. As the only server that can connect and relay mail through the SMTP server is localhost this security settings is fine:

20170526093758

21. Click OK to return to the Delivery tab and then click on Outbound Connections. Leave the defaults as they are:

20170526093843

22. Click OK to return to the Delivery tab and then click on the Advanced button:

20170526093957

Here you will need to enter the fully-qualified domain name of the SMTP server. This will be the host name or A record that has been created in your DNS zone file. This is straight-forward to do but you will have to confirm how you do this with the party that manages DNS for your domain. I have entered mail.vsysad.com as this is fully-qualified. If you click on the Check DNS button you can confirm whether your chosen name resolves successfully. In my case it does as I see the following:

20170526094249

23. Click OK and then OK again to exit the SMTP Virtual Server #1 Properties. You can also perform this test by running nslookup to confirm the existence of the host name as well as confirming the IP address it resolves to – which should the IP address of your server:

20170526094855

Please note that DNS is crucial to successful email delivery. If your SMTP server cannot resolve the domains it is trying to send messages to then it will fail. Ensure that the DNS servers you have configured are able to resolve DNS queries successfully. From the above screenshot you can see that the DNS server I have configured, google-public-dns-a.google.com, was able to successfully resolve my SMTP server’s hostname, mail.vsysad.com.

The reason I am highlighting this is because if your SMTP Server sits within a corporate network it will likely use an internal DNS server. Often these are only configured to resolve internal namespaces therefore resolving external hostnames may fail. Also, firewall rules may block your SMTP Server from querying any DNS servers so please check and ensure DNS queries are resolved successfully and if not make sure it get fixed before going onto the testing phase below.

Another very important point about DNS is that you must ensure that you have a PTR record for reverse DNS lookups configured. The PTR record allows your SMTP Server’s public IP address to be resolved back to your hostname. Some of the major email providers perform revers DNS lookups of  mail servers connecting to them as a security measure to check their credibility or reputation. Your web host should have a control panel that allows you to configure reverse DNS if you have a dedicated public IP address. Not having a PTR record will not guarantee email delivery failure but it will very likely delay email delivery and at worst may result in your messages being blocked and your host being blacklisted. I highly recommend you you configure a PTR record for your server.

Follow the instructions in this post which shows you how to verify correct DNS configuration using the SMTPDIAG tool.

24. The last configuration step will be to set the SMTP Service to Automatic so that it automatically starts when the server boots up. Open up the Powershell console and run the command below to enable this setting:

PS C:\> set-service smtpsvc -StartupType Automatic

Then run the command below to confirm that the service is actually running:

PS C:\> get-service smtpsvc

Status   Name               DisplayName
------   ----               -----------
Running  smtpsvc            Simple Mail Transfer Protocol (SMTP)

If the SMTP Service is not running the command will return a status of Stopped. If that is the case then run the command below to start it:

PS C:\> start-service smtpsvc

We are now ready to test the configuration.

 Testing the SMTP Server

The next step is to verify that the SMTP server is able to send email successfully. To do this follow the steps below:

25. Open a PowerShell console and simply run the command below, ensuring that you complete the sending and receiving email addresses plus the subject and body text:

PS C:\> Send-MailMessage -SMTPServer localhost -To xxxxx@gmail.com -From blog@vsysad.com -Subject "This is a test email" -Body "Hi Japinator, this is a test email sent via PowerShell"

The above command sent an email to my Gmail account, a screenshot of the email generated is below:

20131031223718

You can save the above command in a file with a .ps1 (PowerShell) file extension and run it whenever you need to test sending/routing of mail.

That’s all there is to it! Now you have a fully functioning STMP server that can successfully send emails. Many of the companies that I have worked with use this method to send emails generated by their web applications.

If emails are not being successfully delivered you may notice that messages are building up in specific SMTP folders. Visit this post to understand the purpose of each SMTP folder and how to approach issues when messages are queuing up in those folders.

References:
How to test outbound mail flow with a file in the Pickup folder
IIS SMTP Folder Structure and how SMTP service works

LVM – Setup and configure Filesystems in RHEL 6/Centos 6 – Part 4

Welcome to Part 4 of this series of 4 articles detailing how to setup and configure multiple filesystems running on LVM partitions. Each article will cover a specific topic, per the below:

Part 1 – Setup and configure Physical Volumes
Part 2 – Setup and configure Volume Groups
Part 3 – Setup and configure Logical Volumes
Part 4 – Setup and configure Filesystems

In Part 4 we are going to we will:

  • Format the logical volumes with the ext4 filesystem.
  • Mount the logical volumes create in Part 3 as filesystems.
  • Add these filesystems into /etc/fstab to ensure they are mounted during the boot process.

To format the music logical volume with the ext4 filesystem run:

mkfs.ext4 /dev/data/music

The resulting output is:

[root@lnx-svr-01 ~]# mkfs.ext4 /dev/data/music
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
655360 inodes, 2621440 blocks
131072 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2684354560
80 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

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

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

Perform the same steps for the video and pictures logical volumes.

Now that the filesystems have been created, we need to mount them. First, We will create the folders upon which the filesystems will be mounted, their relationships to the corresponding folders (mount point) is:

music -------> /var/music
video -------> /var/video
pictures ----> /var/pictures

Run mkdir to create the folder above:

mkdir /var/music /var/video /var/pictures

Mount the newly created filesystems by running the mount command per the below:

mount /dev/data/music /var/music
mount /dev/data/video /var/video
mount /dev/data/pictures /var/pictures

Then run df -h to see the currently mounted filesystems:

[root@lnx-svr-01 ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
                       18G  903M   16G   6% /
tmpfs                 939M     0  939M   0% /dev/shm
/dev/sda1             477M   25M  427M   6% /boot
/dev/mapper/data-music
                      9.8G   23M  9.2G   1% /var/music
/dev/mapper/data-video
                      4.8G   10M  4.6G   1% /var/video
/dev/mapper/data-pictures
                      4.8G   10M  4.6G   1% /var/pictures
[root@lnx-svr-01 ~]#

We can see from the above that our filesystems are listed and mounted. However, we mounted the filesystems manually, we need them to mount automatically when the system boots up, so in order to enable this we need to add them to /etc/fstab.

So to proceed, run vi to edit /etc/fstab:

vi /etc/fstab

This is what is looks like at present:

# /etc/fstab
# Created by anaconda on Sat May 30 19:17:27 2015
#
# 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/VolGroup-lv_root /                       ext4    defaults        1 1
UUID=db505cff-1d69-4f12-b22a-9d4335dc2275 /boot                   ext4    defaults        1 2
/dev/mapper/VolGroup-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

Add the following lines into the file:

/dev/data/music         /var/music              ext4    rw,noatime      0 0
/dev/data/video         /var/video              ext4    rw,noatime      0 0
/dev/data/pictures      /var/pictures           ext4    rw,noatime      0 0

So it looks like this:

# /etc/fstab
# Created by anaconda on Sat May 30 19:17:27 2015
#
# 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/VolGroup-lv_root /                       ext4    defaults        1 1
UUID=db505cff-1d69-4f12-b22a-9d4335dc2275 /boot                   ext4    defaults        1 2
/dev/mapper/VolGroup-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/data/music         /var/music              ext4    rw,noatime      0 0
/dev/data/video         /var/video              ext4    rw,noatime      0 0
/dev/data/pictures      /var/pictures           ext4    rw,noatime      0 0

Save and exit the file, then reboot the system by running the shutdown command per the below:

[root@lnx-svr-01 ~]# shutdown -r now

Broadcast message from root@lnx-svr-01.vsysad.local
        (/dev/pts/0) at 14:35 ...

The system is going down for reboot NOW!
[root@lnx-svr-01 ~]#

Once the server comes back up, login and run df -h to confirm that all of our filesystems are mounted:

[root@lnx-svr-01 ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
                       18G  903M   16G   6% /
tmpfs                 939M     0  939M   0% /dev/shm
/dev/sda1             477M   25M  427M   6% /boot
/dev/mapper/data-music
                      9.8G   23M  9.2G   1% /var/music
/dev/mapper/data-video
                      4.8G   10M  4.6G   1% /var/video
/dev/mapper/data-pictures
                      4.8G   10M  4.6G   1% /var/pictures
[root@lnx-svr-01 ~]#

There we have it, three filesystems running on LVM partitions which are ready for production use. I hope this was easy to follow and understand. Please also take time to read the references at the bottom, they are excellent resources and were bookmarked by myself for reference whenever I needed to check anything LVM related.

References:
How to Create LVM Partition in RHEL 6 / CentoOS
Linux Basics – LVM (Logical Volume Manager) Tutorial
How to Install LVM on Linux and Disk Operations
A Beginner’s Guide To LVM
How To Create LVM Using vgcreate, lvcreate, and lvextend lvm2 Commands

LVM – Setup and configure Logical Volumes in RHEL 6/Centos 6 – Part 3

Welcome to Part 3 of this series of 4 articles detailing how to setup and configure multiple filesystems running on LVM partitions. Each article will cover a specific topic, per the below:

Part 1 – Setup and configure Physical Volumes
Part 2 – Setup and configure Volume Groups
Part 3 – Setup and configure Logical Volumes
Part 4 – Setup and configure Filesystems

In Part 3 we are going to create the logical volumes within our data volume group. The logical groups to be created are:

music (10GB)
video (5GB)
pictures (5GB)

So to proceed, run the lvcreate command per the below:

lvcreate --name music --size 10G data

The output will be:

[root@lnx-svr-01 ~]# lvcreate --name music --size 10G data
  Logical volume "music" created

Perform the same commands in order to create the video and pictures logical volumes:

lvcreate --name video --size 5G data
lvcreate --name pictures --size 5G data

Please note that there was insufficient space on the data volume group to fit the picture logical volume:

[root@lnx-svr-01 ~]# lvcreate --name pictures --size 5G data
  Volume group "data" has insufficient free space (1274 extents): 1280 required.
[root@lnx-svr-01 ~]#

But as you can see from the above it confirms that there are only 1274 extents available. So we can run lvcreate with the -l option:

[root@lnx-svr-01 ~]# lvcreate --name pictures -l 1274 data
  Logical volume "pictures" created
[root@lnx-svr-01 ~]#

Here I have stated that I want the pictures volume group to be laid down on exactly 1274 extents. Alternatively, I could have run the following command to achieve the same result:

lvcreate -l 100%FREE -n pictures data

The above command will simple use all remaining space for the logical volume creation.

Now run lvdisplay to view all logical volumes:

[root@lnx-svr-01 ~]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/data/music
  LV Name                music
  VG Name                data
  LV UUID                Vpq1Tk-j7wj-6WTi-37bZ-3KQx-AJRA-fUuELr
  LV Write Access        read/write
  LV Creation host, time lnx-svr-01.vsysad.local, 2015-06-11 13:03:20 +0100
  LV Status              available
  # open                 1
  LV Size                10.00 GiB
  Current LE             2560
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:2

  --- Logical volume ---
  LV Path                /dev/data/pictures
  LV Name                pictures
  VG Name                data
  LV UUID                TzB4Gd-ZjYo-4YBD-mRVb-zFek-7j91-pIjzQo
  LV Write Access        read/write
  LV Creation host, time lnx-svr-01.vsysad.local, 2015-06-11 13:17:30 +0100
  LV Status              available
  # open                 1
  LV Size                4.98 GiB
  Current LE             1274
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:3

  --- Logical volume ---
  LV Path                /dev/data/video
  LV Name                video
  VG Name                data
  LV UUID                YPv1jQ-sneY-ee20-aSq3-J3qQ-zivI-WeJkSN
  LV Write Access        read/write
  LV Creation host, time lnx-svr-01.vsysad.local, 2015-06-11 13:35:43 +0100
  LV Status              available
  # open                 1
  LV Size                5.00 GiB
  Current LE             1280
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:4

  --- Logical volume ---
  LV Path                /dev/VolGroup/lv_root
  LV Name                lv_root
  VG Name                VolGroup
  LV UUID                tYZOe0-bhSb-G0fL-7RWK-Vzwq-BG8H-AZyZL9
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2015-05-30 19:17:03 +0100
  LV Status              available
  # open                 1
  LV Size                17.51 GiB
  Current LE             4482
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

  --- Logical volume ---
  LV Path                /dev/VolGroup/lv_swap
  LV Name                lv_swap
  VG Name                VolGroup
  LV UUID                QWeze3-c0cy-dwui-6BkI-LDkc-VSun-7W7yuK
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2015-05-30 19:17:25 +0100
  LV Status              available
  # open                 1
  LV Size                2.00 GiB
  Current LE             512
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:1

[root@lnx-svr-01 ~]#

The logical volumes we created; music, video and pictures are visible. We can run lvscan to view a more concise listing of logical volumes:

[root@lnx-svr-01 ~]# lvscan
  ACTIVE            '/dev/data/music' [10.00 GiB] inherit
  ACTIVE            '/dev/data/pictures' [4.98 GiB] inherit
  ACTIVE            '/dev/data/video' [5.00 GiB] inherit
  ACTIVE            '/dev/VolGroup/lv_root' [17.51 GiB] inherit
  ACTIVE            '/dev/VolGroup/lv_swap' [2.00 GiB] inherit
[root@lnx-svr-01 ~]#

To rename a logical volume run the lvrename command:

lvrename data video movies

The output would be:

[root@lnx-svr-01 ~]# lvrename data video movies
Renamed "video" to "movies" in volume group "data"
[root@lnx-svr-01 ~]#

To delete a logical volume run the lvremove command:

lvremove /dev/data/video

The result would be:

[root@lnx-svr-01 ~]# lvremove /dev/data/video
Do you really want to remove active logical volume video? [y/n]: y
Logical volume "video" successfully removed
[root@lnx-svr-01 ~]#

The lvrename and lvremove examples were for your reference only, there is no need to run them.

This is then end of Part 3. Please go to Part 4, to setup and configure Filesystems.

References:
How to Create LVM Partition in RHEL 6 / CentoOS
Linux Basics – LVM (Logical Volume Manager) Tutorial
How to Install LVM on Linux and Disk Operations
A Beginner’s Guide To LVM
How To Create LVM Using vgcreate, lvcreate, and lvextend lvm2 Commands

LVM – Setup and configure Volume Groups in RHEL 6/Centos 6 – Part 2

Welcome to Part 2 of this series of 4 articles detailing how to setup and configure multiple filesystems running on LVM partitions. Each article will cover a specific topic, per the below:

Part 1 – Setup and configure Physical Volumes
Part 2 – Setup and configure Volume Groups
Part 3 – Setup and configure Logical Volumes
Part 4 – Setup and configure Filesystems

In Part 2 we will cover Volume Group Management and will create a volume group called data and add /dev/sdb1/dev/sdd1 to it by running the following command:

vgcreate data /dev/sdb1 /dev/sdc1 /dev/sdd1

The result of which is:

[root@lnx-svr-01 ~]# vgcreate data /dev/sdb1 /dev/sdc1 /dev/sdd1
  Volume group "data" successfully created
[root@lnx-svr-01 ~]#

To display information about our volume groups we run vgdisplay:

[root@lnx-svr-01 ~]# vgdisplay
  --- Volume group ---
  VG Name               data
  System ID
  Format                lvm2
  Metadata Areas        3
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                3
  Act PV                3
  VG Size               19.98 GiB
  PE Size               4.00 MiB
  Total PE              5114
  Alloc PE / Size       0 / 0
  Free  PE / Size       5114 / 19.98 GiB
  VG UUID               6eGhBN-LhH2-loZy-Vv04-adpB-NTiY-FToZMP

  --- Volume group ---
  VG Name               VolGroup
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  3
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               2
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               19.51 GiB
  PE Size               4.00 MiB
  Total PE              4994
  Alloc PE / Size       4994 / 19.51 GiB
  Free  PE / Size       0 / 0
  VG UUID               4Con9G-f33H-UBae-36Z0-dhOE-K2y4-0HFDty

[root@lnx-svr-01 ~]#

As you can see from the above, we have two volume groups; data and VolGroup. The VolGroup volume group was created during the install of the operating system, so was already present before we created the data volume group in the previous step.

You can run vgscan to scan the system and display volume groups also:

[root@lnx-svr-01 ~]# vgscan
  Reading all physical volumes.  This may take a while...
  Found volume group "data" using metadata type lvm2
  Found volume group "VolGroup" using metadata type lvm2
[root@lnx-svr-01 ~]#

Please note that to rename the data volume group simply run the vgrename command:

[root@lnx-svr-01 ~]# vgrename data store
  Volume group "data" successfully renamed to "store"
[root@lnx-svr-01 ~]#

The above command renames the data volume group to store.

Please also note that to delete the volume group run vgremove:

[root@lnx-svr-01 ~]# vgremove data
  Volume group "data" successfully removed
[root@lnx-svr-01 ~]#

There is no need to run these two commands (vgrename and vgremove), they are for your reference only.

This is then end of Part 2. Please go to Part 3, to setup and configure Logical Volumes.

References:
How to Create LVM Partition in RHEL 6 / CentoOS
Linux Basics – LVM (Logical Volume Manager) Tutorial
How to Install LVM on Linux and Disk Operations
A Beginner’s Guide To LVM
How To Create LVM Using vgcreate, lvcreate, and lvextend lvm2 Commands

LVM – Setup and configure Physical Volumes in RHEL 6/Centos 6 – Part 1

Welcome to Part 1 of this series of 4 articles detailing how to setup and configure multiple filesystems running on LVM partitions. Each article will cover a specific topic, per the below:

Part 1 – Setup and configure Physical Volumes
Part 2 – Setup and configure Volume Groups
Part 3 – Setup and configure Logical Volumes
Part 4 – Setup and configure Filesystems

In Part 1 I will cover how to setup and setup Physical Volumes on three empty disks that have been attached to my test server, which is a VMware VM running Centos 6.6.

Without further ado, let’s proceed. So the first thing to do is ensure LVM is actually installed on your system – my minimal install of Centos 6 had LVM pre-installed however we must still check in order to ensure we can perform all the necessary tasks to complete our goal.

To ensure lvm installed on your server, run the following command:

rpm -qa |grep -i lvm

Running this on my system confirmed that LVM already installed and is version 2:

[root@lnx-svr-01 ~]# rpm -qa |grep -i lvm
lvm2-libs-2.02.111-2.el6.x86_64
lvm2-2.02.111-2.el6.x86_64
[root@lnx-svr-01 ~]#

If it isn’t installed run the following command and enter Yes to any prompts:

[root@lnx-svr-01 ~]#  yum install lvm2*

Next thing to check is our current disk/partition layout by running fdisk -l:

[root@lnx-svr-01 ~]# fdisk -l

Disk /dev/sda: 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: 0x00099a71

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          64      512000   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              64        2611    20458496   8e  Linux LVM

Disk /dev/sdb: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 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

Disk /dev/sdd: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 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

Disk /dev/sdc: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 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

Disk /dev/mapper/VolGroup-lv_root: 18.8 GB, 18798870528 bytes
255 heads, 63 sectors/track, 2285 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

Disk /dev/mapper/VolGroup-lv_swap: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 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

[root@lnx-svr-01 ~]#

We have 4 disks attached to this server, which happens to be a VMware VM. The screenshot below shows the disks in question, Hard disk 1 – Hard disk 4:

20150611165654

The four disks are /dev/sda, /dev/sdb, /dev/sdc and /dev/sdd. There are no partitions yet on /dev/sdb/dev/sdd, these disks are empty. You can see that /dev/sda2 has an LVM partition already as the Id is 8e, which denotes an LVM partition. The System heading confirms that it is indeed Linux LVM.

We will now create the partitions /dev/sdb1, /dev/sdc1 and /dev/sdd1. I will start the process by partitioning /dev/sdb:

[root@lnx-svr-01 ~]# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x2ac771b0.
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): m
Command action
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition
   l   list known partition types
   m   print this menu
   n   add a new partition
   o   create a new empty DOS partition table
   p   print the partition table
   q   quit without saving changes
   s   create a new empty Sun disklabel
   t   change a partition's system id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit
   x   extra functionality (experts only)

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-652, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-652, default 652):
Using default value 652

Command (m for help): t
Selected partition 1
Hex code (type L to list codes): L

 0  Empty           24  NEC DOS         81  Minix / old Lin bf  Solaris
 1  FAT12           39  Plan 9          82  Linux swap / So c1  DRDOS/sec (FAT-
 2  XENIX root      3c  PartitionMagic  83  Linux           c4  DRDOS/sec (FAT-
 3  XENIX usr       40  Venix 80286     84  OS/2 hidden C:  c6  DRDOS/sec (FAT-
 4  FAT16 <32M      41  PPC PReP Boot   85  Linux extended  c7  Syrinx
 5  Extended        42  SFS             86  NTFS volume set da  Non-FS data
 6  FAT16           4d  QNX4.x          87  NTFS volume set db  CP/M / CTOS / .
 7  HPFS/NTFS       4e  QNX4.x 2nd part 88  Linux plaintext de  Dell Utility
 8  AIX             4f  QNX4.x 3rd part 8e  Linux LVM       df  BootIt
 9  AIX bootable    50  OnTrack DM      93  Amoeba          e1  DOS access
 a  OS/2 Boot Manag 51  OnTrack DM6 Aux 94  Amoeba BBT      e3  DOS R/O
 b  W95 FAT32       52  CP/M            9f  BSD/OS          e4  SpeedStor
 c  W95 FAT32 (LBA) 53  OnTrack DM6 Aux a0  IBM Thinkpad hi eb  BeOS fs
 e  W95 FAT16 (LBA) 54  OnTrackDM6      a5  FreeBSD         ee  GPT
 f  W95 Ext'd (LBA) 55  EZ-Drive        a6  OpenBSD         ef  EFI (FAT-12/16/
10  OPUS            56  Golden Bow      a7  NeXTSTEP        f0  Linux/PA-RISC b
11  Hidden FAT12    5c  Priam Edisk     a8  Darwin UFS      f1  SpeedStor
12  Compaq diagnost 61  SpeedStor       a9  NetBSD          f4  SpeedStor
14  Hidden FAT16 <3 63  GNU HURD or Sys ab  Darwin boot     f2  DOS secondary
16  Hidden FAT16    64  Novell Netware  af  HFS / HFS+      fb  VMware VMFS
17  Hidden HPFS/NTF 65  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE
18  AST SmartSleep  70  DiskSecure Mult b8  BSDI swap       fd  Linux raid auto
1b  Hidden W95 FAT3 75  PC/IX           bb  Boot Wizard hid fe  LANstep
1c  Hidden W95 FAT3 80  Old Minix       be  Solaris boot    ff  BBT
1e  Hidden W95 FAT1
Hex code (type L to list codes): 8e
Changed system type of partition 1 to 8e (Linux LVM)

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

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

Perform the same step for hard disks /dev/sdc – /dev/sdd:

fdisk /dev/sdc
fdisk /dev/sdd

Once you partitioned all the disks run fdisk -l again to see the new partition layout:

[root@lnx-svr-01 ~]# fdisk -l

Disk /dev/sda: 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: 0x00099a71

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          64      512000   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              64        2611    20458496   8e  Linux LVM

Disk /dev/sdb: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 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: 0x2ac771b0

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         652     5237158+  8e  Linux LVM

Disk /dev/sdd: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 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: 0x8b19e7ca

   Device Boot      Start         End      Blocks   Id  System
/dev/sdd1               1         652     5237158+  8e  Linux LVM

Disk /dev/sdc: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 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: 0xfd839be4

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1               1        1305    10482381   8e  Linux LVM

Disk /dev/mapper/VolGroup-lv_root: 18.8 GB, 18798870528 bytes
255 heads, 63 sectors/track, 2285 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

Disk /dev/mapper/VolGroup-lv_swap: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 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

[root@lnx-svr-01 ~]#

As you can see from the output /dev/sdb1, /dev/sdc1 and /dev/sdd1 represent the newly created partitions on each disk (1 = first partition). They are all identified as 8e Linux LVM partitions.

Next, we are going to setup the physical volumes on our newly created partitions by running the pvcreate command:

pvcreate /dev/sdb1 /dev/sdc1 /dev/sdd1

Results from pvcreate:

[root@lnx-svr-01 ~]# pvcreate /dev/sdb1 /dev/sdc1 /dev/sdd1
  Physical volume "/dev/sdb1" successfully created
  Physical volume "/dev/sdc1" successfully created
  Physical volume "/dev/sdd1" successfully created
[root@lnx-svr-01 ~]#

Please note that pvremove deletes the physical volumes, run it for the purposes of learning:

[root@lnx-svr-01 ~]# pvremove /dev/sdb1 /dev/sdc1 /dev/sdd1
  Labels on physical volume "/dev/sdb1" successfully wiped
  Labels on physical volume "/dev/sdc1" successfully wiped
  Labels on physical volume "/dev/sdd1" successfully wiped
[root@lnx-svr-01 ~]#

Then re-run pvcreate to re-create the physical volumes:

[root@lnx-svr-01 ~]# pvcreate /dev/sdb1 /dev/sdc1 /dev/sdd1
  Physical volume "/dev/sdb1" successfully created
  Physical volume "/dev/sdc1" successfully created
  Physical volume "/dev/sdd1" successfully created
[root@lnx-svr-01 ~]#

Now run pvdisplay to display all the physical volumes:

[root@lnx-svr-01 ~]# pvdisplay
  --- Physical volume ---
  PV Name               /dev/sda2
  VG Name               VolGroup
  PV Size               19.51 GiB / not usable 3.00 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              4994
  Free PE               0
  Allocated PE          4994
  PV UUID               tx5fGZ-LURm-Bqgq-Jxqz-AuJD-IWgl-YMxPle

  "/dev/sdb1" is a new physical volume of "4.99 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name
  PV Size               4.99 GiB
  Allocatable           NO
  PE Size               0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               OpA0C8-wv7K-0cZT-3zHW-GXeb-YLM8-hWbRjL

  "/dev/sdc1" is a new physical volume of "10.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdc1
  VG Name
  PV Size               10.00 GiB
  Allocatable           NO
  PE Size               0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               VC7As8-pB3U-GGqa-l0xg-NIVj-jv7l-dTGGHl

  "/dev/sdd1" is a new physical volume of "4.99 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdd1
  VG Name
  PV Size               4.99 GiB
  Allocatable           NO
  PE Size               0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               xKOs8i-UQy1-mpvu-8Hhl-zjF4-FYjb-w4DwSu

[root@lnx-svr-01 ~]#

The output above shows all of the physical volumes on this system.

This is then end of Part 1. Please go to Part 2, to setup and configure Volume Groups.

References:
How to Create LVM Partition in RHEL 6 / CentoOS
Linux Basics – LVM (Logical Volume Manager) Tutorial
How to Install LVM on Linux and Disk Operations
A Beginner’s Guide To LVM
How To Create LVM Using vgcreate, lvcreate, and lvextend lvm2 Commands