Content deleted Content added
→Installing Linux on and booting it from FAT volumes using umsdos: update linld or loadlin |
Matthiaspaul (talk | contribs) Improved refs, mentioned DMSDOS |
||
Line 1:
[[Linux]] has several [[filesystem]] drivers for the [[File Allocation Table]] (FAT) filesystem format. These are commonly known by the names used in the <tt>[[mount (Unix)|mount]]</tt> command to invoke particular drivers in the kernel: ''msdos'', ''vfat'', and ''umsdos''.<ref name="StanfieldSmith">{{cite book |title=Linux system administration |series=Craig Hunt Linux library |author-first1=Vicki |author-last1=Stanfield
== Differences, advantages, and disadvantages ==
All of the Linux filesystem drivers support all three FAT types, namely [[FAT12]], [[FAT16]] and [[FAT32]]. Where they differ is in the provision of support for [[long filename]]s, beyond the [[8.3 filename]] structure of the original FAT filesystem format, and in the provision of Unix file semantics that do not exist as standard in the FAT filesystem format such as [[file permissions]].<ref name="StanfieldSmith
=== msdos ===
The ''msdos'' filesystem driver provides no extra Unix file semantics and no long filename support. If a FAT disk filesystem is mounted using this driver, only 8.3 filenames will be visible, no long filenames will be accessible, nor will any long filename data structures of any kind on the disk volume be maintained. The ''vfat'' filesystem driver provides long filename support using the same disk data structures that [[Microsoft Windows]] uses for [[VFAT]] long filename support on FAT format volumes, but it does not support any extra Unix file semantics. The ''umsdos'' filesystem driver provides long filename support, and extra Unix file semantics. However, it does so using on-disk data structures that are not recognized by any filesystem drivers for any operating systems other than Linux.<ref name="StanfieldSmith
=== umsdos ===
The key advantage to ''umsdos'' out of the three is that it provides full Unix file semantics. Therefore, it can be used in situations where it is desirable to install Linux on and run it from a FAT disk volume, which require such semantics to be available. However, Linux installed on and running from such a disk volume is slower than Linux installed on and running from a disk volume formatted with, for example, the [[ext2]] filesystem format.<ref name="StanfieldSmith
=== vfat ===
''vfat'', whilst lacking full Unix file semantics and lacking the ability to have Linux installed on and running from a FAT disk volume, does not have the aforementioned disadvantages of ''umsdos'' when it comes to simply sharing data on a FAT disk volume between Linux and other operating systems such as Windows. Its data structures are the same as those used by Windows for VFAT long filenames, and it does not require running a synchronization utility in order to prevent Windows and Linux data structures from becoming disjoint. For this reason, it is the most appropriate of Linux's FAT filesystem drivers to use in the majority of situations.<ref name="StanfieldSmith
{| class="wikitable sortable"
Line 25:
== Commonalities ==
As mentioned previously, all of the Linux filesystem drivers support all of the three File Allocation Table sizes, 12-bit, 16-bit, and 32-bit. Other common features that they all support are various Linux mounting options (specified with the <tt>-o</tt> option to the <tt>mount</tt> command):<ref name="Smith1
;<tt>uid</tt> and <tt>gid</tt>:These two options tell the filesystem driver to set the (default, in the case of ''umsdos'') owner user ID and group ID to be a single, specified, value for all files in the volume. Both IDs are specified as numeric values (as to be found in the <tt>/etc/passwd</tt> file). So, for example, to specify to the ''vfat'' filesystem driver that all files and directories are to have owner ID 745 and group ID 15, the <tt>mount</tt> command would be invoked as <source lang=bash enclose=none>mount -t vfat -o uid=745,gid=15</source> .<ref name="Smith1"
;<tt>umask</tt>:This option sets the [[umask]] to apply globally to all files in the volume. For example, to specify to the ''vfat'' filesystem driver that no "group" or "other" access is to be allowed, the <tt>mount</tt> command would be invoked as <source lang=bash enclose=none>mount -t vfat -o umask=077</source> .<ref name="Smith1"
;<tt>conv</tt>:This option specifies ''file content conversion'' semantics. It is possible for the filesystem drivers to convert the newline conventions in files, between LF termination and CRLF termination, on the fly as files are read and written. By default this conversion is entirely disabled. The filesystem drivers can perform conversion for some files, attempting to auto-detect what files to convert based upon the extension portion of the filename, or globally for all files. These three conversion levels are specified as <tt>conv=b</tt> (for "binary"), <tt>conv=a</tt> (for "auto-detect"), and <tt>conv=t</tt> (for "text"), respectively. The latter two options carry an inherent risk of corrupting non-text file data. No conversion at all is the default.<ref name="Smith1
== Data structures of umsdos ==
The ''umsdos'' FAT filesystem driver stores all of the extra information relating to Unix file semantics in what, to another FAT filesystem driver, appears to be just a normal file in each directory and subdirectory, named <tt>--LINUX-.---</tt>.<ref name="StanfieldSmith
In the absence of this file in any given directory, and thus by default, the ''umsdos'' filesystem driver provides the same semantics as the ''msdos'' filesystem driver does for the directory: only 8.3 filenames and no extra Unix file semantics. To enable the ''umsdos'' driver's extra abilities, it is necessary to create that file in the directory and synchronize its internal data with the normal FAT data for any existing entries already in the directory. This is done with a tool called <tt>umssync</tt>.<ref name="StanfieldSmith
This is the utility program that is run, across every directory on the disc volume, every time that one switches from running Windows to running Linux, in order for the ''umsdos'' filesystem driver to incorporate any changes made to files and directories by Windows into its private data structures in its <tt>--LINUX-.---</tt> file. By default, the <tt>umssync</tt> tool creates <tt>--LINUX-.---</tt> files in directories if they do not already exist, resulting in such a file in every directory in the disc volume. When switching between Windows and Linux this behaviour is not often considered desirable. Therefore, the normal mode of operation when invoking <tt>umssync</tt> after switching from Windows to Linux (which is usually done by running the tool at Linux boot time from a startup script) is to employ the <tt>-c</tt> option to the command, which prevents the creation of any new <tt>--LINUX-.---</tt> files in directories that do not already possess them.<ref name="StanfieldSmith
== Installing Linux on and booting it from FAT volumes using umsdos ==
As mentioned, ''umsdos'' permits installing Linux on, and then bootstrapping and running it from, a FAT format disc volume. The advantage of this is that it permits the use of Linux on a computer where [[DOS]] is already installed, without requiring that the hard disc be [[partition (computing)|repartitioned]]. Linux is not bootstrapped directly from a [[Volume Boot Record]] in such a scenario. Instead DOS is first bootstrapped, and [[loadlin]] or linld is used to then bootstrap Linux from DOS.<ref name="McCune
The convention for such an installation is for the Linux [[root directory]] to be a subdirectory of the actual root directory of the DOS [[system partition and boot partition|boot volume]], e.g. <tt>C:\LINUX</tt> . The various Linux top-level directories are thus, to DOS, directories such as <tt>C:\LINUX\ETC</tt> (for <tt>/etc</tt>), <tt>C:\LINUX\BIN</tt> (for <tt>/bin</tt>), <tt>C:\LINUX\LIB</tt> (for <tt>/lib</tt>), and so forth. The ''umsdos'' filesystem driver automatically prepends the <tt>C:\LINUX\</tt> to all pathnames. The ___location of the Linux root directory is supplied to the ''umsdos'' filesystem driver in the first place via an option to the <tt>loadlin</tt> command. So, for example, for the aforegiven root directory <tt>loadlin</tt> would be invoked with a command line such as <source lang=bash enclose=none>loadlin c:\linux\boot\vmlinuz rw root=c:\linux</source> .<ref name="McCune
The installation of Linux into such a directory in the first place simply involves unpacking files from an archive into that directory and its subdirectories. Such an installation also generally requires the use of a [[swap file]] rather than a [[swap partition]] for Linux, however this is related to the desire not to repartition the hard disc and unrelated to the ''umsdos'' filesystem driver per se.<ref name="McCune
== Development history and kernel/distribution support ==
Most of the major Linux distributions, including RedHat, SuSE, and Debian, do not employ ''umsdos'' to permit installation of Linux on a FAT disc volume. A few distributions do, however.<ref name="Smith2">{{cite book |title=The multi-boot configuration handbook |series=Handbook Series |author-first=Roderick W. |author-last=Smith |publisher=[[Que Publishing]] |year=2000 |isbn=978-0-7897-2283-6 |pages=256,341–342}}</ref> These include distributions such as Phat Linux, a distribution created by two schoolchildren which installs in <tt>C:\PHAT</tt> on DOS by unpacking a [[ZIP file]] and is booted by running a [[COMMAND.COM]] script named <tt>LINUX.BAT</tt>,<ref name="McCune
The UMSDOS project was started in 1992 by Jacques Gelinas and made available to the net in January 1994 as a patch. It was included in the standard distribution starting with kernel 1.1.36.{{Citation needed|date=September 2009}} UMSDOS was removed from the Linux 2.6.11 kernel for lack of maintenance.{{Citation needed|date=September 2009}} UVFAT, an extension of UMSDOS to use the Windows data structures for long filenames instead of its own, was discontinued before release.<ref>{{Cite web |title
Earlier Linux distributions which used UMSDOS are [[MuLinux]],<ref>[http://mulinux.narod.ru/en_index.html MuLinux Project]</ref> Monkey Linux<ref>[http://projectdevolve.tripod.com/text/descript.htm Monkey Linux Explained]</ref> and Winlinux 2000.<ref>[http://archive.is/20120707065033/http://articles.techrepublic.com.com/5100-10878_11-1044390.html The Linux/Windows combo: Use these resources to make it work]</ref>
Line 53:
== Accessing FAT formatted volumes without kernel support ==
{{further|mtools}}
Although the filesystem drivers in the kernel make it possible to access files and directories on FAT formatted volumes in the normal manner, it is also possible to do so without kernel driver support, using the utility programs that form the [[mtools]] utility suite. Like the ''vfat'' FAT filesystem driver, mtools provides long filename support using the same disc data structures that Microsoft Windows uses.<ref name="Smith2
Alternately, one of the [[FUSE (
== POSIX
A modern equivalent of UMSDOS is POSIX Overlay Filesystem (posixovl). It works in FUSE.
==See also==
*[[DMSDOS]] (DoubleSpace/DriveSpace/Stacker compatible compressed FAT volumes for Linux)
*[[Design of the FAT file system]]
Line 67 ⟶ 68:
==Further reading==
* {{Cite journal |url=http://tldp.org/HOWTO/UMSDOS-HOWTO.html |title=UMSDOS HOW-TO |author-first=Jacques |author-last=Gelinas |version=1.2 |date=2001-12-01 |publisher=[[Linux Documentation Project]]}}
* [http://linux.voyager.hr/umsdos/ UMSDOS developer’s page]
* [http://arstechnica.com/open-source/news/2009/07/vfat-linux-patch-could-circumvent-microsofts-patent-claims.ars New Linux patch could circumvent Microsoft's FAT patents] by Ryan Paul
{{DEFAULTSORT:Fat Filesystem And Linux}}
|