This project assignment is designed to give you experience in
creating, formatting, mounting, and unmounting Linux
filesystems.
1
You will create a disk image file and
mount it.
The commands you will use (and which you should lookup in the
man pages) are dd
, df
, fsck
,
losetup
(LOopback SETUP),
mkfs
, mount
, umount
,
tune2fs
, fuser
, lsof
, and
the file /etc/fstab
(also documented in the man pages).
Disk image files can be used to create bootable media and RAM disks. 2 An image of an entire CD (or of many CDs) can be stored on a hard disk. (This is how CD duplicators or juke-boxes work.)
Make sure you keep an accurate system journal of any and all changes you make to your system! You will need to turn this in, along with the answers to the questions asked below.
Answer the following questions and perform the following tasks:
myfs.img
”.
An image file is just regular file that holds a copy of a filesystems.
They must be carefully created and formatted.
To create a 10 MB filesystem you start by
creating a 10 MB file.
(Verify you have 10 MB of free disk space before
starting this!
If not, use a smaller count of say 1000
.)
Use the dd
command for this:
dd if=/dev/zero of=/tmp/myfs.img bs=1k count=10000
In this example the image file was created in /tmp
.
By default on many systems, that will be a RAM disk.
That is no problem, as long as you complete this project without a
reboot (or the image file will be lost).
If that may be an issue, make sure to create the image file some place
that isn't a RAM disk, such as
“~/tmp/myfs.img
”.
Where ever you put it, make sure you have sufficient disk space for it!
In the rest of this project, we will assume you put it in /tmp
.
losetup
(LOopback SETUP) command, which must be run as root.
The various disk commands work with devices, not files.
So use /dev/loop0
(or another available loopback device)
which will be associated with the image file:
losetup /dev/loop0 /tmp/myfs.img
It is unlikely in our classroom setup, but loop0
may be in
use by some other program.
Use the command “losetup -la
” to see the status
of any in-use loopback devices.
If necessary use a different one such as /dev/loop1
.
The directions below assume you are using /dev/loop0
, so
you should substitute the acutal one you used.
/dev/loop0
as an
unformatted disk.
(You can see this by running lsblk
.)
Use the mkfs
command to format it (and thus the attached
image file) as an ext4
filesystem.
(The type for a CD would be iso
for Linux and
HSFS
for Solaris.
ISO image files can also be created and mounted, usually read-only
though.)
The command mkfs
is actually a common front-end for a family
of related commands, one for each filesystem type.
What is the actual command ultimately
invoked to create an ext4
filesystem?
(Use the man pages to determine this.)mkfs -t ext4 /dev/loop0 10000
mkdir /mnt/myfs mount -t ext4 /dev/loop0 /mnt/myfs
df
command.
How much free space shows for your
filesystem?
Why is this less than 10 MB?cd /mnt/myfs
”.
Run the command “ls -a
”.
What files and/or directories were created
automatically?
What is their purpose? vi
(or some other method):cd /mnt/myfs echo hello > foo
Now run the df
command again.
Why is the size is more (or less) than
the original size minus the six bytes of file foo
?
Finally, run the command “ls -li
”.
What is the inode number of your new
file (“foo
”)?
umount /dev/loop0
What happened?
It didn't work, because you cannot unmount a filesystem if it is in use.
If the current working directory of any process (such as your
shell) is any directory in that filesystem, or if any process
has any file open from that filesystem (such as vi
)
then the device will be considered busy.
Use the commands fuser
and lsof
to
see what files are in use and what processes are using them.
(See the man pages for details on these commands.)
Run the commands “fuser -cuv /mnt/myfs
”
and “lsof -Rw +D /mnt/myfs
”.
What was the output?
What is the meaning of the options used?
/mnt/myfs
is your current directory.
Try to unmount the filesystem again, after changing the current
working directory to your home directory:
cd umount /dev/loop0
What happened this time?
fsck
command on your filesystem.
The fsck
command is actually a common front-end
for a family of related commands, one for each type of file system.
What is the actual command that is run?
(Use the man pages to determine this.)fsck -CVfp /dev/loop0What is the purpose (or meaning) of each of these options used with
fsck
?
(Hint: some options are for the filesystem-specific command, not
the general fsck
command, so look at both man pages
to determine the meaning of the options.)fsck
to fix it.
There are many ways to corrupt the image, such as using a tool
such as hexedit
on the image file.
But it is hard to know exactly where to corrupt the image, in
a way that matters and that can be detected and repaired.
Instead you will use a tool “debugfs
” that
can be used to examine and edit image files.
You will change the link count field of your new file from
“1” to “2”.
You will need to know your file's inode number in order to
run this command (learned in a previous step).
In the command line below, the inode number for the file
foo
is “13”.
If you inode number is different, use that number instead.
Once you have unmounted the filesystem (which you did in a previous step),
run this command, including the quotes and the angle-brackets:
debugfs -wR 'sif <13> links_count 2' /dev/loop0
If this works, there is no output.
(This command is part of the “e2fsprogs
”
package; you can install it as root with
“dnf install e2fsprogs
”.)
Now re-run the same fsck
command as before.
What was the output this time?
tune2fs
command is used to examine and
optionally modify the superblock of ext[234]
filesystems.
Use the man page to determine how to use this command to list
the default values used in your filesystem.
What are the default values for
ext4
filesystems for:
fsck
check is forced)fsck
check is forced)losetup -d /dev/loop0
/etc/fstab
file.
Each line of this file contains what to mount,
the mount point (where to mount it),
the mount
options to use, and other information.
To automatically mount your filesystem at boot time
add this entry to the /etc/fstab
file (make a copy of
the file before editing it.):/tmp/myfs.img /mnt/myfs ext4 owner,loop 0 0What is the meaning of the fields and options used? (Read the man page for
fstab
to find out.)
What is the meaning of the mount options
used?
(Read the man page for mount
to find out.)fstab
and verify they work, but using a simple command to mount your filesystem:mount /mnt/myfsNote that even without the
/etc/fstab
line,
the commandmount -t ext4 -o loop,owner /tmp/myfs.img /mnt/myfswill work. (But who wants to type that each time?) In this case
mount
will automatically associate
/tmp/myfs.img
with an unused loop device, and
umount
will automatically break the connection (detach the
file from the loopback device).
Earlier we merely took advantage of the fact that /dev/loop0
was already associated with /tmp/myfs.img
, so different
mount
options were used./tmp
eventually will be automatically deleted,
either during a reboot or from a cron
job.
What will happen if you don't
remove the line from /etc/fstab
before a reboot?
Would that still happen, if you added the mount
option
“noauto
” to the fstab
entry?
Go ahead and remove that entry now, to avoid any future problems.
file
command can be helpful to determine
the type of these image files, so you can use the right tools
to examine them.)
XFS is the Red Hat default filesystem for enterprise systems, and is popular with large storage systems. While the concepts of storage volumes you learned for ext4 apply, the command are different, and some parameters cannot be changed. (Disk quotas also work differently.)
dnf install xfsprogs
Then, after verifying you have sufficient space, create a larger image file:
dd if=/dev/zero of=/tmp/myfs.img bs=1k count=100000
/dev/loop0
, then format as type XFS.
What are the exact commands you used?
Examine the output.
What is the block size?
How large are inodes?
lsblk --fs
”.)
Note that disk partitions (but not logical volumes) also can have
labels and UUIDs that are independent of the ones for
the volume.
You can view these with the command (run as root)
“lsblk --fs -o +PARTLABEL,PARTUUID
”.
xfsvolume
”, and confirm the
new label is set correctly, and that the UUID hasn't changed.
What were the exact commands you used?
/dev/loop0
in your command).
Now unmount the volume.
Finally, mount it again by specifying the UUID and not the device
name.
What were the exact commands you used?
Which one is commonly preferred, and why?
ext4
image
from the /etc/fstab
file.)
BtrFS is the Fedora default filesystem for workstations since Fedora 33. Unlike ext4 or XFS, BtrFS is different and incorporates many LVM concepts. In this part, create a BtrFS volume as you did in parts I and II and explore various commands (as root):
Check online and in the man pages to understand these commands.
The answers and journal entries from the above list describing the steps you have taken to create and use filesystems.
You can submit your project as email to . Please see your syllabus for more information about submitting projects.
ramfs
,
ext4
tools, and loop devices) are different
or not available on most Unix systems.
For Solaris, see the “lofiadm
” command to work with
the loop devices, “/dev/lofi/num
”,
where num
is 1
, 2
,
3
, ...
Back
man initrd
”).
This is because the virtual memory system is so efficient.
To create a real RAM disk is easy provided you kernel is
configured to include the “ramfs
”
and/or the “tmpfs
” filesystem.
Then:
mkdir /mnt/ramdisk mount -t tmpfs none /mnt/ramdiskThat's it, the RAM disk is already formatted! You can now create files there. All files will be lost when the ram disk is unmounted, of course. To preserve them, you could use
dd
to make an image file first.
Back