imported>ThorstenStaerk |
imported>ThorstenStaerk |
Line 1: |
Line 1: |
− | A [[block device]] is a [[device]] you can read blocks from. For example [[hard disks]], cdrom drives and floppies are block devices, but not the [[keyboard]]. You can receive data from the keyboard and regard them as blocks, but you cannot seek on the keyboard. You can tell a hard disk "give me block 5433", then block 7707, then block 1807 and you cannot do this with a keyboard, so, a keyboard is no block device.
| + | [[dd]] is a utility to create a '''d'''isk '''d'''ump by reading every single block on a disk, e.g. your hard drive. Its architecture is laid out so it can do much more than creating a dump. Here is what dd can do for you: |
− | | + | * create a disk backup |
− | = Block sizes =
| + | * create an iso image of a CD |
− | It is important to understand the ideas behind the block sizes.
| + | * rescue a file that contains bad blocks |
− | | + | * analyze your disk by displaying selected [[blocks]] |
− | == Disk block sizes ==
| + | * create your own operating system by dumping your bootloader to the boot sector |
− | Typically, a hard disk cannot read less than 512 bytes, if you want to read less, read 512 bytes and discard the rest. This is why [[dd]] reads one block à 512 bytes in the following example:
| |
− | <source>
| |
− | tweedleburg:~ # dd if=/dev/sda1 of=/dev/null count=1
| |
− | 1+0 records in
| |
− | 1+0 records out
| |
− | 512 bytes (512 B) copied, 1.8977e-05 s, 27.0 MB/s
| |
− | </source>
| |
− | | |
− | == File system block sizes ==
| |
− | On the other hand, every file system needs to split up a partition into blocks to store [[file]]s and file parts. This is why there is a different block size for a file system as you can see here:
| |
− | <source>
| |
− | tweedleburg:/mnt/sdb2 # stat -f .
| |
− | File: "."
| |
− | ID: 236d62321492c2ce Namelen: 255 Type: ext2/ext3
| |
− | Block size: 4096 Fundamental block size: 4096
| |
− | Blocks: Total: 76899893 Free: 8380419 Available: 4474114
| |
− | Inodes: Total: 39075840 Free: 38013010
| |
− | </source>
| |
− | So, if you store a file in this file system, it will be stored in a 4096-byte-block, that means, even if your file only contains 5 bytes, it will take away 4096 bytes from your disk's capacity:
| |
− | <source>
| |
− | tweedleburg:/mnt/sdb2 # df .
| |
− | Filesystem 1K-blocks Used Available Use% Mounted on
| |
− | /dev/sdb2 307599572 274077896 17896456 94% /mnt/sdb2
| |
− | tweedleburg:/mnt/sdb2 # echo hallo>welt
| |
− | tweedleburg:/mnt/sdb2 # df .
| |
− | Filesystem 1K-blocks Used Available Use% Mounted on
| |
− | /dev/sdb2 307599572 274077900 17896452 94% /mnt/sdb2
| |
− | tweedleburg:/mnt/sdb2 # du -csh welt
| |
− | 4.0K welt
| |
− | 4.0K total
| |
− | </source>
| |
− | | |
− | == Kernel block size ==
| |
− | Also the kernel has its own block size. This is relevant e.g. for vmstat. In the [http://unixhelp.ed.ac.uk/CGI/man-cgi?vmstat vmstat man page] you find the statement
| |
− | <source>
| |
− | All linux blocks are currently 1024 bytes.
| |
− | </source>
| |
− | So, again another block size when you work with vmstat. This is the block size the Linux kernel uses internally for caching and buffering. It is the most prominent of all block sizes.
| |
− | | |
− | == Applications ==
| |
− | | |
− | === vmstat ===
| |
− | vmstat uses 1k blocks
| |
− | | |
− | === iostat ===
| |
− | iostat uses 512B blocks
| |
− | | |
− | = I/O =
| |
− | There is
| |
− | * buffered I/O and direct I/O
| |
− | * async I/O and sync I/O | |
− | | |
− | The difference between buffered I/O and direct I/O is that direct I/O does not use the operating system cache. During the [http://linux.die.net/man/2/open open syscall], you can say that you want direct I/O. [http://unixfoo.blogspot.com/2008/01/what-is-direct-io.html More info...]
| |
− | | |
− | The difference between async I/O and sync I/O is that async I/O reads/writes from/to a file without waiting for the data to actually arrive, but rather having the data sent to a network socket. You must use libaio for this. [http://blog.lighttpd.net/articles/2006/11/09/async-io-on-linux More info...]
| |
− | | |
− | = How to... =
| |
− | | |
− | == Find out the size of a block device ==
| |
− | To find out the size of the block device ''/dev/sda'':
| |
− | <source>
| |
− | fdisk -l /dev/sda
| |
− | </source>
| |
− | or, a bit harder to read:
| |
− | <source>
| |
− | hwinfo --block
| |
− | </source>
| |
− | | |
− | == Find out the file system stored on a block device ==
| |
− | A file system will typically be stored in a partition, not directly in a block device. To find all partitions on ''/dev/sda'' use
| |
− | <source>
| |
− | fdisk -l /dev/sda
| |
− | </source>
| |
− | To find out what file system is stored on ''/dev/sda1'' use
| |
− | <source>
| |
− | file -s /dev/sda1
| |
− | </source>
| |
− | | |
− | == Find out the elevator algorithm ==
| |
− | The elevator algorithm can be found like this:
| |
− | <source>
| |
− | cat /sys/devices/platform/host7/session1/target7\:0\:0/7\:0\:0\:0/block/sdi/queue/scheduler
| |
− | noop anticipatory [deadline] cfq
| |
− | </source>
| |
− | In this case, the deadline elevator algorithm is active.
| |
− | | |
− | Or it may be found like this:
| |
− | <source>
| |
− | cat /sys/class/block/sdb/queue/scheduler
| |
− | noop deadline [cfq]
| |
− | </source>
| |
− | | |
− | You can switch the scheduler like this:
| |
− | <source>
| |
− | # cat /sys/class/block/sdb/queue/scheduler
| |
− | noop deadline [cfq]
| |
− | # echo "noop">/sys/class/block/sdb/queue/scheduler
| |
− | # cat /sys/class/block/sdb/queue/scheduler
| |
− | [noop] deadline cfq
| |
− | </source>
| |
− | | |
− | = Associated commands =
| |
− | * [[dd]] | |
− | * [[vmstat]] | |
− | * [http://linux.die.net/man/1/iostat iostat]
| |
− | * [[stat]]
| |
− | * [https://www.howtogeek.com/106873/how-to-use-fdisk-to-manage-partitions-on-linux/ fdisk]
| |
− | * [[hwinfo]] --block
| |
− | * [[hwinfo]] --partition
| |
− | * [[file]] -s ''/dev/sda'' : finds out the filesystem type of /dev/sda
| |
− | | |
− | = See also =
| |
− | * [[paging vs. swapping]]
| |
− | * http://www.linuxforums.org/forum/misc/5654-linux-disk-block-size-help-please.html
| |
− | | |
− | [[Category:Concept]]
| |