While administrating a box, you may wanted to find out what a processes is doing and find out how many file descriptors (fd) are being used. You will surprised to find out that process does open all sort of files:
=> Actual log file
=> /dev files
=> UNIX Sockets
=> Network sockets
=> Library files /lib /lib64
=> Executables and other programs etc
In this quick post, I will explain how to to count how many file descriptors are currently in use on your Linux server system.
Sometimes you try to unmount a disk partition or mounted CD/DVD disk or device, which is accessed by other users, then you will get an error umount: /xxx: device is busy. However, Linux or FreeBSD comes with the fuser command to kill forcefully mounted partition. For example, you can kill all processes accessing the file system mounted at /nas01 using the fuser command.
Understanding device error busy error
Linux / UNIX will not allow you to unmount a device that is busy. There are many reasons for this (such as program accessing partition or open file) , but the most important one is to prevent the data loss. Try the following command to find out what processes have activities on the device/partition. If your device name is /dev/sdb1, enter the following command as root user:
# lsof | grep '/dev/sda1'
vi 4453 vivek 3u BLK 8,1 8167 /dev/sda1
Above output tells that user vivek has a vi process running that is using /dev/sda1. All you have to do is stop vi process and run umount again. As soon as that program terminates its task, the device will no longer be busy and you can unmount it with the following command:
# umount /dev/sda1
How do I list the users on the file-system /nas01/?
Type the following command:
# fuser -u /nas01/
# fuser -u /var/www/
/var/www: 3781rc(root) 3782rc(nginx) 3783rc(nginx) 3784rc(nginx) 3785rc(nginx) 3786rc(nginx) 3787rc(nginx) 3788rc(nginx) 3789rc(nginx) 3790rc(nginx) 3791rc(nginx) 3792rc(nginx) 3793rc(nginx) 3794rc(nginx) 3795rc(nginx) 3796rc(nginx) 3797rc(nginx) 3798rc(nginx) 3800rc(nginx) 3801rc(nginx) 3802rc(nginx) 3803rc(nginx) 3804rc(nginx) 3805rc(nginx) 3807rc(nginx) 3808rc(nginx) 3809rc(nginx) 3810rc(nginx) 3811rc(nginx) 3812rc(nginx) 3813rc(nginx) 3815rc(nginx) 3816rc(nginx) 3817rc(nginx)
The following discussion allows you to unmout device and partition forcefully using mount or fuser Linux commands.
Linux fuser command to forcefully unmount a disk partition
Suppose you have /dev/sda1 mounted on /mnt directory then you can use fuser command as follows:
Type the command to unmount /mnt forcefully:
# fuser -km /mnt
- -k : Kill processes accessing the file.
- -m : Name specifies a file on a mounted file system or a block device that is mounted. In above example you are using /mnt
Linux umount command to unmount a disk partition.
You can also try the umount command with â€“l option on a Linux based system:
# umount -l /mnt
- -l : Also known as Lazy unmount. Detach the filesystem from the filesystem hierarchy now, and cleanup all references to the filesystem as soon as it is not busy anymore. This option works with kernel version 2.4.11+ and above only.
If you would like to unmount a NFS mount point then try following command:
# umount -f /mnt
- -f: Force unmount in case of an unreachable NFS system
Please note that using these commands or options can cause data loss for open files; programs which access files after the file system has been unmounted will get an error.