Adding Additional Disk Drives to CentOS 5/6
Adding a new drive to CentOS or RedHat systems.
Making use of a second drive for extra space? Here's a quick run-down:
1) Make sure you know which disk is being formatted. First, second, and third drives will be /dev/sda, /dev/sdb, and /dev/sdc respectively. Check this with fdisk -l
[03:50:04] [root@virt ~]# fdisk -l Disk /dev/sda: 34.3 GB, 34359738368 bytes 255 heads, 63 sectors/track, 4177 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sda1 * 1 13 104391 83 Linux /dev/sda2 14 4177 33447330 8e Linux LVM Disk /dev/sdb: 8589 MB, 8589934592 bytes 255 heads, 63 sectors/track, 1044 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Disk /dev/sdb doesn't contain a valid partition table
2) You can see that /dev/sdb (our second hard drive) does not have any partitions. We will need to create a partition(s) on the drive and then make a file system on it, then mount it. Let's write partitions to the drive using fdisk /dev/sdb
:
[03:53:01] [root@virt ~]# fdisk /dev/sdb 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. 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):
3) As you can see from the help menu (by using the command "m") we want to add a new partition. Using the defaults will use the entire disk. After it's created, you will want to use the command "w" to "write table to disk and exit".
Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 1 First cylinder (1-1044, default 1): 1 Last cylinder or +size or +sizeM or +sizeK (1-1044, default 1044): Using default value 1044 Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks. [03:54:58] [root@virt ~]#
4) Now you will notice that the output of fdisk -l /dev/sdb
shows a partition as /dev/sdb1:
[03:57:08] [root@virt ~]# fdisk -l /dev/sdb Disk /dev/sdb: 8589 MB, 8589934592 bytes 255 heads, 63 sectors/track, 1044 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sdb1 1 1044 8385898+ 83 Linux
5) Now we need to create a file system on it. I've always used ext3 for general use/purposes. You'll want to use the command mkfs -t ext3 /dev/sdb1
as shown here:
[03:58:38] [root@virt ~]# mkfs -t ext3 /dev/sdb1 mke2fs 1.39 (29-May-2006) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) 1048576 inodes, 2096474 blocks 104823 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=2147483648 64 block groups 32768 blocks per group, 32768 fragments per group 16384 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 38 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override.
6) Great, now we have a single partitioned secondary drive using ext3 file system. Now you want to create a directory to mount it in; lets just use "/drive2". You'll need to use the command mount -t [filesystem] [source] [mount directory]
to mount it.
[03:59:50] [root@virt ~]# mount -t ext3 /dev/sdb1 /drive2/
7) Now you'll notice, via df, that the drive is mounted:
[03:59:57] [root@virt ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/VolGroup00-LogVol00 28G 1.4G 25G 6% / /dev/sda1 99M 19M 76M 20% /boot tmpfs 1014M 0 1014M 0% /dev/shm /dev/sdb1 7.9G 147M 7.4G 2% /drive2
8) Last step - you want to make sure the drive automatically mounts itself when the server boots/reboots. You'll need to add the following line to your /etc/fstab
file:
/dev/sdb1 /drive2 ext3 defaults 0 0
.
All done!
Great, Thank you very much David,
Regards
very well explained and super useful, many thanks!!
Thank you David,
This was a huge task for me in the past, and I always missed the last step :) Missing the drive on reboot.
This was very helpful and book marked!
at the moment of type fdisk -l
I got this warning
WARNING: GPT (GUID Partition Table) detected on '/dev/sdb'! The util fdisk doesn't support GPT. Use GNU Parted.
HI Cesar,
You will see this if your hard drive is larger than 2TB or already has partitions. If it's a brand new hard drive and you're creating a partition 2TB in size or less, then you will be fine and you can ignore the message.
If you're trying to create a partition larger than 2TB, you will need to use gparted/parted.
All 7 steps work fine for me but on the 8th step getting this type of message
-bash: /dev/xvd5: Permission denied
Sounds like what ever you are running isn't being run as root user.
Step 8 is about editing a file so I am not sure why you would be getting a permission denied for a bash command?
ya i am being as root user
any alternative way for step-8
our server reboot automatically at 12 noon everyday...
Thank you
I have solved the problem with this link and with the help of my colleages.
Dude I share this at least once a week to customers. Awesome How-To!
A really nice guide for even a novoice keep up the good work :)
Very good tutorial! I did this on a CentOS 7 guest on VMware ESXI server. I also found a VMWare kb that said to reboot the host but found this note about not having to reboot the host helpful as it does a scsi detection: http://www.cyberciti.biz/tips/vmware-add-a-new-hard-disk-without-rebooting-guest.html
Followed your guide with the no reboot option form the other noted site and now have a new sdb1 mounted partition to use for backup on my CPanel server!
Thanks for the clear and easy tutorial.
is there a way to add a second drive to be mounted on / ?
in other words, my / (the root partition) is very small. and i have added a new drive like you explained but its mounted at /disk2
however when i try to do anything in centos 7, it tells me i am lacking space. that is because nothing is being written to /disk2 instead its being written to / and that has no more space!
how can i accomplish this?
thank you
It depends. Is it on an LVM? Is this being hosted Physically at a datacenter location or is this in the cloud?
If you're on an LVM, you may be able to shrink or alter the size of another partition (maybe /home?) to give that space to your root partition (/). If you're not on LVM, you may want to use a liveCD like gparted-live (http://gparted.org/livecd.php) to adjust partitions and sizes.
As an alternative, you could always copy, for example, everything under /var/log or /home to the new drive and then have that new drive (with the contents) be mounted at /var/log or /home -- whichever you choose.