##################################################################### ##################################################################### 3.4 ‘od’: Write files in octal or other formats =============================================== ‘od’ writes an unambiguous representation of each FILE (‘-’ means standard input), or standard input if none are given. Synopses: od [OPTION]... [FILE]... od [-abcdfilosx]... [FILE] [[+]OFFSET[.][b]] od [OPTION]... --traditional [FILE] [[+]OFFSET[.][b] [[+]LABEL[.][b]]] Each line of output consists of the offset in the input, followed by groups of data from the file. By default, ‘od’ prints the offset in octal, and each group of file data is a C ‘short int’’s worth of input printed as a single octal number. If OFFSET is given, it specifies how many input bytes to skip before formatting and writing. By default, it is interpreted as an octal number, but the optional trailing decimal point causes it to be interpreted as decimal. If no decimal is specified and the offset begins with ‘0x’ or ‘0X’ it is interpreted as a hexadecimal number. If there is a trailing ‘b’, the number of bytes skipped will be OFFSET multiplied by 512. If a command is of both the first and second forms, the second form is assumed if the last operand begins with ‘+’ or (if there are two operands) a digit. For example, in ‘od foo 10’ and ‘od +10’ the ‘10’ is an offset, whereas in ‘od 10’ the ‘10’ is a file name. The program accepts the following options. Also see *note Common options::. ‘-A RADIX’ ‘--address-radix=RADIX’ Select the base in which file offsets are printed. RADIX can be one of the following: ‘d’ decimal; ‘o’ octal; ‘x’ hexadecimal; ‘n’ none (do not print offsets). The default is octal. ‘--endian=ORDER’ Reorder input bytes, to handle inputs with differing byte orders, or to provide consistent output independent of the endian convention of the current system. Swapping is performed according to the specified ‘--type’ size and endian ORDER, which can be ‘little’ or ‘big’. ‘-j BYTES’ ‘--skip-bytes=BYTES’ Skip BYTES input bytes before formatting and writing. If BYTES begins with ‘0x’ or ‘0X’, it is interpreted in hexadecimal; otherwise, if it begins with ‘0’, in octal; otherwise, in decimal. BYTES may be, or may be an integer optionally followed by, one of the following multiplicative suffixes: ‘b’ => 512 ("blocks") ‘KB’ => 1000 (KiloBytes) ‘K’ => 1024 (KibiBytes) ‘MB’ => 1000*1000 (MegaBytes) ‘M’ => 1024*1024 (MebiBytes) ‘GB’ => 1000*1000*1000 (GigaBytes) ‘G’ => 1024*1024*1024 (GibiBytes) and so on for ‘T’, ‘P’, ‘E’, ‘Z’, and ‘Y’. ‘-N BYTES’ ‘--read-bytes=BYTES’ Output at most BYTES bytes of the input. Prefixes and suffixes on ‘bytes’ are interpreted as for the ‘-j’ option. ‘-S BYTES’ ‘--strings[=BYTES]’ Instead of the normal output, output only “string constants”: at least BYTES consecutive ASCII graphic characters, followed by a zero byte (ASCII NUL). Prefixes and suffixes on BYTES are interpreted as for the ‘-j’ option. If BYTES is omitted with ‘--strings’, the default is 3. ‘-t TYPE’ ‘--format=TYPE’ Select the format in which to output the file data. TYPE is a string of one or more of the below type indicator characters. If you include more than one type indicator character in a single TYPE string, or use this option more than once, ‘od’ writes one copy of each output line using each of the data types that you specified, in the order that you specified. Adding a trailing “z” to any type specification appends a display of the single byte character representation of the printable characters to the output line generated by the type specification. ‘a’ named character, ignoring high-order bit ‘c’ printable single byte character, C backslash escape or a 3 digit octal sequence ‘d’ signed decimal ‘f’ floating point (*note Floating point::) ‘o’ octal ‘u’ unsigned decimal ‘x’ hexadecimal The type ‘a’ outputs things like ‘sp’ for space, ‘nl’ for newline, and ‘nul’ for a zero byte. Only the least significant seven bits of each byte is used; the high-order bit is ignored. Type ‘c’ outputs ‘ ’, ‘\n’, and ‘\0’, respectively. Except for types ‘a’ and ‘c’, you can specify the number of bytes to use in interpreting each number in the given data type by following the type indicator character with a decimal integer. Alternately, you can specify the size of one of the C compiler’s built-in data types by following the type indicator character with one of the following characters. For integers (‘d’, ‘o’, ‘u’, ‘x’): ‘C’ char ‘S’ short ‘I’ int ‘L’ long For floating point (‘f’): F float D double L long double ‘-v’ ‘--output-duplicates’ Output consecutive lines that are identical. By default, when two or more consecutive output lines would be identical, ‘od’ outputs only the first line, and puts just an asterisk on the following line to indicate the elision. ‘-w[N]’ ‘--width[=N]’ Dump ‘n’ input bytes per output line. This must be a multiple of the least common multiple of the sizes associated with the specified output types. If this option is not given at all, the default is 16. If N is omitted, the default is 32. The next several options are shorthands for format specifications. GNU ‘od’ accepts any combination of shorthands and format specification options. These options accumulate. ‘-a’ Output as named characters. Equivalent to ‘-t a’. ‘-b’ Output as octal bytes. Equivalent to ‘-t o1’. ‘-c’ Output as printable single byte characters, C backslash escapes or 3 digit octal sequences. Equivalent to ‘-t c’. ‘-d’ Output as unsigned decimal two-byte units. Equivalent to ‘-t u2’. ‘-f’ Output as floats. Equivalent to ‘-t fF’. ‘-i’ Output as decimal ints. Equivalent to ‘-t dI’. ‘-l’ Output as decimal long ints. Equivalent to ‘-t dL’. ‘-o’ Output as octal two-byte units. Equivalent to ‘-t o2’. ‘-s’ Output as decimal two-byte units. Equivalent to ‘-t d2’. ‘-x’ Output as hexadecimal two-byte units. Equivalent to ‘-t x2’. ‘--traditional’ Recognize the non-option label argument that traditional ‘od’ accepted. The following syntax: od --traditional [FILE] [[+]OFFSET[.][b] [[+]LABEL[.][b]]] can be used to specify at most one file and optional arguments specifying an offset and a pseudo-start address, LABEL. The LABEL argument is interpreted just like OFFSET, but it specifies an initial pseudo-address. The pseudo-addresses are displayed in parentheses following any normal address. An exit status of zero indicates success, and a nonzero value indicates failure. ##################################################################### ##################################################################### 11.2 ‘dd’: Convert and copy a file ================================== ‘dd’ copies a file (from standard input to standard output, by default) with a changeable I/O block size, while optionally performing conversions on it. Synopses: dd [OPERAND]... dd OPTION The only options are ‘--help’ and ‘--version’. *Note Common options::. ‘dd’ accepts the following operands, whose syntax was inspired by the DD (data definition) statement of OS/360 JCL. ‘if=FILE’ Read from FILE instead of standard input. ‘of=FILE’ Write to FILE instead of standard output. Unless ‘conv=notrunc’ is given, ‘dd’ truncates FILE to zero bytes (or the size specified with ‘seek=’). ‘ibs=BYTES’ Set the input block size to BYTES. This makes ‘dd’ read BYTES per block. The default is 512 bytes. ‘obs=BYTES’ Set the output block size to BYTES. This makes ‘dd’ write BYTES per block. The default is 512 bytes. ‘bs=BYTES’ Set both input and output block sizes to BYTES. This makes ‘dd’ read and write BYTES per block, overriding any ‘ibs’ and ‘obs’ settings. In addition, if no data-transforming ‘conv’ option is specified, input is copied to the output as soon as it’s read, even if it is smaller than the block size. ‘cbs=BYTES’ Set the conversion block size to BYTES. When converting variable-length records to fixed-length ones (‘conv=block’) or the reverse (‘conv=unblock’), use BYTES as the fixed record length. ‘skip=N’ Skip N ‘ibs’-byte blocks in the input file before copying. If ‘iflag=skip_bytes’ is specified, N is interpreted as a byte count rather than a block count. ‘seek=N’ Skip N ‘obs’-byte blocks in the output file before copying. if ‘oflag=seek_bytes’ is specified, N is interpreted as a byte count rather than a block count. ‘count=N’ Copy N ‘ibs’-byte blocks from the input file, instead of everything until the end of the file. if ‘iflag=count_bytes’ is specified, N is interpreted as a byte count rather than a block count. Note if the input may return short reads as could be the case when reading from a pipe for example, ‘iflag=fullblock’ will ensure that ‘count=’ corresponds to complete input blocks rather than the traditional POSIX specified behavior of counting input read operations. ‘status=LEVEL’ Transfer information is normally output to stderr upon receipt of the ‘INFO’ signal or when ‘dd’ exits. Specifying LEVEL will adjust the amount of information printed, with the last LEVEL specified taking precedence. ‘none’ Do not print any informational or warning messages to stderr. Error messages are output as normal. ‘noxfer’ Do not print the final transfer rate and volume statistics that normally make up the last status line. ‘progress’ Print the transfer rate and volume statistics on stderr, when processing each input block. Statistics are output on a single line at most once every second, but updates can be delayed when waiting on I/O. ‘conv=CONVERSION[,CONVERSION]...’ Convert the file as specified by the CONVERSION argument(s). (No spaces around any comma(s).) Conversions: ‘ascii’ Convert EBCDIC to ASCII, using the conversion table specified by POSIX. This provides a 1:1 translation for all 256 bytes. This option implies ‘conv=unblock’; input is converted to ASCII before trailing spaces are deleted. ‘ebcdic’ Convert ASCII to EBCDIC. This is the inverse of the ‘ascii’ conversion. This option implies ‘conv=block’; trailing spaces are added before being converted to EBCDIC. ‘ibm’ This acts like ‘conv=ebcdic’, except it uses the alternate conversion table specified by POSIX. This is not a 1:1 translation, but reflects common historical practice for ‘~’, ‘[’, and ‘]’. The ‘ascii’, ‘ebcdic’, and ‘ibm’ conversions are mutually exclusive. If you use any of these options, you should also use the ‘cbs=’ option. ‘block’ For each line in the input, output ‘cbs’ bytes, replacing the input newline with a space and padding with spaces as necessary. ‘unblock’ Remove any trailing spaces in each ‘cbs’-sized input block, and append a newline. The ‘block’ and ‘unblock’ conversions are mutually exclusive. ‘lcase’ Change uppercase letters to lowercase. ‘ucase’ Change lowercase letters to uppercase. The ‘lcase’ and ‘ucase’ conversions are mutually exclusive. ‘sparse’ Try to seek rather than write NUL output blocks. On a file system that supports sparse files, this will create sparse output when extending the output file. Be careful when using this option in conjunction with ‘conv=notrunc’ or ‘oflag=append’. With ‘conv=notrunc’, existing data in the output file corresponding to NUL blocks from the input, will be untouched. With ‘oflag=append’ the seeks performed will be ineffective. Similarly, when the output is a device rather than a file, NUL input blocks are not copied, and therefore this option is most useful with virtual or pre zeroed devices. ‘swab’ Swap every pair of input bytes. GNU ‘dd’, unlike others, works when an odd number of bytes are read—the last byte is simply copied (since there is nothing to swap it with). ‘sync’ Pad every input block to size of ‘ibs’ with trailing zero bytes. When used with ‘block’ or ‘unblock’, pad with spaces instead of zero bytes. The following “conversions” are really file flags and don’t affect internal processing: ‘excl’ Fail if the output file already exists; ‘dd’ must create the output file itself. ‘nocreat’ Do not create the output file; the output file must already exist. The ‘excl’ and ‘nocreat’ conversions are mutually exclusive. ‘notrunc’ Do not truncate the output file. ‘noerror’ Continue after read errors. ‘fdatasync’ Synchronize output data just before finishing. This forces a physical write of output data. ‘fsync’ Synchronize output data and metadata just before finishing. This forces a physical write of output data and metadata. ‘iflag=FLAG[,FLAG]...’ Access the input file using the flags specified by the FLAG argument(s). (No spaces around any comma(s).) ‘oflag=FLAG[,FLAG]...’ Access the output file using the flags specified by the FLAG argument(s). (No spaces around any comma(s).) Here are the flags. Not every flag is supported on every operating system. ‘append’ Write in append mode, so that even if some other process is writing to this file, every ‘dd’ write will append to the current contents of the file. This flag makes sense only for output. If you combine this flag with the ‘of=FILE’ operand, you should also specify ‘conv=notrunc’ unless you want the output file to be truncated before being appended to. ‘cio’ Use concurrent I/O mode for data. This mode performs direct I/O and drops the POSIX requirement to serialize all I/O to the same file. A file cannot be opened in CIO mode and with a standard open at the same time. ‘direct’ Use direct I/O for data, avoiding the buffer cache. Note that the kernel may impose restrictions on read or write buffer sizes. For example, with an ext4 destination file system and a Linux-based kernel, using ‘oflag=direct’ will cause writes to fail with ‘EINVAL’ if the output buffer size is not a multiple of 512. ‘directory’ Fail unless the file is a directory. Most operating systems do not allow I/O to a directory, so this flag has limited utility. ‘dsync’ Use synchronized I/O for data. For the output file, this forces a physical write of output data on each write. For the input file, this flag can matter when reading from a remote file that has been written to synchronously by some other process. Metadata (e.g., last-access and last-modified time) is not necessarily synchronized. ‘sync’ Use synchronized I/O for both data and metadata. ‘nocache’ Request to discard the system data cache for a file. When count=0 all cached data for the file is specified, otherwise the cache is dropped for the processed portion of the file. Also when count=0, failure to discard the cache is diagnosed and reflected in the exit status. Note data that is not already persisted to storage will not be discarded from cache, so note the use of the “sync” options in the examples below, which are used to maximize the effectiveness of the ‘nocache’ flag. Here are some usage examples: # Advise to drop cache for whole file dd if=ifile iflag=nocache count=0 # Ensure drop cache for the whole file dd of=ofile oflag=nocache conv=notrunc,fdatasync count=0 # Drop cache for part of file dd if=ifile iflag=nocache skip=10 count=10 of=/dev/null # Stream data using just the read-ahead cache. # See also the ‘direct’ flag. dd if=ifile of=ofile iflag=nocache oflag=nocache,sync ‘nonblock’ Use non-blocking I/O. ‘noatime’ Do not update the file’s access timestamp. *Note File timestamps::. Some older file systems silently ignore this flag, so it is a good idea to test it on your files before relying on it. ‘noctty’ Do not assign the file to be a controlling terminal for ‘dd’. This has no effect when the file is not a terminal. On many hosts (e.g., GNU/Linux hosts), this option has no effect at all. ‘nofollow’ Do not follow symbolic links. ‘nolinks’ Fail if the file has multiple hard links. ‘binary’ Use binary I/O. This option has an effect only on nonstandard platforms that distinguish binary from text I/O. ‘text’ Use text I/O. Like ‘binary’, this option has no effect on standard platforms. ‘fullblock’ Accumulate full blocks from input. The ‘read’ system call may return early if a full block is not available. When that happens, continue calling ‘read’ to fill the remainder of the block. This flag can be used only with ‘iflag’. This flag is useful with pipes for example as they may return short reads. In that case, this flag is needed to ensure that a ‘count=’ argument is interpreted as a block count rather than a count of read operations. ‘count_bytes’ Interpret the ‘count=’ operand as a byte count, rather than a block count, which allows specifying a length that is not a multiple of the I/O block size. This flag can be used only with ‘iflag’. ‘skip_bytes’ Interpret the ‘skip=’ operand as a byte count, rather than a block count, which allows specifying an offset that is not a multiple of the I/O block size. This flag can be used only with ‘iflag’. ‘seek_bytes’ Interpret the ‘seek=’ operand as a byte count, rather than a block count, which allows specifying an offset that is not a multiple of the I/O block size. This flag can be used only with ‘oflag’. These flags are not supported on all systems, and ‘dd’ rejects attempts to use them when they are not supported. When reading from standard input or writing to standard output, the ‘nofollow’ and ‘noctty’ flags should not be specified, and the other flags (e.g., ‘nonblock’) can affect how other processes behave with the affected file descriptors, even after ‘dd’ exits. The numeric-valued strings above (N and BYTES) can be followed by a multiplier: ‘b’=512, ‘c’=1, ‘w’=2, ‘xM’=M, or any of the standard block size suffixes like ‘k’=1024 (*note Block size::). Any block size you specify via ‘bs=’, ‘ibs=’, ‘obs=’, ‘cbs=’ should not be too large—values larger than a few megabytes are generally wasteful or (as in the gigabyte..exabyte case) downright counterproductive or error-inducing. To process data that is at an offset or size that is not a multiple of the I/O block size, you can use the ‘skip_bytes’, ‘seek_bytes’ and ‘count_bytes’ flags. Alternatively the traditional method of separate ‘dd’ invocations can be used. For example, the following shell commands copy data in 512 KiB blocks between a disk and a tape, but do not save or restore a 4 KiB label at the start of the disk: disk=/dev/rdsk/c0t1d0s2 tape=/dev/rmt/0 # Copy all but the label from disk to tape. (dd bs=4k skip=1 count=0 && dd bs=512k) <$disk >$tape # Copy from tape back to disk, but leave the disk label alone. (dd bs=4k seek=1 count=0 && dd bs=512k) <$tape >$disk For failing disks, other tools come with a great variety of extra functionality to ease the saving of as much data as possible before the disk finally dies, e.g. GNU ‘ddrescue’ (https://www.gnu.org/software/ddrescue/). However, in some cases such a tool is not available or the administrator feels more comfortable with the handling of ‘dd’. As a simple rescue method, call ‘dd’ as shown in the following example: the options ‘conv=noerror,sync’ are used to continue after read errors and to pad out bad reads with NULs, while ‘iflag=fullblock’ caters for short reads (which traditionally never occur on disk based devices): # Rescue data from an (unmounted!) partition of a failing disk. dd conv=noerror,sync iflag=fullblock /mnt/rescue.img Sending an ‘INFO’ signal (or ‘USR1’ signal where that is unavailable) to a running ‘dd’ process makes it print I/O statistics to standard error and then resume copying. In the example below, ‘dd’ is run in the background to copy 5GB of data. The ‘kill’ command makes it output intermediate I/O statistics, and when ‘dd’ completes normally or is killed by the ‘SIGINT’ signal, it outputs the final statistics. # Ignore the signal so we never inadvertently terminate the dd child. # Note this is not needed when SIGINFO is available. trap '' USR1 # Run dd with the fullblock iflag to avoid short reads # which can be triggered by reception of signals. dd iflag=fullblock if=/dev/zero of=/dev/null count=5000000 bs=1000 & pid=$! # Output stats every second. while kill -s USR1 $pid 2>/dev/null; do sleep 1; done The above script will output in the following format: 3441325+0 records in 3441325+0 records out 3441325000 bytes (3.4 GB, 3.2 GiB) copied, 1.00036 s, 3.4 GB/s 5000000+0 records in 5000000+0 records out 5000000000 bytes (5.0 GB, 4.7 GiB) copied, 1.44433 s, 3.5 GB/s ##################################################################### ##################################################################### fdisk - manipulate disk partition table SYNOPSIS fdisk [options] device fdisk -l [device...] DESCRIPTION fdisk is a dialog-driven program for creation and manipulation of parti‐ tion tables. It understands GPT, MBR, Sun, SGI and BSD partition tables. Block devices can be divided into one or more logical disks called parti‐ tions. This division is recorded in the partition table, usually found in sector 0 of the disk. (In the BSD world one talks about `disk slices' and a `disklabel'.) All partitioning is driven by device I/O limits (the topology) by default. fdisk is able to optimize the disk layout for a 4K-sector size and use an alignment offset on modern devices for MBR and GPT. It is always a good idea to follow fdisk's defaults as the default values (e.g. first and last partition sectors) and partition sizes specified by the +{M,G,...} notation are always aligned according to the device properties. Note that partx(8) provides a rich interface for scripts to print disk layouts, fdisk is mostly designed for humans. Backward compatibility in the output of fdisk is not guaranteed. The input (the commands) should always be backward compatible. OPTIONS -b, --sector-size sectorsize Specify the sector size of the disk. Valid values are 512, 1024, 2048, and 4096. (Recent kernels know the sector size. Use this option only on old kernels or to override the kernel's ideas.) Since util-linux-2.17, fdisk differentiates between logical and physical sector size. This option changes both sector sizes to sectorsize. -B, --protect-boot Don't erase the begin of the first disk sector when create a new disk label. This feature is supported for GPT and MBR. -c, --compatibility[=mode] Specify the compatibility mode, 'dos' or 'nondos'. The default is non-DOS mode. For backward compatibility, it is possible to use the option without the mode argument -- then the default is used. Note that the optional mode argument cannot be separated from the -c option by a space, the correct form is for example '-c=dos'. -h, --help Display a help text and exit. -L, --color[=when] Colorize the output. The optional argument when can be auto, never or always. If the when argument is omitted, it defaults to auto. The colors can be disabled; for the current built-in default see the --help output. See also the COLORS section. -l, --list List the partition tables for the specified devices and then exit. If no devices are given, those mentioned in /proc/partitions (if that file exists) are used. -o, --output list Specify which output columns to print. Use --help to get a list of all supported columns. The default list of columns may be extended if list is specified in the format +list (e.g. -o +UUID). -s, --getsz Print the size in 512-byte sectors of each given block device. This option is DEPRECATED in favour of blockdev(1). -t, --type type Enable support only for disklabels of the specified type, and dis‐ able support for all other types. -u, --units[=unit] When listing partition tables, show sizes in 'sectors' or in 'cylinders'. The default is to show sizes in sectors. For back‐ ward compatibility, it is possible to use the option without the unit argument -- then the default is used. Note that the optional unit argument cannot be separated from the -u option by a space, the correct form is for example '-u=cylinders'. -C, --cylinders number Specify the number of cylinders of the disk. I have no idea why anybody would want to do so. -H, --heads number Specify the number of heads of the disk. (Not the physical number, of course, but the number used for partition tables.) Reasonable values are 255 and 16. -S, --sectors number Specify the number of sectors per track of the disk. (Not the physical number, of course, but the number used for partition tables.) A reasonable value is 63. -w, --wipe when Wipe filesystem, RAID and partition-table signatures from the device, in order to avoid possible collisions. The argument when can be auto, never or always. When this option is not given, the default is auto, in which case signatures are wiped only when in interactive mode. In all cases detected signatures are reported by warning messages before a new partition table is created. See also wipefs(8) command. -W, --wipe-partition when Wipe filesystem, RAID and partition-table signatures from a newly created partitions, in order to avoid possible collisions. The argument when can be auto, never or always. When this option is not given, the default is auto, in which case signatures are wiped only when in interactive mode and after confirmation by user. In all cases detected signatures are reported by warning messages before a new partition is created. See also wipefs(8) command. -V, --version Display version information and exit. DEVICES The device is usually /dev/sda, /dev/sdb or so. A device name refers to the entire disk. Old systems without libata (a library used inside the Linux kernel to support ATA host controllers and devices) make a differ‐ ence between IDE and SCSI disks. In such cases the device name will be /dev/hd* (IDE) or /dev/sd* (SCSI). The partition is a device name followed by a partition number. For exam‐ ple, /dev/sda1 is the first partition on the first hard disk in the sys‐ tem. See also Linux kernel documentation (the Documentation/devices.txt file). SIZES The "last sector" dialog accepts partition size specified by number of sectors or by +{K,B,M,G,...} notation. If the size is prefixed by '+' then it is interpreted as relative to the partition first sector. In this case the size is expected in bytes and the number may be followed by the multiplicative suffixes KiB=1024, MiB=1024*1024, and so on for GiB, TiB, PiB, EiB, ZiB and YiB. The "iB" is optional, e.g. "K" has the same meaning as "KiB". The relative sizes are always aligned according to device I/O limits. The +{K,B,M,G,...} notation is recommended. For backward compatibility fdisk also accepts the suffixes KB=1000, MB=1000*1000, and so on for GB, TB, PB, EB, ZB and YB. These 10^N suffixes are deprecated. SCRIPT FILES fdisk allows to read (by 'I' command) sfdisk compatible script files. The script is applied to in-memory partition table, and then it is possible to modify the partition table before you write it to the device. And vice-versa it is possible to write the current in-memory disk layout to the script file by command 'O'. The script files are compatible between cfdisk, sfdisk, fdisk and another libfdisk applications. For more details see sfdisk(8). DISK LABELS GPT (GUID Partition Table) GPT is modern standard for the layout of the partition table. GPT uses 64-bit logical block addresses, checksums, UUIDs and names for partitions and an unlimited number of partitions (although the num‐ ber of partitions is usually restricted to 128 in many partitioning tools). Note that the first sector is still reserved for a protective MBR in the GPT specification. It prevents MBR-only partitioning tools from mis-recognizing and overwriting GPT disks. GPT is always a better choice than MBR, especially on modern hard‐ ware with a UEFI boot loader. DOS-type (MBR) A DOS-type partition table can describe an unlimited number of par‐ titions. In sector 0 there is room for the description of 4 parti‐ tions (called `primary'). One of these may be an extended parti‐ tion; this is a box holding logical partitions, with descriptors found in a linked list of sectors, each preceding the corresponding logical partitions. The four primary partitions, present or not, get numbers 1-4. Logical partitions are numbered starting from 5. In a DOS-type partition table the starting offset and the size of each partition is stored in two ways: as an absolute number of sec‐ tors (given in 32 bits), and as a Cylinders/Heads/Sectors triple (given in 10+8+6 bits). The former is OK -- with 512-byte sectors this will work up to 2 TB. The latter has two problems. First, these C/H/S fields can be filled only when the number of heads and the number of sectors per track are known. And second, even if we know what these numbers should be, the 24 bits that are available do not suffice. DOS uses C/H/S only, Windows uses both, Linux never uses C/H/S. The C/H/S addressing is deprecated and may be unsupported in some later fdisk version.
              Please, read the DOS-mode section if you want DOS-compatible parti‐
              tions.  fdisk does not care about cylinder boundaries by default.

       BSD/Sun-type
              A  BSD/Sun  disklabel can describe 8 partitions, the third of which
              should be a `whole disk' partition.  Do not start a partition  that
              actually  uses its first sector (like a swap partition) at cylinder
              0, since that will destroy the disklabel.  Note that a BSD label is
              usually nested within a DOS partition.

       IRIX/SGI-type
              An  IRIX/SGI  disklabel can describe 16 partitions, the eleventh of
              which should be an  entire  `volume'  partition,  while  the  ninth
              should  be  labeled  `volume  header'.  The volume header will also
              cover the partition table,  i.e.,  it  starts  at  block  zero  and
              extends by default over five cylinders.  The remaining space in the
              volume header may be used by header directory entries.   No  parti‐
              tions  may  overlap with the volume header.  Also do not change its
              type or make some filesystem on it, since you will lose the  parti‐
              tion table.  Use this type of label only when working with Linux on
              IRIX/SGI machines or IRIX/SGI disks under Linux.

       A sync() and an ioctl(BLKRRPART) (rereading the partition table from disk)
       are performed before exiting when the partition table has been updated.

DOS mode and DOS 6.x WARNING
       Note that all this is deprecated. You don't have to care about things like
       geometry and cylinders on modern operating systems.  If  you  really  want
       DOS-compatible  partitioning then you have to enable DOS mode and cylinder
       units by using the '-c=dos -u=cylinders' fdisk command-line options.

       The DOS 6.x FORMAT command looks for some information in the first  sector
       of  the  data  area  of the partition, and treats this information as more
       reliable than the information in the partition table.  DOS FORMAT  expects
       DOS  FDISK  to  clear  the first 512 bytes of the data area of a partition
       whenever a size change occurs.  DOS FORMAT will look at this extra  infor‐
       mation  even if the /U flag is given -- we consider this a bug in DOS FOR‐
       MAT and DOS FDISK.

       The bottom line is that if you use fdisk or cfdisk to change the size of a
       DOS  partition table entry, then you must also use dd(1) to zero the first
       512 bytes of that partition before using DOS FORMAT to format  the  parti‐
       tion.   For example, if you were using fdisk to make a DOS partition table
       entry for /dev/sda1, then (after exiting fdisk and rebooting Linux so that
       the  partition  table  information is valid) you would use the command "dd
       if=/dev/zero of=/dev/sda1 bs=512 count=1" to zero the first 512  bytes  of
       the partition.

       fdisk usually obtains the disk geometry automatically.  This is not neces‐
       sarily the physical disk geometry (indeed, modern disks do not really have
       anything  like  a  physical  geometry, certainly not something that can be
       described in the simplistic Cylinders/Heads/Sectors form), but it  is  the
       disk geometry that MS-DOS uses for the partition table.

       Usually  all  goes  well by default, and there are no problems if Linux is
       the only system on the disk.  However, if the disk has to be  shared  with
       other  operating  systems,  it  is  often a good idea to let an fdisk from
       another operating system make at least one partition.  When Linux boots it
       looks  at the partition table, and tries to deduce what (fake) geometry is
       required for good cooperation with other systems.

       Whenever a partition table is printed out in DOS mode, a consistency check
       is performed on the partition table entries.  This check verifies that the
       physical and logical start and end points are  identical,  and  that  each
       partition  starts  and  ends  on a cylinder boundary (except for the first
       partition).

       Some versions of MS-DOS create a first partition which does not begin on a
       cylinder  boundary,  but  on  sector  2 of the first cylinder.  Partitions
       beginning in cylinder 1 cannot begin on a cylinder boundary, but  this  is
       unlikely to cause difficulty unless you have OS/2 on your machine.

       For  best  results,  you  should always use an OS-specific partition table
       program.  For example, you should make DOS partitions with the  DOS  FDISK
       program  and  Linux  partitions  with the Linux fdisk or Linux cfdisk pro‐
       grams.

COLORS
       Implicit coloring can be disabled  by  an  empty  file  /etc/terminal-col‐
       ors.d/fdisk.disable.

       See  terminal-colors.d(5)  for  more details about colorization configura‐
       tion. The logical color names supported by fdisk are:

       header The header of the output tables.

       help-title
              The help section titles.

       warn   The warning messages.

       welcome
              The welcome message.

AUTHORS
       Karel Zak ⟨kzak@redhat.com⟩
       Davidlohr Bueso ⟨dave@gnu.org⟩

       The original version was written by Andries E. Brouwer, A. V. Le Blanc and
       others.

ENVIRONMENT
       FDISK_DEBUG=all
              enables fdisk debug output.

       LIBFDISK_DEBUG=all
              enables libfdisk debug output.

       LIBBLKID_DEBUG=all
              enables libblkid debug output.

       LIBSMARTCOLS_DEBUG=all
              enables libsmartcols debug output.

       LIBSMARTCOLS_DEBUG_PADDING=on
              use   visible   padding   characters.  Requires  enabled  LIBSMART‐
              COLS_DEBUG.

SEE ALSO
       cfdisk(8), mkfs(8), partx(8), sfdisk(8)

AVAILABILITY
       The fdisk command is part of the util-linux package and is available  from
       https://www.kernel.org/pub/linux/utils/util-linux/.





#####################################################################

#####################################################################