See the Disk Formatting Tutorial at www.FreeBSD.org.
The best way is to reinstall the OS on the new disk, then move the user data over. This is highly recommended if you have been tracking -stable for more than one release, or have updated a release instead of installing a new one. You can install booteasy on both disks with boot0cfg(8), and dual boot them until you are happy with the new configuration. Skip the next paragraph to find out how to move the data after doing this.
Should you decide not to do a fresh install, you need to partition and label the new disk with either /stand/sysinstall, or fdisk(8) and disklabel(8). You should also install booteasy on both disks with boot0cfg(8), so that you can dual boot to the old or new system after the copying is done. See the formatting-media article for details on this process.
Now you have the new disk set up, and are ready to move the data. Unfortunately, you cannot just blindly copy the data. Things like device files (in /dev), flags, and links tend to screw that up. You need to use tools that understand these things, which means dump(8). Although it is suggested that you move the data in single user mode, it is not required.
You should never use anything but dump(8) and restore(8) to move the root file system. The tar(1) command may work - then again, it may not. You should also use dump(8) and restore(8) if you are moving a single partition to another empty partition. The sequence of steps to use dump to move a partitions data to a new partition is:
newfs the new partition.
mount it on a temporary mount point.
cd to that directory.
dump the old partition, piping output to the new one.
For example, if you are going to move root to /dev/ad1s1a, with /mnt as the temporary mount point, it is:
# newfs /dev/ad1s1a # mount /dev/ad1s1a /mnt # cd /mnt # dump 0af - / | restore xf -
Rearranging your partitions with dump takes a bit more work. To merge a partition like /var into its parent, create the new partition large enough for both, move the parent partition as described above, then move the child partition into the empty directory that the first move created:
# newfs /dev/ad1s1a # mount /dev/ad1s1a /mnt # cd /mnt # dump 0af - / | restore xf - # cd var # dump 0af - /var | restore xf -
To split a directory from its parent, say putting /var on its own partition when it was not before, create both partitions, then mount the child partition on the appropriate directory in the temporary mount point, then move the old single partition:
# newfs /dev/ad1s1a # newfs /dev/ad1s1d # mount /dev/ad1s1a /mnt # mkdir /mnt/var # mount /dev/ad1s1d /mnt/var # cd /mnt # dump 0af - / | restore xf -
You might prefer cpio(1), pax(1), tar(1) to dump(8) for user data. At the time of this writing, these are known to lose file flag information, so use them with caution.
The installation procedure allows you to chose two different methods in partitioning your hard disk(s). The default way makes it compatible with other operating systems on the same machine, by using fdisk table entries (called "slices" in FreeBSD), with a FreeBSD slice that employs partitions of its own. Optionally, one can chose to install a boot-selector to switch between the possible operating systems on the disk(s). The alternative uses the entire disk for FreeBSD, and makes no attempt to be compatible with other operating systems.
So why it is called "dangerous"? A disk in this mode does not contain what normal PC utilities would consider a valid fdisk table. Depending on how well they have been designed, they might complain at you once they are getting in contact with such a disk, or even worse, they might damage the BSD bootstrap without even asking or notifying you. In addition, the "dangerously dedicated" disk's layout is known to confuse many BIOSes, including those from AWARD (e.g. as found in HP Netserver and Micronics systems as well as many others) and Symbios/NCR (for the popular 53C8xx range of SCSI controllers). This is not a complete list, there are more. Symptoms of this confusion include the ``read error'' message printed by the FreeBSD bootstrap when it cannot find itself, as well as system lockups when booting.
Why have this mode at all then? It only saves a few kbytes of disk space, and it can cause real problems for a new installation. "Dangerously dedicated" mode's origins lie in a desire to avoid one of the most common problems plaguing new FreeBSD installers - matching the BIOS "geometry" numbers for a disk to the disk itself.
"Geometry" is an outdated concept, but one still at the heart of the PC's BIOS and its interaction with disks. When the FreeBSD installer creates slices, it has to record the location of these slices on the disk in a fashion that corresponds with the way the BIOS expects to find them. If it gets it wrong, you will not be able to boot.
"Dangerously dedicated" mode tries to work around this by making the problem simpler. In some cases, it gets it right. But it is meant to be used as a last-ditch alternative - there are better ways to solve the problem 99 times out of 100.
So, how do you avoid the need for "DD" mode when you are installing? Start by making a note of the geometry that your BIOS claims to be using for your disks. You can arrange to have the kernel print this as it boots by specifying -v at the boot: prompt, or using boot -v in the loader. Just before the installer starts, the kernel will print a list of BIOS geometries. Do not panic - wait for the installer to start and then use scrollback to read the numbers. Typically the BIOS disk units will be in the same order that FreeBSD lists your disks, first IDE, then SCSI.
When you are slicing up your disk, check that the disk geometry displayed in the FDISK screen is correct (ie. it matches the BIOS numbers); if it is wrong, use the g key to fix it. You may have to do this if there is absolutely nothing on the disk, or if the disk has been moved from another system. Note that this is only an issue with the disk that you are going to boot from; FreeBSD will sort itself out just fine with any other disks you may have.
Once you have got the BIOS and FreeBSD agreeing about the geometry of the disk, your problems are almost guaranteed to be over, and with no need for "DD" mode at all. If, however, you are still greeted with the dreaded ``read error'' message when you try to boot, it is time to cross your fingers and go for it - there is nothing left to lose.
To return a "dangerously dedicated" disk for normal PC use, there are basically two options. The first is, you write enough NULL bytes over the MBR to make any subsequent installation believe this to be a blank disk. You can do this for example with
# dd if=/dev/zero of=/dev/rda0 count=15
Alternatively, the undocumented DOS "feature"
C:\> fdisk /mbr
will to install a new master boot record as well, thus clobbering the BSD bootstrap.
Short answer: you can usually use softupdates safely on all partitions.
Long answer: There used to be some concern over using softupdates on the root partition. Softupdates has two characteristics that caused this. First, a softupdates partition has a small chance of losing data during a system crash. (The partition will not be corrupted; the data will simply be lost.) Also, softupdates can cause temporary space shortages.
When using softupdates, the kernel can take up to thirty seconds to actually write changes to the physical disk. If you delete a large file, the file still resides on disk until the kernel actually performs the deletion. This can cause a very simple race condition. Suppose you delete one large file and immediately create another large file. The first large file is not yet actually removed from the physical disk, so the disk might not have enough room for the second large file. You get an error that the partition does not have enough space, although you know perfectly well that you just released a large chunk of space! When you try again mere seconds later, the file creation works as you expect. This has left more than one user scratching his head and doubting his sanity, the FreeBSD filesystem, or both.
If a system should crash after the kernel accepts a chunk of data for writing to disk, but before that data is actually written out, data could be lost or corrupted. This risk is extremely small, but generally manageable. Use of IDE write caching greatly increases this risk; it is strongly recommended that you disable IDE write caching when using softupdates.
These issues affect all partitions using softupdates. So, what does this mean for the root partition?
Vital information on the root partition changes very rarely. Files such as /kernel and the contents of /etc only change during system maintenance, or when users change their passwords. If the system crashed during the thirty-second window after such a change is made, it is possible that data could be lost. This risk is negligible for most applications, but you should be aware that it exists. If your system cannot tolerate this much risk, do not use softupdates on the root filesystem!
/ is traditionally one of the smallest partitions. By default, FreeBSD puts the /tmp directory on /. If you have a busy /tmp, you might see intermittent space problems. Symlinking /tmp to /var/tmp will solve this problem.
The symptom of this is:
# ccdconfig -C ccdconfig: ioctl (CCDIOCSET): /dev/ccd0c: Inappropriate file type or format
This usually happens when you are trying to concatenate the c partitions, which default to type unused. The ccd driver requires the underlying partition type to be FS_BSDFFS. Edit the disklabel of the disks you are trying to concatenate and change the types of partitions to 4.2BSD.
The symptom of this is:
# disklabel ccd0 (it prints something sensible here, so let us try to edit it) # disklabel -e ccd0 (edit, save, quit) disklabel: ioctl DIOCWDINFO: No disk label on disk; use "disklabel -r" to install initial label
This is because the disklabel returned by ccd is actually a "fake" one that is not really on the disk. You can solve this problem by writing it back explicitly, as in:
# disklabel ccd0 > /tmp/disklabel.tmp # disklabel -Rr ccd0 /tmp/disklabel.tmp # disklabel -e ccd0 (this will work now)
UFS CDROMs can be mounted directly on FreeBSD. Mounting disk partitions from Digital UNIX and other systems that support UFS may be more complex, depending on the details of the disk partitioning for the operating system in question.
As of 2.2, FreeBSD supports ext2fs partitions. See mount_ext2fs(8) for more information.
A read-only NTFS driver exists for FreeBSD. For more information, see this tutorial by Mark Ovens at http://ukug.uk.FreeBSD.org/~mark/ntfs_install.html.
Any other information on this subject would be appreciated.
The secondary DOS partitions are found after ALL the primary partitions. For example, if you have an "E" partition as the second DOS partition on the second SCSI drive, you need to create the special files for "slice 5" in /dev, then mount /dev/da1s5:
# cd /dev # sh MAKEDEV da1s5 # mount -t msdos /dev/da1s5 /dos/e
Yes; see the security/cfs port.
This procedure is slightly different for 2.2.x and 3.x (with the 3-stage boot) systems.
The general idea is that you copy the first sector of your native root FreeBSD partition into a file in the DOS/NT partition. Assuming you name that file something like c:\bootsect.bsd (inspired by c:\bootsect.dos), you can then edit the c:\boot.ini file to come up with something like this:
[boot loader] timeout=30 default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS [operating systems] multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Windows NT" C:\BOOTSECT.BSD="FreeBSD" C:\="DOS"
For 2.2.x systems this procedure assumes that DOS, NT, FreeBSD, or whatever have been installed into their respective fdisk partitions on the same disk. This example was tested on a system where DOS & NT were on the first fdisk partition, and FreeBSD on the second. FreeBSD was also set up to boot from its native partition, not the disk's MBR.
Mount a DOS-formatted floppy (if you have converted to NTFS) or the FAT partition, under, say, /mnt.
# dd if=/dev/rda0a of=/mnt/bootsect.bsd bs=512 count=1
Reboot into DOS or NT. NTFS users copy the bootsect.bsd and/or the bootsect.lnx file from the floppy to C:\. Modify the attributes (permissions) on boot.ini with:
C:\> attrib -s -r c:\boot.ini
Edit to add the appropriate entries from the example boot.ini above, and restore the attributes:
C:\> attrib +s +r c:\boot.ini
If FreeBSD is booting from the MBR, restore it with the DOS fdisk command after you reconfigure them to boot from their native partitions.
For FreeBSD 3.x systems the procedure is somewhat simpler.
If FreeBSD is installed on the same disk as the NT boot partition simply copy /boot/boot1 to C:\BOOTSECT.BSD However, if FreeBSD is installed on a different disk /boot/boot1 will not work, /boot/boot0 is needed.
WarningDO NOT SIMPLY COPY /boot/boot0 INSTEAD OF /boot/boot1, YOU WILL OVERWRITE YOUR PARTITION TABLE AND RENDER YOUR COMPUTER UN-BOOTABLE!
When the FreeBSD boot manager runs it records the last OS booted by setting the active flag on the partition table entry for that OS and then writes the whole 512-bytes of itself back to the MBR so if you just copy /boot/boot0 to C:\BOOTSECT.BSD then it writes an empty partition table, with the active flag set on one entry, to the MBR.
If you have FreeBSD and Linux on the same disk, just follow LILO's installation instructions for booting a non-Linux operating system. Very briefly, these are:
Boot Linux, and add the following lines to /etc/lilo.conf:
other=/dev/hda2 table=/dev/hda label=FreeBSD
(the above assumes that your FreeBSD slice is known to Linux as /dev/hda2; tailor to suit your setup). Then, run lilo as root and you should be done.
If FreeBSD resides on another disk, you need to add loader=/boot/chain.b to the LILO entry. For example:
other=/dev/dab4 table=/dev/dab loader=/boot/chain.b label=FreeBSD
In some cases you may need to specify the BIOS drive number to the FreeBSD boot loader to successfully boot off the second disk. For example, if your FreeBSD SCSI disk is probed by BIOS as BIOS disk 1, at the FreeBSD boot loader prompt you need to specify:
On FreeBSD 2.2.5 and later, you can configure boot(8) to automatically do this for you at boot time.
The Linux+FreeBSD mini-HOWTO is a good reference for FreeBSD and Linux interoperability issues.
Install LILO at the start of your Linux boot partition instead of in the Master Boot Record. You can then boot LILO from BootEasy.
If you are running Windows-95 and Linux this is recommended anyway, to make it simpler to get Linux booting again if you should need to reinstall Windows95 (which is a Jealous Operating System, and will bear no other Operating Systems in the Master Boot Record).
You can not do that with the standard boot manager without rewriting it. There are a number of other boot managers in the sysutils ports category that provide this functionality.
Whether it is a removable drive like a ZIP or an EZ drive (or even a floppy, if you want to use it that way), or a new hard disk, once it is installed and recognized by the system, and you have your cartridge/floppy/whatever slotted in, things are pretty much the same for all devices.
(this section is based on Mark Mayo's ZIP FAQ)
If it is a ZIP drive or a floppy, you have already got a DOS filesystem on it, you can use a command like this:
# mount -t msdos /dev/fd0c /floppy
if it is a floppy, or this:
# mount -t msdos /dev/da2s4 /zip
for a ZIP disk with the factory configuration.
For other disks, see how they are laid out using fdisk(8) or sysinstall(8).
The rest of the examples will be for a ZIP drive on da2, the third SCSI disk.
Unless it is a floppy, or a removable you plan on sharing with other people, it is probably a better idea to stick a BSD file system on it. You will get long filename support, at least a 2X improvement in performance, and a lot more stability. First, you need to redo the DOS-level partitions/filesystems. You can either use fdisk(8) or /stand/sysinstall, or for a small drive that you do not want to bother with multiple operating system support on, just blow away the whole FAT partition table (slices) and just use the BSD partitioning:
# dd if=/dev/zero of=/dev/rda2 count=2 # disklabel -Brw da2 auto
You can use disklabel or /stand/sysinstall to create multiple BSD partitions. You will certainly want to do this if you are adding swap space on a fixed disk, but it is probably irrelevant on a removable drive like a ZIP.
Finally, create a new file system, this one is on our ZIP drive using the whole disk:
# newfs /dev/rda2c
and mount it:
# mount /dev/da2c /zip
and it is probably a good idea to add a line like this to /etc/fstab (see fstab(5)) so you can just type mount /zip in the future:
/dev/da2c /zip ffs rw,noauto 0 0
This generally means that there is no CDROM in the CDROM drive, or the drive is not visible on the bus. Please see the Using Data CDs section of the Handbook for a detailed discussion of this issue.
If you try to mount an audio CD, you will get an error like ``cd9660: /dev/acd0c: Invalid argument''. This is because mount only works on filesystems. Audio CDs do not have filesystems; they just have data. You need a program that reads audio CDs, such as the audio/xmcd port.
By default, mount(8) will attempt to mount the last data track (session) of a CD. If you would like to load an earlier session, you must use the -s command line argument. Please see mount_cd9660(8) for specific examples.
Ordinary users can be permitted to mount devices. Here is how:
As root set the sysctl variable vfs.usermount to 1.
# sysctl -w vfs.usermount=1
As root assign the appropriate permissions to the block device associated with the removable media.
For example, to allow users to mount the first floppy drive, use:
# chmod 666 /dev/fd0
To allow users in the group operator to mount the CDROM drive, use:
# chgrp operator /dev/cd0c # chmod 640 /dev/cd0c
Finally, add the line vfs.usermount=1 to the file /etc/sysctl.conf so that it is reset at system boot time.
All users can now mount the floppy /dev/fd0 onto a directory that they own:
% mkdir ~/my-mount-point % mount -t msdos /dev/fd0 ~/my-mount-point
Users in group operator can now mount the CDROM /dev/cd0c onto a directory that they own:
% mkdir ~/my-mount-point % mount -t msdos /dev/cd0c ~/my-mount-point
Unmounting the device is simple:
% umount ~/my-mount-point
Enabling vfs.usermount, however, has negative security implications. A better way to access MSDOS formatted media is to use the mtools package in the ports collection.
You need to understand what du and df really do. du goes through the directory tree, measures how large each file is, and presents the totals. df just asks the filesystem how much space it has left. They seem to be the same thing, but a file without a directory entry will affect df but not du.
When a program is using a file, and you delete the file, the file is not really removed from the filesystem until the program stops using it. The file is immediately deleted from the directory listing, however. You can see this easily enough with a program such as more. Assume you have a file large enough that its presence affects the output of du and df. (Since disks can be so large today, this might be a very large file!) If you delete this file while using more on it, more does not immediately choke and complain that it cannot view the file. The entry is simply removed from the directory so no other program or user can access it. du shows that it is gone -- it has walked the directory tree and the file is not listed. df shows that it is still there, as the filesystem knows that more is still using that space. Once you end the more session, du and df will agree.
Note that softupdates can delay the freeing of disk space; you might need to wait up to 30 seconds for the change to be visible!
This situation is common on web servers. Many people set up a FreeBSD web server and forget to rotate the log files. The access log fills up /var. The new administrator deletes the file, but the system still complains that the partition is full. Stopping and restarting the web server program would free the file, allowing the system to release the disk space. To prevent this from happening, set up newsyslog(8).