https://wiki.archlinux.org/api.php?action=feedcontributions&user=Wzyboy&feedformat=atomArchWiki - User contributions [en]2024-03-29T15:33:39ZUser contributionsMediaWiki 1.41.0https://wiki.archlinux.org/index.php?title=Plex&diff=566619Plex2019-02-14T17:28:22Z<p>Wzyboy: /* Security */ update new systemd syntax</p>
<hr />
<div>[[Category:Home theater]]<br />
[[ja:Plex]]<br />
[https://www.plex.tv/ Plex] is a media player system and software suite consisting of many player applications for [[wikipedia:10-foot_user_interface|10-foot]] user interfaces and an associated media server that organizes personal media stored on local devices. Integrated Plex Channels provide users with access to a growing number of online content providers such as YouTube, Vimeo, TEDTalks, and CNN among others. Plex also provides integration for cloud services including Dropbox, Box, Google Drive, or Copy.<br />
<br />
Plex for Linux is split into a closed-source server Plex Media Server, and an open-source client Plex Home Theater, a fork of the popular [[Kodi]] project.<br />
<br />
== Plex Media Server (PMS) ==<br />
<br />
=== Installation ===<br />
<br />
Install the {{AUR|plex-media-server}} package, or the {{AUR|plex-media-server-plexpass}} package if you have a Plex Pass.<br />
<br />
=== Setup ===<br />
<br />
[[Enable]] and start {{ic|plexmediaserver.service}}.<br />
<br />
To begin configuring PMS, browse to {{ic|http://localhost:32400/web/}}.<br />
<br />
To configure PMS remotely, you can first create an SSH tunnel (setup can only be done from <code>localhost</code>)<br />
<br />
<code>ssh ip.address.of.server -L 8888:localhost:32400</code><br />
<br />
and then browse to {{ic|http://localhost:8888/web/}}.<br />
<br />
or if you are running apache, with a reverse proxy, by adding this configuration in httpd-vhosts.conf<br />
<code><br />
<VirtualHost *:80><br />
ServerName ip.address.of.server<br />
ProxyPass / http://localhost:32400/<br />
ProxyPassReverse / http://localhost:32400/<br />
</VirtualHost><br />
</code><br />
=== Plugins ===<br />
<br />
PMS can be expanded with additional plugins. For example, PMS can be used as an IPTV client with the [https://github.com/Cigaras/IPTV.bundle IPTV plugin].<br />
<br />
Plugins can be installed inside {{ic|/var/lib/plex/Plex Media Server/Plug-ins}}.<br />
<br />
=== Plex Live TV and DVR ===<br />
<br />
Plex live TV requires a plexpass.<br />
<br />
To enable live TV viewing and DVR support with plex, you must have one of the supported tuners listed on the [https://support.plex.tv/hc/en-us/articles/225877427-Supported-DVR-Tuners-and-Antennas support page] and {{AUR|plex-media-server-plexpass}} installed. PMS will automatically recognize any connected tuners.<br />
<br />
The plex user needs to be part of the video group in order to access local tuners. This can be done by running {{ic|usermod -a -G video plex}}<br />
<br />
=== Security ===<br />
<br />
It is recommended to store your media files outside of your home directory, as making it accessible to PMS would mean lowering its security. Having a separate {{ic|/media}} or {{ic|/mnt/media}} partition is a good setup for use with PMS.<br />
<br />
You can further increase security via systemd, by [[edit]]ing {{ic|plexmediaserver.service}} as follows: <br />
<br />
{{hc|/etc/systemd/system/plexmediaserver.service.d/restrict.conf|2=<br />
[Service]<br />
ReadOnlyPaths=/<br />
ReadWritePaths=/var/lib/plex /tmp}}<br />
<br />
{{Note|Those mechanisms are currently limited. For instance, {{ic|ReadOnlyDirectories}} do not apply to any submount, you have to list them as well.}}<br />
<br />
=== Resource Management ===<br />
<br />
Originally, PMS used ulimit to limit its allocated resources, however this is not compatible with running as a regular user. Instead, you can now set a maximum amount of memory via, again, systemd. For example, you can add:<br />
<br />
MemoryMax=4G<br />
<br />
to the file mentioned above.<br />
<br />
=== Network ===<br />
<br />
{{Note|PMS supports both IPv4 and IPv6. This section only assumes the use of IPv4.}}<br />
<br />
PMS and its DLNA server require several ports to be open:<br />
<br />
*Plex Media Server: TCP 32400<br />
*Plex DLNA Server: TCP 32469, UDP 1900<br />
*Network Discovery: UDP 32410, 32412, 32413, 32414<br />
*Bonjour/Avahi Network Discovery (legacy): UDP 5353<br />
<br />
A short example with iptables:<br />
<br />
# iptables -A INPUT -p tcp -m multiport --dports 32400,32469 -j ACCEPT<br />
# iptables -A INPUT -p udp -m multiport --dports 1900,32410,32412,32413,32414 -j ACCEPT<br />
<br />
In order to connect to Plex through on a standard http port, this command can be used (for port 8080):<br />
<br />
#iptables -t nat -A PREROUTING -p tcp --dport 8080 -j REDIRECT --to-port 32400<br />
<br />
Then you can connect directly to http://yourplexaddress:8080 on this port<br />
<br />
===Library Updates===<br />
Plex Media Server has a setting "Update my library automatically" which can detect new media files as they're downloaded to your library. But as your library grows, these updates might stop working reliably. To fix, you need to increase the number of files non-root users are allowed to subscribe to via inotify. Create the file {{ic|/etc/sysctl.d/40-max-user-watches.conf}}<br />
<br />
{{hc|/etc/sysctl.d/40-max-user-watches.conf|2=<br />
fs.inotify.max_user_watches=524288<br />
}}<br />
<br />
and run {{ic|sudo sysctl --system}} to apply without rebooting. Now plex should see any new files.<br />
<br />
=== Troubleshooting ===<br />
<br />
{{Expansion|1=Look if journalctl can be made equivalent with {{ic|1=SYSTEMD_LOG_LEVEL=debug}}, currently appears unreliable, see [[User talk:Alucryd#Plex]]}}<br />
<br />
Logs are located in:<br />
<br />
/var/lib/plex/Plex Media Server/Logs<br />
<br />
In case there are no logs or they are not helpful, you might want to launch PMS manually to get some terminal output:<br />
<br />
sudo -u plex /usr/bin/bash<br />
source /etc/conf.d/plexmediaserver<br />
export LD_LIBRARY_PATH=/usr/lib/plexmediaserver<br />
/usr/lib/plexmediaserver/Plex\ Media\ Server<br />
<br />
== Plex Home Theater (PHT) ==<br />
<br />
Previously known as Plex Media Center, Plex Home Theater is the software component used for a long time as the front-end media player for Plex's back-end server component Plex Media Server. This component came from a fork of XBMC Media Center software on May 21, 2008.<br />
<br />
Official support for Plex Home Theater (from Plex, Inc.) has been discontinued in favour of Plex Media Player (based on MPV). However, Plex Home Theater has been forked and is still under active development by the Open Source community under the name [https://github.com/RasPlex/OpenPHT OpenPHT]<br />
<br />
=== Installation ===<br />
<br />
[[Install]] the {{AUR|openpht}} package.<br />
<br />
Plex Home Theater can be launched by running {{ic|plexhometheater.sh}} from your terminal.<br />
<br />
== Plex Media Player (PMP) ==<br />
<br />
Plex Media Player is the current release of Plex's media client. It has officially replaced [[#Plex Home Theater .28PHT.29|#Plex Home Theater (PHT)]] (which is still receiving bug fixes) and builds upon previous functionality, such as using mpv. Plex has made PMP [https://www.plex.tv/blog/plex-media-player-now-ambidextrous-free-kodi-said/ available] to all users and it has also become compatible with Kodi. Keep in mind, PMP is not open-source (unlike PHT).<br />
<br />
=== Installation ===<br />
<br />
[[Install]] the {{AUR|plex-media-player}} package.<br />
<br />
== Kodi and PleXBMC ==<br />
<br />
With the PleXBMC add-on, Kodi can be used as a replacement for PHT.<br />
<br />
=== Installation ===<br />
<br />
Install the {{Pkg|kodi}} package, then follow the instructions over [http://kodi.wiki/view/Add-on:PleXBMC here].</div>Wzyboyhttps://wiki.archlinux.org/index.php?title=Synchronization_and_backup_programs&diff=514863Synchronization and backup programs2018-03-25T03:54:22Z<p>Wzyboy: Undo revision 514861 by Wzyboy (talk)</p>
<hr />
<div>[[Category:Data compression and archiving]]<br />
[[Category:System recovery]]<br />
[[de:Backups]]<br />
[[ja:バックアッププログラム]]<br />
[[ru:Backup programs]]<br />
{{Related articles start}}<br />
{{Related|System backup}}<br />
{{Related|Disk cloning}}<br />
{{Related|List of applications#File sharing}}<br />
{{Related|System maintenance#Backup}}<br />
{{Related|Dotfiles#Version control}}<br />
{{Related|File recovery}}<br />
{{Related articles end}}<br />
<br />
This page lists and compares applications that synchronize data between two or more locations, and those that build on top of such functionality to make incremental copies of important data for backup purposes. Because of their relationship, the two groups share several traits that justify describing them in the same article.<br />
<br />
== Backup overview ==<br />
<br />
Having backups of important data is a necessary measure to take, since human and machine processing errors are very likely to generate corruption as time passes, and also the physical media where the data is stored is inevitably destined to fail. In order to choose the best program for one's own needs, the following aspects should be considered:<br />
<br />
* The type of backup medium that is going to store the data, e.g. CD, DVD, remote server, external hard drive, etc.<br />
* The planned frequency of backups, e.g. daily, weekly, monthly, etc.<br />
* The features expected from the backup solution, e.g. compression, encryption, handles renames, etc.<br />
* The planned method to restore backups if needed.<br />
<br />
== Data synchronization ==<br />
<br />
These applications simply keep directories synchronized between multiple locations/machines, in a "mirror" fashion. Nonetheless, most of them still allow storing and reverting to old revisions of modified or deleted files.<br />
<br />
See also [[Wikipedia:Comparison of file synchronization software]].<br />
<br />
'''Legend:'''<br />
<br />
* '''Name''': the application name, linking to the ArchWiki article or the official website.<br />
* '''Installation''': a link to the package.<br />
* '''Implementation''': the programming language, library, or utility that the application is based on.<br />
* '''Delta transfer''': only the modified ''parts'' of files are transferred.<br />
* '''Encrypted transfer''': data is encrypted by default when transferred over the network.<br />
* '''FS metadata''': file system permissions and attributes are synchronized.<br />
* '''Resumable''': the synchronization can be resumed if interrupted.<br />
* '''Handles renames''': moved/renamed files are detected and not stored or transferred twice. It typically means that a checksum of files or its chunks is computed.<br />
* '''Version control''': the old version of files are backed up ('''reverse incremental backup''').<br />
* '''Change propagation''': specifies in how many directions changes can be propagated.<br />
** ''unidirectional'' means one-way synchronization of two locations,<br />
** ''bidirectional'' means two-way synchronization of two locations and<br />
** ''multidirectional'' means full synchronization of more than two locations.<br />
* '''Conflict resolution''': the application handles file conflicts, either automatically or interactively, i.e. it does not silently discard conflicting files. This attribute does not apply to applications that only propagate changes in one direction.<br />
* '''FS monitoring''': the application listens to file system events to trigger the synchronization.<br />
* '''CLI''': the application is command-line driven, i.e. it is scriptable.<br />
* '''Other interfaces''': the application has the specified user interfaces, e.g. GUI, TUI, or web-based.<br />
* '''License''': the license of the server and client applications.<br />
* '''Other platforms''': supported operating systems other than Linux.<br />
* '''Specificity''': brief notes about special features that notably set the application apart from the others.<br />
<br />
{| class="wikitable sortable"<br />
! Name<br />
! Installation<br />
! Implementation<br />
! Delta transfer<br />
! Encrypted transfer<br />
! FS metadata<br />
! Resumable<br />
! Handles renames<br />
! Version control<br />
! Change propagation<br />
! Conflict resolution<br />
! FS monitoring<br />
! CLI<br />
! Other interfaces<br />
! License<br />
! Other platforms<br />
! Maintained<br />
! Specificity<br />
|-<br />
| [[Resilio Sync]]<br />
| {{aur|rslsync}}<br />
| ? (closed source)<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| '''multi'''directional<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{G|Web}}<br />
| Proprietary freemium<br />
| FreeBSD, Windows, macOS, Android, iOS, Windows Phone, Amazon Kindle Fire<br />
| {{Yes}}<br />
| P2P sync<br />
|-<br />
| [https://www.freefilesync.org/ FreeFileSync]<br />
| {{AUR|freefilesync}}<br />
| C++<br />
| style="text-align:center;" | ?<br />
| {{G|SFTP [http://www.freefilesync.org/faq.php#features]}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{G|Yes [http://www.freefilesync.org/faq.php#features]}}<br />
| {{G|1=Yes [http://www.freefilesync.org/manual.php?topic=versioning]}}<br />
|'''uni'''directional / '''multi'''directional<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| GPL<br />
| Windows, macOS<br />
| {{Yes}}<br />
|<br />
|-<br />
| [https://git-annex.branchable.com/ git-annex]<br />
| {{Pkg|git-annex}}<br />
| Haskell, git<br />
| {{G|rsync [http://git-annex.branchable.com/transferring_data/]}}<br />
| {{G|rsync [http://git-annex.branchable.com/transferring_data/]}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| '''multi'''directional; with git remotes [http://git-annex.branchable.com/sync/]<br />
| {{G|renames conflicting files [http://git-annex.branchable.com/automatic_conflict_resolution/]}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{G|[http://git-annex.branchable.com/assistant/ git-annex assistant]}}<br />
| GPLv3<br />
| macOS, Android<br />
| {{Yes}}<br />
| Manage files with git<br />
|-<br />
| [http://www.netpower.fr/osync osync.sh]<br />
| {{AUR|osync}}<br />
| Bash, based on rsync<br />
| {{G|rsync}}<br />
| {{G|rsync}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| '''bi'''directional<br />
| {{G|keeps multiple versions of a file [http://www.netpower.fr/sites/default/files/soft/html-doc/osync_v1.2.html#toc-Subsubsection-1.3.1]}}<br />
| {{G|optional [https://github.com/deajan/osync#daemon-mode]}}<br />
| {{Yes}}<br />
| {{No}}<br />
| BSD<br />
| <br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://www.nongnu.org/rdiff-backup/ rdiff-backup]<br />
| {{Pkg|rdiff-backup}}<br />
| Python 2, librsync<br />
| {{G|rsync}}<br />
| {{G|rsync}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
|colspan="2"| '''uni'''directional<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| GPL<br />
| Win32<br />
| style="text-align:center;" | ?<br />
|<br />
|-<br />
| [[rsync]]<br />
| {{pkg|rsync}}<br />
| C<br />
| {{Yes}}<br />
| {{G|SSH or native protocol}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{G|<br />
* {{ic|--link-dest}} with hard links [http://www.ibm.com/developerworks/aix/library/au-spunix_rsync/index.html#backup]<br />
* {{ic|--backup}}<br />
}}<br />
|colspan="2"| '''uni'''directional<br />
| {{No}}<br />
| {{Yes}}<br />
| {{G|[[Rsync#Front-ends]]}}<br />
| GPLv3<br />
| Win32<br />
| {{Yes}}<br />
| Standard tool present on all Linux distributions.<br />
|-<br />
| [https://sparkleshare.org/ SparkleShare]<br />
| {{Pkg|sparkleshare}}<br />
| C#, git<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| GPLv3<br />
| Windows, macOS<br />
| {{Yes}}<br />
|<br />
|-<br />
| [[Syncthing]]<br />
| {{pkg|syncthing}}<br />
| Go<br />
| {{G|Yes [http://docs.syncthing.net/users/faq.html#is-synchronization-fast]}}<br />
| {{G|Yes [http://docs.syncthing.net/users/security.html]}}<br />
| {{Y|partial [http://docs.syncthing.net/users/faq.html#what-things-are-synced]}}<br />
| {{G|Yes }}<br />
| style="text-align:center;" | ?<br />
| {{G|Yes [http://docs.syncthing.net/users/versioning.html]}}, previous versions moved to archive folder<br />
| '''multi'''directional<br />
| {{G|renames one file [https://docs.syncthing.net/users/faq.html#what-if-there-is-a-conflict]}}<br />
| {{G|Yes}}<br />
| {{Yes}}<br />
| {{G|Web, GTK}}<br />
| MPL v2<br />
| BSD, Windows, macOS, Android, Kindle Paperwhite<br />
| {{Yes}}<br />
| P2P sync<br />
|-<br />
| [http://synkron.sourceforge.net/ Synkron]<br />
| {{AUR|synkron}}<br />
| C++<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| '''multi'''directional<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{G|Qt}}<br />
| GPLv2<br />
| Windows, macOS<br />
| {{R|[https://sourceforge.net/projects/synkron/ No]}}<br />
|<br />
|-<br />
| [[taskd]]<br />
| {{aur|taskd}}<br />
| C++, Python<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| '''multi'''directional<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| MIT<br />
| Android<br />
| {{Yes}}<br />
|<br />
|-<br />
| [[Unison]]<br />
| {{pkg|unison}}<br />
| OCaml<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Y|partial [http://www.cis.upenn.edu/~bcpierce/unison/download/releases/stable/unison-manual.html#perms]}}<br />
| {{G|optional [http://www.cis.upenn.edu/~bcpierce/unison/download/releases/stable/unison-manual.html#speeding]}}<br />
| {{No}}<br />
| {{G|Yes [http://www.cis.upenn.edu/~bcpierce/unison/download/releases/stable/unison-manual.html#backups]}}<br />
| '''bi'''directional<br />
| {{G|interactive}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{G|GTK2}}<br />
| GPL<br />
| FreeBSD, Windows, macOS, Android<br />
| {{G|Yes [http://www.cis.upenn.edu/~bcpierce/unison/status.html]}}<br />
|<br />
|}<br />
<br />
== Incremental backups ==<br />
<br />
Applications that can do incremental backups remember and take into account what data has been backed up during the last run (so-called "diffs") and eliminate the need to have duplicates of unchanged data. Restoring the data to a certain point in time would require locating the last full backup and all the incremental backups from then to the moment when it is supposed to be restored. This sort of backup is useful for those who do it very often.<br />
<br />
See also [[Dotfiles#Version control]].<br />
<br />
'''Legend:'''<br />
<br />
* '''Name''': the application name, linking to the official website.<br />
* '''Installation''': a link to the main ArchWiki article, if existing, or directly to the package pages.<br />
* '''Implementation''': the programming language, library, or utility that the application is based on.<br />
* '''Compressed storage''': compression is used for storage.<br />
* '''Encrypted storage''': encryption is used for storage.<br />
* '''Delta transfer''': only the modified ''parts'' of files are transferred.<br />
* '''Encrypted transfer''': data is encrypted by default when transferred over a network.<br />
* '''FS metadata''': file system permissions and attributes are backed up.<br />
* '''Easy access''': the backup is stored plainly in the file system, or is mountable as such.<br />
* '''Resumable''': the backup can be resumed without restarting it if interrupted.<br />
* '''Handles renames''': moved/renamed files are detected and not stored or transferred twice; it typically means that a checksum is computed for files or chunks thereof.<br />
* '''CLI''': the application is command-line driven, i.e. it is scriptable.<br />
* '''Other interfaces''': the application has the specified user interfaces, e.g. GUI, TUI, or web-based.<br />
* '''Licence''': the licence of the server and client applications.<br />
* '''Other platforms''': supported operating systems other than Linux.<br />
* '''Specificity''': brief notes about special features that notably set the application apart from the others.<br />
<br />
=== Single machine ===<br />
<br />
These applications are aimed at backing up data from the machine they are installed on, although the backup destination can be located on an external machine or storage media.<br />
<br />
==== Chunk-based increments ====<br />
<br />
If a file is modified, these applications store only its changed ''parts'' at the next snapshot. Compared to [[#File-based increments]] applications, these are more space-efficient, especially when large files receive small modifications; on the other hand, the archived snapshots have to be opened with the backup application that created them, since the files have to be reconstructed from the stored binary diffs.<br />
<br />
{| class="wikitable sortable"<br />
! Name<br />
! Installation<br />
! Implementation<br />
! Compressed storage<br />
! Encrypted storage<br />
! Delta transfer<br />
! Encrypted transfer<br />
! FS metadata<br />
! Easy access<br />
! Resumable<br />
! Handles renames<br />
! CLI<br />
! Other interfaces<br />
! Licence<br />
! Other platforms<br />
! Maintained<br />
! Specificity<br />
|-<br />
| [http://areca.sourceforge.net/ Areca Backup]<br />
| {{AUR|areca}}<br />
| Java<br />
| {{G|Zip, Zip64}}<br />
| {{G|AES128, AES256}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Y|Pausing only}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| GPLv2<br />
| Windows<br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://borgbackup.readthedocs.org/en/stable/ BorgBackup]<br />
| {{Pkg|borg}}<br />
| Python, C (Cython)<br />
| {{G|lz4, zlib, lzma, zstd}}<br />
| {{G|AES256}}<br />
| {{Yes}}<br />
| {{G|SSH}}<br />
| {{Yes}}[http://borgbackup.readthedocs.org/en/stable/faq.html#which-file-types-attributes-etc-are-preserved]<br />
| {{Yes}}[http://borgbackup.readthedocs.org/en/stable/usage.html#borg-mount]<br />
| {{Yes}}[http://borgbackup.readthedocs.org/en/stable/faq.html#if-a-backup-stops-mid-way-does-the-already-backed-up-data-stay-there]<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{G|third party}}<br />
| BSD<br />
| *BSD, macOS, Windows (Cygwin / WSL)[https://borgbackup.readthedocs.io/en/stable/#main-features]<br />
| {{Yes}}<br />
| Deduplication based on variable length chunks; support both local and SSH-based remote backup destination<br />
|-<br />
| [http://viric.name/cgi-bin/btar btar]<br />
| {{AUR|btar}}{{Broken package link|{{aur-mirror|btar}}}}<br />
| C<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv3<br />
| <br />
| {{Yes}}<br />
| Redundancy, indexed extraction, multicore compression, input and output serialisation, tolerance to partial archive errors. <br />
|-<br />
| [https://bup.github.io/ bup]<br />
| {{Pkg|bup}} {{AUR|bup-git}}<br />
| C, Python, git<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{G|Immature}}<br />
| {{Yes}}[https://bup.github.io/man/bup-fuse.html]<br />
| {{G|pick up where you left off [https://github.com/bup/bup/blob/master/README.md#reasons-bup-is-awesome]}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{G|third party}}<br />
| GPLv2<br />
| NetBSD, Windows, macOS<br />
| {{Yes}}<br />
| Same storage format as git<br />
|-<br />
| [https://github.com/emersion/bups bups]<br />
| {{AUR|bups}}<br />
| bup frontend<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{G|Immature}}<br />
| {{Yes}}<br />
| {{G|pick up where you left off [https://github.com/bup/bup/blob/master/README.md#reasons-bup-is-awesome]}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{G|GTK 3}}<br />
| MIT<br />
|<br />
| {{Yes}}<br />
|<br />
|-<br />
| [https://launchpad.net/deja-dup Déjà Dup]<br />
| [[Déjà Dup]]<br />
| duplicity front-end<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{G|GTK+}}<br />
| GPLv3<br />
| <br />
| {{Yes}}<br />
| Integrated into [[GNOME Files]].<br />
|-<br />
| [http://www.duplicati.com/ Duplicati]<br />
| {{AUR|duplicati-latest}}<br />
| C#<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{R|scheduled for 2.0 release}}<br />
| {{No}}<br />
| {{Y|Pausing only}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| LGPL<br />
| Windows<br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://www.nongnu.org/duplicity/ Duplicity]<br />
| [[Duplicity]]<br />
| librsync<br />
| {{G|gzip}}<br />
| {{G|gpg}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{G|Déjà Dup}}<br />
| GPL<br />
| <br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://www.duply.net/ Duply]<br />
| [[Duply]]<br />
| duplicity front-end<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv2<br />
| <br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://kde-apps.org/content/show.php/Kup+Backup+System?content=147465 Kup Backup System]<br />
| {{Pkg|kup}}<br />
| rsync, bup front-end<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{G|Immature}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Y|bup}}<br />
| {{G|Qt}}<br />
| GPLv2<br />
| <br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://liw.fi/obnam/ obnam]<br />
| {{AUR|obnam}}<br />
| Python<br />
| {{Yes}}<br />
| {{G|GnuPG}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{G|checkpoints every 100MB}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv3<br />
| <br />
| {{No}}<br />
| <br />
|-<br />
| [https://restic.github.io/ restic]<br />
| {{AUR|restic}} {{AUR|restic-git}}<br />
| Go<br />
| {{No}} [https://github.com/restic/restic/issues/21]<br />
| {{G|AES-256}} [https://github.com/restic/restic/blob/master/doc/Design.md]<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}[https://restic.readthedocs.io/en/stable/manual.html#mount-a-repository]<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| BSD<br />
| <br />
| {{Yes}}<br />
| <br />
|-<br />
| [http://zbackup.org/ ZBackup]<br />
| {{AUR|zbackup}}<br />
| C++<br />
| {{G|LZMA, LZO}}<br />
| {{G|AES}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{R|planned [https://github.com/zbackup/zbackup#improvements]}}<br />
| {{No}}<br />
| {{Y|Kinda through tar}}<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv2<br />
| <br />
| {{Yes}}<br />
| Repository consists of immutable files.<br />
|}<br />
<br />
==== File-based increments ====<br />
<br />
If a file is modified, these applications store its new version entirely at the next snapshot. Compared to [[#Chunk-based increments]] applications, these are less space-efficient, especially when large files receive small modifications; on the other hand, often the archived snapshots can be opened without the need to have the backup application installed.<br />
<br />
'''Specific legend:'''<br />
<br />
* '''Hard links''': whether unmodified files are stored as hard links to previous versions.<br />
<br />
{| class="wikitable sortable"<br />
! Name<br />
! Installation<br />
! Implementation<br />
! Compressed storage<br />
! Encrypted storage<br />
! Delta transfer<br />
! Encrypted transfer<br />
! FS metadata<br />
! Easy access<br />
! Resumable<br />
! Handles renames<br />
! Hard links<br />
! CLI<br />
! Other interfaces<br />
! Licence<br />
! Other platforms<br />
! Maintained<br />
! Specificity<br />
|-<br />
| [https://github.com/bit-team/backintime Back In Time]<br />
| [[Back In Time]]<br />
| Python, rsync, diff<br />
| {{No}}<br />
| {{No}}<br />
| {{G|rsync}}<br />
| {{G|rsync}}<br />
| {{G|rsync}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{No}}<br />
| {{G|Yes [http://backintime.le-web.org/documentation/]}}<br />
| {{Yes}}<br />
| {{G|Qt}}<br />
| GPLv2<br />
| <br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://dar.linux.free.fr/ DAR] (Disk ARchive)<br />
| {{AUR|dar}}<br />
| C++<br />
| {{G|special archive format}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{R|No [http://dar.linux.free.fr/doc/Features.html]}}<br />
| {{Yes}}<br />
| {{G|DarGUI}}<br />
| GPL<br />
| FreeBSD, NetBSD, Windows, macOS<br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://dargui.sourceforge.net/ DarGUI]<br />
| {{AUR|dargui}}<br />
| DAR front-end<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{R|No [http://dar.linux.free.fr/doc/Features.html]}}<br />
| {{No}}<br />
| {{G|GTK}}<br />
| GPL<br />
| Windows<br />
| style="text-align:center;" | ?<br />
|<br />
|-<br />
| [http://miek.nl/projects/hdup2/ hdup]{{Dead link|2016|07|11}}<br />
| {{Aur|hdup}}<br />
| C<br />
| {{G|bzip, gzip, lzop}}<br />
| {{G|gpg}}<br />
| style="text-align:center;" | ?<br />
| {{G|SSH}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{No}}<br />
| {{No}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv2<br />
|<br />
| {{No}}<br />
| Multiple backup targets.<br />
|-<br />
| [http://www.scottlu.com/Content/Link-Backup.html Link-Backup]<br />
| {{AUR|link-backup}}<br />
| Python<br />
| {{No}}<br />
| {{No}}<br />
| style="text-align:center;" | ?<br />
| {{G|SSH}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{R|No [http://www.scottlu.com/Content/Link-Backup.html]}}<br />
| {{Yes}}<br />
| {{No}}<br />
| MIT<br />
| <br />
| {{No}}<br />
| It copies itself to the server.<br />
|-<br />
| [https://github.com/miekg/rdup rdup]<br />
| {{AUR|rdup}}<br />
| C<br />
| {{G|tar.gz}}<br />
| {{G|gpg, blowfish and others}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv3<br />
| <br />
| {{No}}<br />
| Set of command-line tools.<br />
|-<br />
| [http://www.rsnapshot.org/ rsnapshot]<br />
| [[rsnapshot]]<br />
| rsync<br />
| {{No}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{G|Yes [http://rsnapshot.org/rsnapshot/docs/docbook/rest.html]}}<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv2<br />
| Win32<br />
| {{Yes}}<br />
| <br />
|-<br />
| [https://launchpad.net/sbackup sbackup]<br />
| {{AUR|sbackup}}<br />
| Python<br />
| {{G|gzip, bzip2}}<br />
| {{No}}<br />
| style="text-align:center;" | ?<br />
| {{G|SSH}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{No}}<br />
| {{No}}<br />
| {{No}}<br />
| {{No}}<br />
| {{G|GTK}}<br />
| GPLv3<br />
| <br />
| {{Yes}}<br />
|<br />
|-<br />
| [https://github.com/teejee2008/timeshift TimeShift]<br />
| {{AUR|timeshift}}<br />
| rsync<br />
| {{No}}<br />
| {{No}}<br />
| {{G|rsync}}<br />
| {{G|rsync}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{No}}<br />
| {{G|GTK}}<br />
| GPLv3<br />
| Designed for full-system backups to dedicated devices.<br />
| {{Yes}}<br />
|<br />
|}<br />
<br />
=== Network oriented ===<br />
<br />
These applications have been designed to centralize the backup of several machines connected to a network, through a server-client model. In general they are more complicated to deploy, compared to [[#Single machine]] solutions.<br />
<br />
'''Specific legend:'''<br />
<br />
* '''Control direction''': Pull: server logs into client. Push: client initiates backup session.<br />
* '''Increment type''': the strategy used to reduce used space by deduplicating data (i.e., besides compression).<br />
** '''file-based''': if a file is modified, the entire new version is stored at each snapshot.<br />
*** '''hard-links''': whether unmodified files are stored as hard links to previous versions.<br />
** '''chunk-based''': only the modified ''parts'' of files are stored at each snapshot.<br />
<br />
{| class="wikitable sortable"<br />
! Name<br />
! Installation<br />
! Implementation<br />
! Control direction<br />
! Compressed storage<br />
! Encrypted storage<br />
! Delta transfer<br />
! Encrypted transfer<br />
! FS metadata<br />
! Easy access<br />
! Resumable<br />
! Handles renames<br />
! Increment type<br />
! CLI<br />
! Other interfaces<br />
! Licence<br />
! Other platforms<br />
! Maintained<br />
! Specificity<br />
|-<br />
| [http://backuppc.sourceforge.net/index.html BackupPC]<br />
| [[BackupPC]]<br />
| Perl<br />
| Pull<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| file-based, hard links [http://backuppc.sourceforge.net/faq/BackupPC.html#Backup-basics]<br />
| {{No}}<br />
| {{G|Web}}<br />
| GPLv2<br />
| Any (no client needed)<br />
| {{Yes}}<br />
| Identical files across backups of the same or different clients are stored only once.<br />
|-<br />
| [http://www.bacula.org Bacula]<br />
| [https://aur.archlinux.org/packages/?K=bacula bacula*] in [[AUR]]<br />
| C++<br />
| Pull<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| file-based [http://burp.grke.org/why.html]<br />
| {{Yes}}<br />
| {{G|GUI, Web}}<br />
| AGPLv3<br />
| Windows, macOS<br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://burp.grke.org burp]<br />
| {{AUR|burp-backup}}<br />
| librsync<br />
| Push<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| chunk-based [http://burp.grke.org/why.html]<br />
| {{Yes}}<br />
| {{G|[https://git.ziirish.me/ziirish/burp-ui burp-ui]}}<br />
| AGPLv3<br />
| Windows<br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://safekeep.sourceforge.net/ SafeKeep]<br />
| {{AUR|safekeep}}<br />
| rdiff-backup<br />
| Pull<br />
| {{No}}<br />
| {{No}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| chunk-based [http://safekeep.sourceforge.net/safekeep.html]<br />
| {{Yes}}<br />
| {{Yes}}<br />
| GPL<br />
| <br />
| {{No}}<br />
| Integrates with [[LVM]] and databases to create consistent backups. Bandwidth throttling.<br />
|-<br />
| [http://www.snebu.com Snebu]<br />
| {{AUR|snebu}}{{Broken package link|{{aur-mirror|snebu}}}}<br />
| C<br />
| Push or Pull<br />
| {{Yes}}<br />
| {{No}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| file-based [http://www.snebu.com/#_concepts]<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv3<br />
| <br />
| style="text-align:center;" | ?<br />
| Supports arbitrary retention schedules.<br />
|-<br />
| [http://www.initzero.it/portal/soluzioni/software-open-source/synbak-universal-backup-system_2623.html Synbak]<br />
| {{Pkg|synbak}}<br />
| Multitool wrapper<br />
| ?<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| ?<br />
| {{No}}<br />
| {{G|Web}}<br />
| GPLv3<br />
| <br />
| {{Yes}}<br />
| Unifies several backup methods.<br />
|-<br />
| [https://www.urbackup.org UrBackup]<br />
| [https://aur.archlinux.org/packages/?K=urbackup urbackup*] in [[AUR]]<br />
| C++<br />
| Pull<br />
| {{No}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Y|Internet transfers only}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| file-based,hard-links and symlinks[http://blog.urbackup.org/156/symbolically-linking-directories-during-incremental-file-backups]/chunk-based CoW-Snapshots[http://blog.urbackup.org/83/file-backup-storage-with-btrfs-snapshots]<br />
| {{Yes}} (client)<br />
| {{G|GUI, Web}}<br />
| AGPLv3+<br />
| Windows, macOS<br />
| {{Yes}}<br />
| Identical files across backups of the same or different clients are stored only once. Integrates with LVM, dattobd and btrfs for file system snapshots.<br />
|}<br />
<br />
== Cloud storage ==<br />
<br />
=== Third-party services ===<br />
<br />
{{Merge|List of applications#File sharing|Remove the extra bullet points: the Wikipedia comparison table, and the respective webpages and Wikipedia articles do a better job at describing them.}}<br />
<br />
See also [[Wikipedia:Comparison of online backup services]] and [[List of applications#Cloud synchronization clients]].<br />
<br />
{{Tip|{{aur|cryptomator}} is an open-source, multi-platform program designed to add client-side transparent encryption on cloud-shared files.}}<br />
<br />
* {{App|Amazon S3|Amazon Simple Storage Service (Amazon S3), provides developers and IT teams with secure, durable, highly-scalable object storage. Amazon S3 is easy to use, with a simple web service interface to store and retrieve any amount of data from anywhere on the web. With Amazon S3, you pay only for the storage you actually use. There is no minimum fee and no setup cost.|http://aws.amazon.com/s3/|{{Pkg|s3cmd}} (high-level operations), {{Pkg|python-boto3}} (low-level API)}}<br />
<br />
* {{App|Backblaze B2|An object-storage service similar to Amazon S3.<br />
|https://www.backblaze.com/b2/cloud-storage-pricing.html|}}<br />
<br />
* {{App|[[CrashPlan]]|An online/offsite backup solution.<br />
** Unlimited online space for very reasonable pricing.<br />
** Automatic and incremental backups to multiple destinations.<br />
** Intuitive GUI.<br />
** Offers encryption and de-duplication.<br />
** Software is free for local use.<br />
** Restore prevents simultaneous backing up<br />
|http://www.crashplan.com/|{{AUR|crashplan}}}}<br />
<br />
* {{App|[[Dropbox]]|A popular file-sharing service.<br />
** A daemon monitors a specified directory, and uploads incremental changes to dropbox.com. <br />
** Changes automatically show up on your other computers. <br />
** Includes file sharing and a public directory. <br />
** You can recover deleted files. <br />
** Community written add-ons. <br />
** Free accounts have 2GB storage.<br />
|http://www.dropbox.com|{{AUR|dropbox}} {{AUR|nautilus-dropbox}}}}<br />
<br />
* {{App|[[Wikipedia:Google Drive|Google Drive]]|A file storage and synchronization service provided by Google.<br />
** Provides cloud storage, file sharing and collaborative editing.<br />
** Multiple clients are available.<br />
|https://drive.google.com|{{AUR|google-drive-ocamlfuse}} (free), {{AUR|drive}} (free), {{AUR|grive}} (free), {{AUR|gdrivefs}} (free), [[insync]] (non-free)}}, {{AUR|gdrive}} (free), {{AUR|drivesync-git}} (free)<br />
<br />
* {{App|[[Wikipedia:IDrive_Inc.|iDrive]]|Universal Online Backup.<br />
** Multiple Device Backup.<br />
** Online File Sync. <br />
** Real-Time Backup. <br />
** Backup and Access from Mobile Devices. <br />
** Remote Manage. <br />
** No GUI Front end for Linux, command line based. A wrapper script is available to make it easier to use.<br />
|https://www.idrive.com/|}}<br />
<br />
* {{App|[[Wikipedia:Jungle Disk|Jungle Disk]]|An online backup tool that stores its data in Amazon S3 or Rackspace Cloud Files.<br />
** A GNOME Files extension.<br />
** Only paid plans available.<br />
|http://www.jungledisk.com/|}}<br />
<br />
* {{App|[[Wikipedia:Mail.Ru|Mail.ru Cloud]]|Free cloud storage service created by Mail.ru.|https://cloud.mail.ru/|{{AUR|mailru-cloud}}}}<br />
<br />
* {{App|[[Wikipedia:Mega (website)|MEGA]]|Successor to the MegaUpload file-sharing service.<br />
** Free accounts are 50GB with paid plans available for more space.<br />
** Offers encryption and de-duplication.<br />
** Usually accessed through its web interface but other tools exist.<br />
|https://mega.co.nz|{{AUR|megatools}}, {{AUR|megasync}}, {{AUR|megafuse-git}}}}<br />
<br />
* {{App|Nutstore|A cloud service that lets you sync and share files anywhere.<br />
** Multiple file folders sync.<br />
** Service for Chinese users.<br />
|http://jianguoyun.com/|{{AUR|nutstore}}}}<br />
<br />
* {{App|OneDrive|Microsoft cloud service.<br />
|https://onedrive.com|{{AUR|onedrive-git}}}}<br />
<br />
* {{App|rsync.net|Cloud storage for offsite backups.<br />
** ZFS filesystem, accessible with any SSH/SFTP/SCP/rsync tool, running on a UNIX system with [http://www.rsync.net/resources/howto/remote_commands.html jailed shell access].<br />
** Simple rsync synchronization with daily automatic ZFS snapshots.<br />
** Native support for Attic and {{Pkg|borg}} clients: http://rsync.net/products/attic.html<br />
|http://www.rsync.net/|[[rsync]]/[[SSH]], {{Pkg|borg}}}}<br />
<br />
* {{App|[[Wikipedia:SpiderOak|SpiderOak]]|An online backup tool for Windows, Mac and Linux users to back up, share, sync, access and store their data.<br />
** Free account holds 2GB as a 60-day trial.<br />
** Includes file sharing and a public directory.<br />
** Incremental backup and sync are both supported.<br />
|https://spideroak.com/|{{AUR|spideroak-one}}}}<br />
<br />
* {{App|[[Wikipedia:Storage Made Easy|Storage Made Easy]]|Provides unified access to numerous cloud storage services, as well as its own storage.<br />
** Free and paid version available.<br />
** Free account holds 5GB and allows access to up to three other cloud storage providers.<br />
** Supports local directory via fuse, as well as web access.<br />
** Supports many cloud storage services, such as Box, Dropbox, Google Drive, Onedrive, and others.<br />
|http://storagemadeeasy.com/|}}<br />
<br />
* {{App|[[Wikipedia:Tarsnap|Tarsnap]]|A secure online backup service for Linux, BSD, macOS and Windows (through Cygwin).<br />
** Compressed encrypted backups to Amazon S3 Servers.<br />
** Automate via [[cron]].<br />
** Incremental backups.<br />
** Backup any files or directories.<br />
** Command line only client.<br />
** Pay only for usage (bandwidth and storage). <br />
|http://www.tarsnap.com|{{Pkg|tarsnap}}}}<br />
<br />
* {{App|[[Yandex Disk]]|Free cloud storage service created by Yandex.ru that gives you access to your photos, videos and documents from any internet-enabled device.|https://disk.yandex.ru/|{{AUR|yandex-disk}}}}<br />
<br />
==== Multi-service clients ====<br />
<br />
* {{App|[[Déjà Dup]]|A simple GTK+ backup program. It hides the complexity of doing backups the 'right way' (encrypted, off-site, and regular) and uses duplicity as the backend.<br />
** Automatic, timed backup configurable in GUI.<br />
** Restore wizard.<br />
** Integrated into the GNOME Files file manager.<br />
** Inherits several features of duplicity.<br />
|https://launchpad.net/deja-dup|{{Pkg|deja-dup}}}}<br />
<br />
* {{App|Duplicati|Backup client that securely stores encrypted, incremental, compressed backups on cloud storage services and remote file servers. It works with Amazon S3, Windows Live SkyDrive, Google Drive (Google Docs), Rackspace Cloud Files or WebDAV, SSH, FTP (and many more). Duplicati is open source and free.|http://www.duplicati.com/|{{AUR|duplicati-latest}}}}<br />
<br />
* {{App|[[Duplicity]]|A simple command-line utility which allows encrypted compressed incremental backup to nearly any storage.<br />
** Supports gpg encryption and signing.<br />
** Supports gzip compression.<br />
** Supports full or incremental backups, incremental backup stores only difference between new and old file.<br />
** Supports pushing over [http://duplicity.nongnu.org/duplicity.1.html#sect7 many protocols].<br />
|http://www.nongnu.org/duplicity/|{{Pkg|duplicity}}}}<br />
<br />
* {{App|[[Duply]]|Front-end for duplicity which simplifies running it by:<br />
** keeping recurring settings in profiles per backup job;<br />
** automated import/export of keys between profile and keyring;<br />
** enabling batch operations eg. backup_verify_purge;<br />
** executing pre/post scripts;<br />
** precondition checking for flawless duplicity operation.<br />
|http://www.duply.net/|{{AUR|duply}}}}<br />
<br />
* {{App|rclone|Rclone is a command line program to sync files and directories to and from Google Drive, Amazon S3, Openstack Swift / Rackspace cloud files / Memset Memstore, Dropbox, Google Cloud Storage and The local filesystem.|http://rclone.org/|{{Pkg|rclone}}}}<br />
<br />
* {{App|Syncany|Cloud storage and filesharing application with a focus on security and abstraction of storage.|https://www.syncany.org/|{{AUR|syncany}}}}<br />
<br />
=== Custom infrastructure ===<br />
<br />
See [[List of applications/Internet#Cloud storage servers]]<br />
<br />
== Version control systems ==<br />
<br />
{{Merge|List_of_applications#Work_environment|Also drop the extra bullets, the Wikipedia comparison table is much better than this.}}<br />
<br />
These are traditionally used for keeping track of software development; but if you want to have a simple way to manage your config files in one directory, it might be a good solution.<br />
<br />
See also [[Wikipedia:Comparison of revision control software]].<br />
<br />
* {{App|[[Bazaar]]|A distributed version control system that helps you track project history over time and to collaborate easily with others.<br />
** Similar commands to Subversion.<br />
** Supports working with or without a central server.<br />
** Support for working with some other revision control systems<br />
** Complete Unicode support.<br />
|https://bazaar.canonical.com/en/|{{Pkg|bzr}}}}<br />
<br />
* {{App|Darcs|A distributed revision control system that was designed to replace traditional, centralized source control systems such as CVS and Subversion.<br />
** Offline mode.<br />
** Easy branching and merging.<br />
** Written in Haskell.<br />
** Not very fast.<br />
|http://darcs.net/|{{Pkg|darcs}}}}<br />
<br />
* {{App|[[Git]]|A distributed revision control and source code management system with an emphasis on speed.<br />
** Very easy creation, merging, and deletion of branches.<br />
** Nearly all operations are performed locally, giving it a huge speed advantage on centralized systems.<br />
** Has a "staging area" or "index", this is an intermediate area where commits can be formatted and reviewed before completing the commit.<br />
** Does not handle binary files very well.<br />
|https://git-scm.com/|{{Pkg|git}}}}<br />
<br />
* {{App|[[Mercurial]]|A distributed version control system written in Python and similar in many ways to Git.<br />
** Platform independent.<br />
** Support for [http://mercurial.selenic.com/wiki/UsingExtensions extensions].<br />
** A set of commands consistent with Subversion.<br />
** Supports tags.<br />
|https://www.mercurial-scm.org/|{{Pkg|mercurial}}}}<br />
<br />
* {{App|[[Subversion]]|A full-featured centralized version control system originally designed to be a better CVS.<br />
** Renamed/copied/moved/removed files retain full revision history.<br />
** Native support for binary files, with space-efficient binary-diff storage.<br />
** Costs proportional to change size, not to data size.<br />
** Allows arbitrary metadata ("properties") to be attached to any file or directory. <br />
|https://subversion.apache.org/|{{Pkg|subversion}}}}<br />
<br />
== See also ==<br />
<br />
* [[Wikipedia:List of backup software]]<br />
* [[Wikipedia:Comparison of backup software]]<br />
* [https://github.com/restic/others Exhaustive list of backup solutions for Linux]<br />
* [http://www.halfgaar.net/backing-up-unix Backing up Linux and other Unix(-like) systems]<br />
* [http://www.askapache.com/security/mirror-using-rsync-ssh.html Mirroring an Entire Site using Rsync over SSH]<br />
* [http://www.si-journal.org/index.php/JSI/article/view/205 Performance comparison of five remote incremental backup tools: Rsync, Rdiff-backup, Duplicity, Areca and Link-Backup]<br />
* [http://blog.pointsoftware.ch/index.php/howto-local-and-remote-snapshot-backup-using-rsync-with-hard-links/ rsync-snapshot.sh] — Local and remote snapshot backup using rsync with hard links</div>Wzyboyhttps://wiki.archlinux.org/index.php?title=Synchronization_and_backup_programs&diff=514861Synchronization and backup programs2018-03-25T03:53:56Z<p>Wzyboy: /* Chunk-based increments */ BorgBackup: Linux</p>
<hr />
<div>[[Category:Data compression and archiving]]<br />
[[Category:System recovery]]<br />
[[de:Backups]]<br />
[[ja:バックアッププログラム]]<br />
[[ru:Backup programs]]<br />
{{Related articles start}}<br />
{{Related|System backup}}<br />
{{Related|Disk cloning}}<br />
{{Related|List of applications#File sharing}}<br />
{{Related|System maintenance#Backup}}<br />
{{Related|Dotfiles#Version control}}<br />
{{Related|File recovery}}<br />
{{Related articles end}}<br />
<br />
This page lists and compares applications that synchronize data between two or more locations, and those that build on top of such functionality to make incremental copies of important data for backup purposes. Because of their relationship, the two groups share several traits that justify describing them in the same article.<br />
<br />
== Backup overview ==<br />
<br />
Having backups of important data is a necessary measure to take, since human and machine processing errors are very likely to generate corruption as time passes, and also the physical media where the data is stored is inevitably destined to fail. In order to choose the best program for one's own needs, the following aspects should be considered:<br />
<br />
* The type of backup medium that is going to store the data, e.g. CD, DVD, remote server, external hard drive, etc.<br />
* The planned frequency of backups, e.g. daily, weekly, monthly, etc.<br />
* The features expected from the backup solution, e.g. compression, encryption, handles renames, etc.<br />
* The planned method to restore backups if needed.<br />
<br />
== Data synchronization ==<br />
<br />
These applications simply keep directories synchronized between multiple locations/machines, in a "mirror" fashion. Nonetheless, most of them still allow storing and reverting to old revisions of modified or deleted files.<br />
<br />
See also [[Wikipedia:Comparison of file synchronization software]].<br />
<br />
'''Legend:'''<br />
<br />
* '''Name''': the application name, linking to the ArchWiki article or the official website.<br />
* '''Installation''': a link to the package.<br />
* '''Implementation''': the programming language, library, or utility that the application is based on.<br />
* '''Delta transfer''': only the modified ''parts'' of files are transferred.<br />
* '''Encrypted transfer''': data is encrypted by default when transferred over the network.<br />
* '''FS metadata''': file system permissions and attributes are synchronized.<br />
* '''Resumable''': the synchronization can be resumed if interrupted.<br />
* '''Handles renames''': moved/renamed files are detected and not stored or transferred twice. It typically means that a checksum of files or its chunks is computed.<br />
* '''Version control''': the old version of files are backed up ('''reverse incremental backup''').<br />
* '''Change propagation''': specifies in how many directions changes can be propagated.<br />
** ''unidirectional'' means one-way synchronization of two locations,<br />
** ''bidirectional'' means two-way synchronization of two locations and<br />
** ''multidirectional'' means full synchronization of more than two locations.<br />
* '''Conflict resolution''': the application handles file conflicts, either automatically or interactively, i.e. it does not silently discard conflicting files. This attribute does not apply to applications that only propagate changes in one direction.<br />
* '''FS monitoring''': the application listens to file system events to trigger the synchronization.<br />
* '''CLI''': the application is command-line driven, i.e. it is scriptable.<br />
* '''Other interfaces''': the application has the specified user interfaces, e.g. GUI, TUI, or web-based.<br />
* '''License''': the license of the server and client applications.<br />
* '''Other platforms''': supported operating systems other than Linux.<br />
* '''Specificity''': brief notes about special features that notably set the application apart from the others.<br />
<br />
{| class="wikitable sortable"<br />
! Name<br />
! Installation<br />
! Implementation<br />
! Delta transfer<br />
! Encrypted transfer<br />
! FS metadata<br />
! Resumable<br />
! Handles renames<br />
! Version control<br />
! Change propagation<br />
! Conflict resolution<br />
! FS monitoring<br />
! CLI<br />
! Other interfaces<br />
! License<br />
! Other platforms<br />
! Maintained<br />
! Specificity<br />
|-<br />
| [[Resilio Sync]]<br />
| {{aur|rslsync}}<br />
| ? (closed source)<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| '''multi'''directional<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{G|Web}}<br />
| Proprietary freemium<br />
| FreeBSD, Windows, macOS, Android, iOS, Windows Phone, Amazon Kindle Fire<br />
| {{Yes}}<br />
| P2P sync<br />
|-<br />
| [https://www.freefilesync.org/ FreeFileSync]<br />
| {{AUR|freefilesync}}<br />
| C++<br />
| style="text-align:center;" | ?<br />
| {{G|SFTP [http://www.freefilesync.org/faq.php#features]}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{G|Yes [http://www.freefilesync.org/faq.php#features]}}<br />
| {{G|1=Yes [http://www.freefilesync.org/manual.php?topic=versioning]}}<br />
|'''uni'''directional / '''multi'''directional<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| GPL<br />
| Windows, macOS<br />
| {{Yes}}<br />
|<br />
|-<br />
| [https://git-annex.branchable.com/ git-annex]<br />
| {{Pkg|git-annex}}<br />
| Haskell, git<br />
| {{G|rsync [http://git-annex.branchable.com/transferring_data/]}}<br />
| {{G|rsync [http://git-annex.branchable.com/transferring_data/]}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| '''multi'''directional; with git remotes [http://git-annex.branchable.com/sync/]<br />
| {{G|renames conflicting files [http://git-annex.branchable.com/automatic_conflict_resolution/]}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{G|[http://git-annex.branchable.com/assistant/ git-annex assistant]}}<br />
| GPLv3<br />
| macOS, Android<br />
| {{Yes}}<br />
| Manage files with git<br />
|-<br />
| [http://www.netpower.fr/osync osync.sh]<br />
| {{AUR|osync}}<br />
| Bash, based on rsync<br />
| {{G|rsync}}<br />
| {{G|rsync}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| '''bi'''directional<br />
| {{G|keeps multiple versions of a file [http://www.netpower.fr/sites/default/files/soft/html-doc/osync_v1.2.html#toc-Subsubsection-1.3.1]}}<br />
| {{G|optional [https://github.com/deajan/osync#daemon-mode]}}<br />
| {{Yes}}<br />
| {{No}}<br />
| BSD<br />
| <br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://www.nongnu.org/rdiff-backup/ rdiff-backup]<br />
| {{Pkg|rdiff-backup}}<br />
| Python 2, librsync<br />
| {{G|rsync}}<br />
| {{G|rsync}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
|colspan="2"| '''uni'''directional<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| GPL<br />
| Win32<br />
| style="text-align:center;" | ?<br />
|<br />
|-<br />
| [[rsync]]<br />
| {{pkg|rsync}}<br />
| C<br />
| {{Yes}}<br />
| {{G|SSH or native protocol}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{G|<br />
* {{ic|--link-dest}} with hard links [http://www.ibm.com/developerworks/aix/library/au-spunix_rsync/index.html#backup]<br />
* {{ic|--backup}}<br />
}}<br />
|colspan="2"| '''uni'''directional<br />
| {{No}}<br />
| {{Yes}}<br />
| {{G|[[Rsync#Front-ends]]}}<br />
| GPLv3<br />
| Win32<br />
| {{Yes}}<br />
| Standard tool present on all Linux distributions.<br />
|-<br />
| [https://sparkleshare.org/ SparkleShare]<br />
| {{Pkg|sparkleshare}}<br />
| C#, git<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| GPLv3<br />
| Windows, macOS<br />
| {{Yes}}<br />
|<br />
|-<br />
| [[Syncthing]]<br />
| {{pkg|syncthing}}<br />
| Go<br />
| {{G|Yes [http://docs.syncthing.net/users/faq.html#is-synchronization-fast]}}<br />
| {{G|Yes [http://docs.syncthing.net/users/security.html]}}<br />
| {{Y|partial [http://docs.syncthing.net/users/faq.html#what-things-are-synced]}}<br />
| {{G|Yes }}<br />
| style="text-align:center;" | ?<br />
| {{G|Yes [http://docs.syncthing.net/users/versioning.html]}}, previous versions moved to archive folder<br />
| '''multi'''directional<br />
| {{G|renames one file [https://docs.syncthing.net/users/faq.html#what-if-there-is-a-conflict]}}<br />
| {{G|Yes}}<br />
| {{Yes}}<br />
| {{G|Web, GTK}}<br />
| MPL v2<br />
| BSD, Windows, macOS, Android, Kindle Paperwhite<br />
| {{Yes}}<br />
| P2P sync<br />
|-<br />
| [http://synkron.sourceforge.net/ Synkron]<br />
| {{AUR|synkron}}<br />
| C++<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| '''multi'''directional<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{G|Qt}}<br />
| GPLv2<br />
| Windows, macOS<br />
| {{R|[https://sourceforge.net/projects/synkron/ No]}}<br />
|<br />
|-<br />
| [[taskd]]<br />
| {{aur|taskd}}<br />
| C++, Python<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| '''multi'''directional<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| MIT<br />
| Android<br />
| {{Yes}}<br />
|<br />
|-<br />
| [[Unison]]<br />
| {{pkg|unison}}<br />
| OCaml<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Y|partial [http://www.cis.upenn.edu/~bcpierce/unison/download/releases/stable/unison-manual.html#perms]}}<br />
| {{G|optional [http://www.cis.upenn.edu/~bcpierce/unison/download/releases/stable/unison-manual.html#speeding]}}<br />
| {{No}}<br />
| {{G|Yes [http://www.cis.upenn.edu/~bcpierce/unison/download/releases/stable/unison-manual.html#backups]}}<br />
| '''bi'''directional<br />
| {{G|interactive}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{G|GTK2}}<br />
| GPL<br />
| FreeBSD, Windows, macOS, Android<br />
| {{G|Yes [http://www.cis.upenn.edu/~bcpierce/unison/status.html]}}<br />
|<br />
|}<br />
<br />
== Incremental backups ==<br />
<br />
Applications that can do incremental backups remember and take into account what data has been backed up during the last run (so-called "diffs") and eliminate the need to have duplicates of unchanged data. Restoring the data to a certain point in time would require locating the last full backup and all the incremental backups from then to the moment when it is supposed to be restored. This sort of backup is useful for those who do it very often.<br />
<br />
See also [[Dotfiles#Version control]].<br />
<br />
'''Legend:'''<br />
<br />
* '''Name''': the application name, linking to the official website.<br />
* '''Installation''': a link to the main ArchWiki article, if existing, or directly to the package pages.<br />
* '''Implementation''': the programming language, library, or utility that the application is based on.<br />
* '''Compressed storage''': compression is used for storage.<br />
* '''Encrypted storage''': encryption is used for storage.<br />
* '''Delta transfer''': only the modified ''parts'' of files are transferred.<br />
* '''Encrypted transfer''': data is encrypted by default when transferred over a network.<br />
* '''FS metadata''': file system permissions and attributes are backed up.<br />
* '''Easy access''': the backup is stored plainly in the file system, or is mountable as such.<br />
* '''Resumable''': the backup can be resumed without restarting it if interrupted.<br />
* '''Handles renames''': moved/renamed files are detected and not stored or transferred twice; it typically means that a checksum is computed for files or chunks thereof.<br />
* '''CLI''': the application is command-line driven, i.e. it is scriptable.<br />
* '''Other interfaces''': the application has the specified user interfaces, e.g. GUI, TUI, or web-based.<br />
* '''Licence''': the licence of the server and client applications.<br />
* '''Other platforms''': supported operating systems other than Linux.<br />
* '''Specificity''': brief notes about special features that notably set the application apart from the others.<br />
<br />
=== Single machine ===<br />
<br />
These applications are aimed at backing up data from the machine they are installed on, although the backup destination can be located on an external machine or storage media.<br />
<br />
==== Chunk-based increments ====<br />
<br />
If a file is modified, these applications store only its changed ''parts'' at the next snapshot. Compared to [[#File-based increments]] applications, these are more space-efficient, especially when large files receive small modifications; on the other hand, the archived snapshots have to be opened with the backup application that created them, since the files have to be reconstructed from the stored binary diffs.<br />
<br />
{| class="wikitable sortable"<br />
! Name<br />
! Installation<br />
! Implementation<br />
! Compressed storage<br />
! Encrypted storage<br />
! Delta transfer<br />
! Encrypted transfer<br />
! FS metadata<br />
! Easy access<br />
! Resumable<br />
! Handles renames<br />
! CLI<br />
! Other interfaces<br />
! Licence<br />
! Other platforms<br />
! Maintained<br />
! Specificity<br />
|-<br />
| [http://areca.sourceforge.net/ Areca Backup]<br />
| {{AUR|areca}}<br />
| Java<br />
| {{G|Zip, Zip64}}<br />
| {{G|AES128, AES256}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Y|Pausing only}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| GPLv2<br />
| Windows<br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://borgbackup.readthedocs.org/en/stable/ BorgBackup]<br />
| {{Pkg|borg}}<br />
| Python, C (Cython)<br />
| {{G|lz4, zlib, lzma, zstd}}<br />
| {{G|AES256}}<br />
| {{Yes}}<br />
| {{G|SSH}}<br />
| {{Yes}}[http://borgbackup.readthedocs.org/en/stable/faq.html#which-file-types-attributes-etc-are-preserved]<br />
| {{Yes}}[http://borgbackup.readthedocs.org/en/stable/usage.html#borg-mount]<br />
| {{Yes}}[http://borgbackup.readthedocs.org/en/stable/faq.html#if-a-backup-stops-mid-way-does-the-already-backed-up-data-stay-there]<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{G|third party}}<br />
| BSD<br />
| Linux, *BSD, macOS, Windows (Cygwin / WSL)[https://borgbackup.readthedocs.io/en/stable/#main-features]<br />
| {{Yes}}<br />
| Deduplication based on variable length chunks; support both local and SSH-based remote backup destination<br />
|-<br />
| [http://viric.name/cgi-bin/btar btar]<br />
| {{AUR|btar}}{{Broken package link|{{aur-mirror|btar}}}}<br />
| C<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv3<br />
| <br />
| {{Yes}}<br />
| Redundancy, indexed extraction, multicore compression, input and output serialisation, tolerance to partial archive errors. <br />
|-<br />
| [https://bup.github.io/ bup]<br />
| {{Pkg|bup}} {{AUR|bup-git}}<br />
| C, Python, git<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{G|Immature}}<br />
| {{Yes}}[https://bup.github.io/man/bup-fuse.html]<br />
| {{G|pick up where you left off [https://github.com/bup/bup/blob/master/README.md#reasons-bup-is-awesome]}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{G|third party}}<br />
| GPLv2<br />
| NetBSD, Windows, macOS<br />
| {{Yes}}<br />
| Same storage format as git<br />
|-<br />
| [https://github.com/emersion/bups bups]<br />
| {{AUR|bups}}<br />
| bup frontend<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{G|Immature}}<br />
| {{Yes}}<br />
| {{G|pick up where you left off [https://github.com/bup/bup/blob/master/README.md#reasons-bup-is-awesome]}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{G|GTK 3}}<br />
| MIT<br />
|<br />
| {{Yes}}<br />
|<br />
|-<br />
| [https://launchpad.net/deja-dup Déjà Dup]<br />
| [[Déjà Dup]]<br />
| duplicity front-end<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{G|GTK+}}<br />
| GPLv3<br />
| <br />
| {{Yes}}<br />
| Integrated into [[GNOME Files]].<br />
|-<br />
| [http://www.duplicati.com/ Duplicati]<br />
| {{AUR|duplicati-latest}}<br />
| C#<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{R|scheduled for 2.0 release}}<br />
| {{No}}<br />
| {{Y|Pausing only}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| LGPL<br />
| Windows<br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://www.nongnu.org/duplicity/ Duplicity]<br />
| [[Duplicity]]<br />
| librsync<br />
| {{G|gzip}}<br />
| {{G|gpg}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{G|Déjà Dup}}<br />
| GPL<br />
| <br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://www.duply.net/ Duply]<br />
| [[Duply]]<br />
| duplicity front-end<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv2<br />
| <br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://kde-apps.org/content/show.php/Kup+Backup+System?content=147465 Kup Backup System]<br />
| {{Pkg|kup}}<br />
| rsync, bup front-end<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{G|Immature}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Y|bup}}<br />
| {{G|Qt}}<br />
| GPLv2<br />
| <br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://liw.fi/obnam/ obnam]<br />
| {{AUR|obnam}}<br />
| Python<br />
| {{Yes}}<br />
| {{G|GnuPG}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{G|checkpoints every 100MB}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv3<br />
| <br />
| {{No}}<br />
| <br />
|-<br />
| [https://restic.github.io/ restic]<br />
| {{AUR|restic}} {{AUR|restic-git}}<br />
| Go<br />
| {{No}} [https://github.com/restic/restic/issues/21]<br />
| {{G|AES-256}} [https://github.com/restic/restic/blob/master/doc/Design.md]<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}[https://restic.readthedocs.io/en/stable/manual.html#mount-a-repository]<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| BSD<br />
| <br />
| {{Yes}}<br />
| <br />
|-<br />
| [http://zbackup.org/ ZBackup]<br />
| {{AUR|zbackup}}<br />
| C++<br />
| {{G|LZMA, LZO}}<br />
| {{G|AES}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{R|planned [https://github.com/zbackup/zbackup#improvements]}}<br />
| {{No}}<br />
| {{Y|Kinda through tar}}<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv2<br />
| <br />
| {{Yes}}<br />
| Repository consists of immutable files.<br />
|}<br />
<br />
==== File-based increments ====<br />
<br />
If a file is modified, these applications store its new version entirely at the next snapshot. Compared to [[#Chunk-based increments]] applications, these are less space-efficient, especially when large files receive small modifications; on the other hand, often the archived snapshots can be opened without the need to have the backup application installed.<br />
<br />
'''Specific legend:'''<br />
<br />
* '''Hard links''': whether unmodified files are stored as hard links to previous versions.<br />
<br />
{| class="wikitable sortable"<br />
! Name<br />
! Installation<br />
! Implementation<br />
! Compressed storage<br />
! Encrypted storage<br />
! Delta transfer<br />
! Encrypted transfer<br />
! FS metadata<br />
! Easy access<br />
! Resumable<br />
! Handles renames<br />
! Hard links<br />
! CLI<br />
! Other interfaces<br />
! Licence<br />
! Other platforms<br />
! Maintained<br />
! Specificity<br />
|-<br />
| [https://github.com/bit-team/backintime Back In Time]<br />
| [[Back In Time]]<br />
| Python, rsync, diff<br />
| {{No}}<br />
| {{No}}<br />
| {{G|rsync}}<br />
| {{G|rsync}}<br />
| {{G|rsync}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{No}}<br />
| {{G|Yes [http://backintime.le-web.org/documentation/]}}<br />
| {{Yes}}<br />
| {{G|Qt}}<br />
| GPLv2<br />
| <br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://dar.linux.free.fr/ DAR] (Disk ARchive)<br />
| {{AUR|dar}}<br />
| C++<br />
| {{G|special archive format}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{R|No [http://dar.linux.free.fr/doc/Features.html]}}<br />
| {{Yes}}<br />
| {{G|DarGUI}}<br />
| GPL<br />
| FreeBSD, NetBSD, Windows, macOS<br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://dargui.sourceforge.net/ DarGUI]<br />
| {{AUR|dargui}}<br />
| DAR front-end<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{R|No [http://dar.linux.free.fr/doc/Features.html]}}<br />
| {{No}}<br />
| {{G|GTK}}<br />
| GPL<br />
| Windows<br />
| style="text-align:center;" | ?<br />
|<br />
|-<br />
| [http://miek.nl/projects/hdup2/ hdup]{{Dead link|2016|07|11}}<br />
| {{Aur|hdup}}<br />
| C<br />
| {{G|bzip, gzip, lzop}}<br />
| {{G|gpg}}<br />
| style="text-align:center;" | ?<br />
| {{G|SSH}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{No}}<br />
| {{No}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv2<br />
|<br />
| {{No}}<br />
| Multiple backup targets.<br />
|-<br />
| [http://www.scottlu.com/Content/Link-Backup.html Link-Backup]<br />
| {{AUR|link-backup}}<br />
| Python<br />
| {{No}}<br />
| {{No}}<br />
| style="text-align:center;" | ?<br />
| {{G|SSH}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{R|No [http://www.scottlu.com/Content/Link-Backup.html]}}<br />
| {{Yes}}<br />
| {{No}}<br />
| MIT<br />
| <br />
| {{No}}<br />
| It copies itself to the server.<br />
|-<br />
| [https://github.com/miekg/rdup rdup]<br />
| {{AUR|rdup}}<br />
| C<br />
| {{G|tar.gz}}<br />
| {{G|gpg, blowfish and others}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv3<br />
| <br />
| {{No}}<br />
| Set of command-line tools.<br />
|-<br />
| [http://www.rsnapshot.org/ rsnapshot]<br />
| [[rsnapshot]]<br />
| rsync<br />
| {{No}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{G|Yes [http://rsnapshot.org/rsnapshot/docs/docbook/rest.html]}}<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv2<br />
| Win32<br />
| {{Yes}}<br />
| <br />
|-<br />
| [https://launchpad.net/sbackup sbackup]<br />
| {{AUR|sbackup}}<br />
| Python<br />
| {{G|gzip, bzip2}}<br />
| {{No}}<br />
| style="text-align:center;" | ?<br />
| {{G|SSH}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{No}}<br />
| {{No}}<br />
| {{No}}<br />
| {{No}}<br />
| {{G|GTK}}<br />
| GPLv3<br />
| <br />
| {{Yes}}<br />
|<br />
|-<br />
| [https://github.com/teejee2008/timeshift TimeShift]<br />
| {{AUR|timeshift}}<br />
| rsync<br />
| {{No}}<br />
| {{No}}<br />
| {{G|rsync}}<br />
| {{G|rsync}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{No}}<br />
| {{G|GTK}}<br />
| GPLv3<br />
| Designed for full-system backups to dedicated devices.<br />
| {{Yes}}<br />
|<br />
|}<br />
<br />
=== Network oriented ===<br />
<br />
These applications have been designed to centralize the backup of several machines connected to a network, through a server-client model. In general they are more complicated to deploy, compared to [[#Single machine]] solutions.<br />
<br />
'''Specific legend:'''<br />
<br />
* '''Control direction''': Pull: server logs into client. Push: client initiates backup session.<br />
* '''Increment type''': the strategy used to reduce used space by deduplicating data (i.e., besides compression).<br />
** '''file-based''': if a file is modified, the entire new version is stored at each snapshot.<br />
*** '''hard-links''': whether unmodified files are stored as hard links to previous versions.<br />
** '''chunk-based''': only the modified ''parts'' of files are stored at each snapshot.<br />
<br />
{| class="wikitable sortable"<br />
! Name<br />
! Installation<br />
! Implementation<br />
! Control direction<br />
! Compressed storage<br />
! Encrypted storage<br />
! Delta transfer<br />
! Encrypted transfer<br />
! FS metadata<br />
! Easy access<br />
! Resumable<br />
! Handles renames<br />
! Increment type<br />
! CLI<br />
! Other interfaces<br />
! Licence<br />
! Other platforms<br />
! Maintained<br />
! Specificity<br />
|-<br />
| [http://backuppc.sourceforge.net/index.html BackupPC]<br />
| [[BackupPC]]<br />
| Perl<br />
| Pull<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| file-based, hard links [http://backuppc.sourceforge.net/faq/BackupPC.html#Backup-basics]<br />
| {{No}}<br />
| {{G|Web}}<br />
| GPLv2<br />
| Any (no client needed)<br />
| {{Yes}}<br />
| Identical files across backups of the same or different clients are stored only once.<br />
|-<br />
| [http://www.bacula.org Bacula]<br />
| [https://aur.archlinux.org/packages/?K=bacula bacula*] in [[AUR]]<br />
| C++<br />
| Pull<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| file-based [http://burp.grke.org/why.html]<br />
| {{Yes}}<br />
| {{G|GUI, Web}}<br />
| AGPLv3<br />
| Windows, macOS<br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://burp.grke.org burp]<br />
| {{AUR|burp-backup}}<br />
| librsync<br />
| Push<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| chunk-based [http://burp.grke.org/why.html]<br />
| {{Yes}}<br />
| {{G|[https://git.ziirish.me/ziirish/burp-ui burp-ui]}}<br />
| AGPLv3<br />
| Windows<br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://safekeep.sourceforge.net/ SafeKeep]<br />
| {{AUR|safekeep}}<br />
| rdiff-backup<br />
| Pull<br />
| {{No}}<br />
| {{No}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| chunk-based [http://safekeep.sourceforge.net/safekeep.html]<br />
| {{Yes}}<br />
| {{Yes}}<br />
| GPL<br />
| <br />
| {{No}}<br />
| Integrates with [[LVM]] and databases to create consistent backups. Bandwidth throttling.<br />
|-<br />
| [http://www.snebu.com Snebu]<br />
| {{AUR|snebu}}{{Broken package link|{{aur-mirror|snebu}}}}<br />
| C<br />
| Push or Pull<br />
| {{Yes}}<br />
| {{No}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| file-based [http://www.snebu.com/#_concepts]<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv3<br />
| <br />
| style="text-align:center;" | ?<br />
| Supports arbitrary retention schedules.<br />
|-<br />
| [http://www.initzero.it/portal/soluzioni/software-open-source/synbak-universal-backup-system_2623.html Synbak]<br />
| {{Pkg|synbak}}<br />
| Multitool wrapper<br />
| ?<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| ?<br />
| {{No}}<br />
| {{G|Web}}<br />
| GPLv3<br />
| <br />
| {{Yes}}<br />
| Unifies several backup methods.<br />
|-<br />
| [https://www.urbackup.org UrBackup]<br />
| [https://aur.archlinux.org/packages/?K=urbackup urbackup*] in [[AUR]]<br />
| C++<br />
| Pull<br />
| {{No}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Y|Internet transfers only}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| file-based,hard-links and symlinks[http://blog.urbackup.org/156/symbolically-linking-directories-during-incremental-file-backups]/chunk-based CoW-Snapshots[http://blog.urbackup.org/83/file-backup-storage-with-btrfs-snapshots]<br />
| {{Yes}} (client)<br />
| {{G|GUI, Web}}<br />
| AGPLv3+<br />
| Windows, macOS<br />
| {{Yes}}<br />
| Identical files across backups of the same or different clients are stored only once. Integrates with LVM, dattobd and btrfs for file system snapshots.<br />
|}<br />
<br />
== Cloud storage ==<br />
<br />
=== Third-party services ===<br />
<br />
{{Merge|List of applications#File sharing|Remove the extra bullet points: the Wikipedia comparison table, and the respective webpages and Wikipedia articles do a better job at describing them.}}<br />
<br />
See also [[Wikipedia:Comparison of online backup services]] and [[List of applications#Cloud synchronization clients]].<br />
<br />
{{Tip|{{aur|cryptomator}} is an open-source, multi-platform program designed to add client-side transparent encryption on cloud-shared files.}}<br />
<br />
* {{App|Amazon S3|Amazon Simple Storage Service (Amazon S3), provides developers and IT teams with secure, durable, highly-scalable object storage. Amazon S3 is easy to use, with a simple web service interface to store and retrieve any amount of data from anywhere on the web. With Amazon S3, you pay only for the storage you actually use. There is no minimum fee and no setup cost.|http://aws.amazon.com/s3/|{{Pkg|s3cmd}} (high-level operations), {{Pkg|python-boto3}} (low-level API)}}<br />
<br />
* {{App|Backblaze B2|An object-storage service similar to Amazon S3.<br />
|https://www.backblaze.com/b2/cloud-storage-pricing.html|}}<br />
<br />
* {{App|[[CrashPlan]]|An online/offsite backup solution.<br />
** Unlimited online space for very reasonable pricing.<br />
** Automatic and incremental backups to multiple destinations.<br />
** Intuitive GUI.<br />
** Offers encryption and de-duplication.<br />
** Software is free for local use.<br />
** Restore prevents simultaneous backing up<br />
|http://www.crashplan.com/|{{AUR|crashplan}}}}<br />
<br />
* {{App|[[Dropbox]]|A popular file-sharing service.<br />
** A daemon monitors a specified directory, and uploads incremental changes to dropbox.com. <br />
** Changes automatically show up on your other computers. <br />
** Includes file sharing and a public directory. <br />
** You can recover deleted files. <br />
** Community written add-ons. <br />
** Free accounts have 2GB storage.<br />
|http://www.dropbox.com|{{AUR|dropbox}} {{AUR|nautilus-dropbox}}}}<br />
<br />
* {{App|[[Wikipedia:Google Drive|Google Drive]]|A file storage and synchronization service provided by Google.<br />
** Provides cloud storage, file sharing and collaborative editing.<br />
** Multiple clients are available.<br />
|https://drive.google.com|{{AUR|google-drive-ocamlfuse}} (free), {{AUR|drive}} (free), {{AUR|grive}} (free), {{AUR|gdrivefs}} (free), [[insync]] (non-free)}}, {{AUR|gdrive}} (free), {{AUR|drivesync-git}} (free)<br />
<br />
* {{App|[[Wikipedia:IDrive_Inc.|iDrive]]|Universal Online Backup.<br />
** Multiple Device Backup.<br />
** Online File Sync. <br />
** Real-Time Backup. <br />
** Backup and Access from Mobile Devices. <br />
** Remote Manage. <br />
** No GUI Front end for Linux, command line based. A wrapper script is available to make it easier to use.<br />
|https://www.idrive.com/|}}<br />
<br />
* {{App|[[Wikipedia:Jungle Disk|Jungle Disk]]|An online backup tool that stores its data in Amazon S3 or Rackspace Cloud Files.<br />
** A GNOME Files extension.<br />
** Only paid plans available.<br />
|http://www.jungledisk.com/|}}<br />
<br />
* {{App|[[Wikipedia:Mail.Ru|Mail.ru Cloud]]|Free cloud storage service created by Mail.ru.|https://cloud.mail.ru/|{{AUR|mailru-cloud}}}}<br />
<br />
* {{App|[[Wikipedia:Mega (website)|MEGA]]|Successor to the MegaUpload file-sharing service.<br />
** Free accounts are 50GB with paid plans available for more space.<br />
** Offers encryption and de-duplication.<br />
** Usually accessed through its web interface but other tools exist.<br />
|https://mega.co.nz|{{AUR|megatools}}, {{AUR|megasync}}, {{AUR|megafuse-git}}}}<br />
<br />
* {{App|Nutstore|A cloud service that lets you sync and share files anywhere.<br />
** Multiple file folders sync.<br />
** Service for Chinese users.<br />
|http://jianguoyun.com/|{{AUR|nutstore}}}}<br />
<br />
* {{App|OneDrive|Microsoft cloud service.<br />
|https://onedrive.com|{{AUR|onedrive-git}}}}<br />
<br />
* {{App|rsync.net|Cloud storage for offsite backups.<br />
** ZFS filesystem, accessible with any SSH/SFTP/SCP/rsync tool, running on a UNIX system with [http://www.rsync.net/resources/howto/remote_commands.html jailed shell access].<br />
** Simple rsync synchronization with daily automatic ZFS snapshots.<br />
** Native support for Attic and {{Pkg|borg}} clients: http://rsync.net/products/attic.html<br />
|http://www.rsync.net/|[[rsync]]/[[SSH]], {{Pkg|borg}}}}<br />
<br />
* {{App|[[Wikipedia:SpiderOak|SpiderOak]]|An online backup tool for Windows, Mac and Linux users to back up, share, sync, access and store their data.<br />
** Free account holds 2GB as a 60-day trial.<br />
** Includes file sharing and a public directory.<br />
** Incremental backup and sync are both supported.<br />
|https://spideroak.com/|{{AUR|spideroak-one}}}}<br />
<br />
* {{App|[[Wikipedia:Storage Made Easy|Storage Made Easy]]|Provides unified access to numerous cloud storage services, as well as its own storage.<br />
** Free and paid version available.<br />
** Free account holds 5GB and allows access to up to three other cloud storage providers.<br />
** Supports local directory via fuse, as well as web access.<br />
** Supports many cloud storage services, such as Box, Dropbox, Google Drive, Onedrive, and others.<br />
|http://storagemadeeasy.com/|}}<br />
<br />
* {{App|[[Wikipedia:Tarsnap|Tarsnap]]|A secure online backup service for Linux, BSD, macOS and Windows (through Cygwin).<br />
** Compressed encrypted backups to Amazon S3 Servers.<br />
** Automate via [[cron]].<br />
** Incremental backups.<br />
** Backup any files or directories.<br />
** Command line only client.<br />
** Pay only for usage (bandwidth and storage). <br />
|http://www.tarsnap.com|{{Pkg|tarsnap}}}}<br />
<br />
* {{App|[[Yandex Disk]]|Free cloud storage service created by Yandex.ru that gives you access to your photos, videos and documents from any internet-enabled device.|https://disk.yandex.ru/|{{AUR|yandex-disk}}}}<br />
<br />
==== Multi-service clients ====<br />
<br />
* {{App|[[Déjà Dup]]|A simple GTK+ backup program. It hides the complexity of doing backups the 'right way' (encrypted, off-site, and regular) and uses duplicity as the backend.<br />
** Automatic, timed backup configurable in GUI.<br />
** Restore wizard.<br />
** Integrated into the GNOME Files file manager.<br />
** Inherits several features of duplicity.<br />
|https://launchpad.net/deja-dup|{{Pkg|deja-dup}}}}<br />
<br />
* {{App|Duplicati|Backup client that securely stores encrypted, incremental, compressed backups on cloud storage services and remote file servers. It works with Amazon S3, Windows Live SkyDrive, Google Drive (Google Docs), Rackspace Cloud Files or WebDAV, SSH, FTP (and many more). Duplicati is open source and free.|http://www.duplicati.com/|{{AUR|duplicati-latest}}}}<br />
<br />
* {{App|[[Duplicity]]|A simple command-line utility which allows encrypted compressed incremental backup to nearly any storage.<br />
** Supports gpg encryption and signing.<br />
** Supports gzip compression.<br />
** Supports full or incremental backups, incremental backup stores only difference between new and old file.<br />
** Supports pushing over [http://duplicity.nongnu.org/duplicity.1.html#sect7 many protocols].<br />
|http://www.nongnu.org/duplicity/|{{Pkg|duplicity}}}}<br />
<br />
* {{App|[[Duply]]|Front-end for duplicity which simplifies running it by:<br />
** keeping recurring settings in profiles per backup job;<br />
** automated import/export of keys between profile and keyring;<br />
** enabling batch operations eg. backup_verify_purge;<br />
** executing pre/post scripts;<br />
** precondition checking for flawless duplicity operation.<br />
|http://www.duply.net/|{{AUR|duply}}}}<br />
<br />
* {{App|rclone|Rclone is a command line program to sync files and directories to and from Google Drive, Amazon S3, Openstack Swift / Rackspace cloud files / Memset Memstore, Dropbox, Google Cloud Storage and The local filesystem.|http://rclone.org/|{{Pkg|rclone}}}}<br />
<br />
* {{App|Syncany|Cloud storage and filesharing application with a focus on security and abstraction of storage.|https://www.syncany.org/|{{AUR|syncany}}}}<br />
<br />
=== Custom infrastructure ===<br />
<br />
See [[List of applications/Internet#Cloud storage servers]]<br />
<br />
== Version control systems ==<br />
<br />
{{Merge|List_of_applications#Work_environment|Also drop the extra bullets, the Wikipedia comparison table is much better than this.}}<br />
<br />
These are traditionally used for keeping track of software development; but if you want to have a simple way to manage your config files in one directory, it might be a good solution.<br />
<br />
See also [[Wikipedia:Comparison of revision control software]].<br />
<br />
* {{App|[[Bazaar]]|A distributed version control system that helps you track project history over time and to collaborate easily with others.<br />
** Similar commands to Subversion.<br />
** Supports working with or without a central server.<br />
** Support for working with some other revision control systems<br />
** Complete Unicode support.<br />
|https://bazaar.canonical.com/en/|{{Pkg|bzr}}}}<br />
<br />
* {{App|Darcs|A distributed revision control system that was designed to replace traditional, centralized source control systems such as CVS and Subversion.<br />
** Offline mode.<br />
** Easy branching and merging.<br />
** Written in Haskell.<br />
** Not very fast.<br />
|http://darcs.net/|{{Pkg|darcs}}}}<br />
<br />
* {{App|[[Git]]|A distributed revision control and source code management system with an emphasis on speed.<br />
** Very easy creation, merging, and deletion of branches.<br />
** Nearly all operations are performed locally, giving it a huge speed advantage on centralized systems.<br />
** Has a "staging area" or "index", this is an intermediate area where commits can be formatted and reviewed before completing the commit.<br />
** Does not handle binary files very well.<br />
|https://git-scm.com/|{{Pkg|git}}}}<br />
<br />
* {{App|[[Mercurial]]|A distributed version control system written in Python and similar in many ways to Git.<br />
** Platform independent.<br />
** Support for [http://mercurial.selenic.com/wiki/UsingExtensions extensions].<br />
** A set of commands consistent with Subversion.<br />
** Supports tags.<br />
|https://www.mercurial-scm.org/|{{Pkg|mercurial}}}}<br />
<br />
* {{App|[[Subversion]]|A full-featured centralized version control system originally designed to be a better CVS.<br />
** Renamed/copied/moved/removed files retain full revision history.<br />
** Native support for binary files, with space-efficient binary-diff storage.<br />
** Costs proportional to change size, not to data size.<br />
** Allows arbitrary metadata ("properties") to be attached to any file or directory. <br />
|https://subversion.apache.org/|{{Pkg|subversion}}}}<br />
<br />
== See also ==<br />
<br />
* [[Wikipedia:List of backup software]]<br />
* [[Wikipedia:Comparison of backup software]]<br />
* [https://github.com/restic/others Exhaustive list of backup solutions for Linux]<br />
* [http://www.halfgaar.net/backing-up-unix Backing up Linux and other Unix(-like) systems]<br />
* [http://www.askapache.com/security/mirror-using-rsync-ssh.html Mirroring an Entire Site using Rsync over SSH]<br />
* [http://www.si-journal.org/index.php/JSI/article/view/205 Performance comparison of five remote incremental backup tools: Rsync, Rdiff-backup, Duplicity, Areca and Link-Backup]<br />
* [http://blog.pointsoftware.ch/index.php/howto-local-and-remote-snapshot-backup-using-rsync-with-hard-links/ rsync-snapshot.sh] — Local and remote snapshot backup using rsync with hard links</div>Wzyboyhttps://wiki.archlinux.org/index.php?title=Synchronization_and_backup_programs&diff=514860Synchronization and backup programs2018-03-25T03:52:15Z<p>Wzyboy: /* Chunk-based increments */ BorgBackup has Windows support with Cygwin / WSL.</p>
<hr />
<div>[[Category:Data compression and archiving]]<br />
[[Category:System recovery]]<br />
[[de:Backups]]<br />
[[ja:バックアッププログラム]]<br />
[[ru:Backup programs]]<br />
{{Related articles start}}<br />
{{Related|System backup}}<br />
{{Related|Disk cloning}}<br />
{{Related|List of applications#File sharing}}<br />
{{Related|System maintenance#Backup}}<br />
{{Related|Dotfiles#Version control}}<br />
{{Related|File recovery}}<br />
{{Related articles end}}<br />
<br />
This page lists and compares applications that synchronize data between two or more locations, and those that build on top of such functionality to make incremental copies of important data for backup purposes. Because of their relationship, the two groups share several traits that justify describing them in the same article.<br />
<br />
== Backup overview ==<br />
<br />
Having backups of important data is a necessary measure to take, since human and machine processing errors are very likely to generate corruption as time passes, and also the physical media where the data is stored is inevitably destined to fail. In order to choose the best program for one's own needs, the following aspects should be considered:<br />
<br />
* The type of backup medium that is going to store the data, e.g. CD, DVD, remote server, external hard drive, etc.<br />
* The planned frequency of backups, e.g. daily, weekly, monthly, etc.<br />
* The features expected from the backup solution, e.g. compression, encryption, handles renames, etc.<br />
* The planned method to restore backups if needed.<br />
<br />
== Data synchronization ==<br />
<br />
These applications simply keep directories synchronized between multiple locations/machines, in a "mirror" fashion. Nonetheless, most of them still allow storing and reverting to old revisions of modified or deleted files.<br />
<br />
See also [[Wikipedia:Comparison of file synchronization software]].<br />
<br />
'''Legend:'''<br />
<br />
* '''Name''': the application name, linking to the ArchWiki article or the official website.<br />
* '''Installation''': a link to the package.<br />
* '''Implementation''': the programming language, library, or utility that the application is based on.<br />
* '''Delta transfer''': only the modified ''parts'' of files are transferred.<br />
* '''Encrypted transfer''': data is encrypted by default when transferred over the network.<br />
* '''FS metadata''': file system permissions and attributes are synchronized.<br />
* '''Resumable''': the synchronization can be resumed if interrupted.<br />
* '''Handles renames''': moved/renamed files are detected and not stored or transferred twice. It typically means that a checksum of files or its chunks is computed.<br />
* '''Version control''': the old version of files are backed up ('''reverse incremental backup''').<br />
* '''Change propagation''': specifies in how many directions changes can be propagated.<br />
** ''unidirectional'' means one-way synchronization of two locations,<br />
** ''bidirectional'' means two-way synchronization of two locations and<br />
** ''multidirectional'' means full synchronization of more than two locations.<br />
* '''Conflict resolution''': the application handles file conflicts, either automatically or interactively, i.e. it does not silently discard conflicting files. This attribute does not apply to applications that only propagate changes in one direction.<br />
* '''FS monitoring''': the application listens to file system events to trigger the synchronization.<br />
* '''CLI''': the application is command-line driven, i.e. it is scriptable.<br />
* '''Other interfaces''': the application has the specified user interfaces, e.g. GUI, TUI, or web-based.<br />
* '''License''': the license of the server and client applications.<br />
* '''Other platforms''': supported operating systems other than Linux.<br />
* '''Specificity''': brief notes about special features that notably set the application apart from the others.<br />
<br />
{| class="wikitable sortable"<br />
! Name<br />
! Installation<br />
! Implementation<br />
! Delta transfer<br />
! Encrypted transfer<br />
! FS metadata<br />
! Resumable<br />
! Handles renames<br />
! Version control<br />
! Change propagation<br />
! Conflict resolution<br />
! FS monitoring<br />
! CLI<br />
! Other interfaces<br />
! License<br />
! Other platforms<br />
! Maintained<br />
! Specificity<br />
|-<br />
| [[Resilio Sync]]<br />
| {{aur|rslsync}}<br />
| ? (closed source)<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| '''multi'''directional<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{G|Web}}<br />
| Proprietary freemium<br />
| FreeBSD, Windows, macOS, Android, iOS, Windows Phone, Amazon Kindle Fire<br />
| {{Yes}}<br />
| P2P sync<br />
|-<br />
| [https://www.freefilesync.org/ FreeFileSync]<br />
| {{AUR|freefilesync}}<br />
| C++<br />
| style="text-align:center;" | ?<br />
| {{G|SFTP [http://www.freefilesync.org/faq.php#features]}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{G|Yes [http://www.freefilesync.org/faq.php#features]}}<br />
| {{G|1=Yes [http://www.freefilesync.org/manual.php?topic=versioning]}}<br />
|'''uni'''directional / '''multi'''directional<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| GPL<br />
| Windows, macOS<br />
| {{Yes}}<br />
|<br />
|-<br />
| [https://git-annex.branchable.com/ git-annex]<br />
| {{Pkg|git-annex}}<br />
| Haskell, git<br />
| {{G|rsync [http://git-annex.branchable.com/transferring_data/]}}<br />
| {{G|rsync [http://git-annex.branchable.com/transferring_data/]}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| '''multi'''directional; with git remotes [http://git-annex.branchable.com/sync/]<br />
| {{G|renames conflicting files [http://git-annex.branchable.com/automatic_conflict_resolution/]}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{G|[http://git-annex.branchable.com/assistant/ git-annex assistant]}}<br />
| GPLv3<br />
| macOS, Android<br />
| {{Yes}}<br />
| Manage files with git<br />
|-<br />
| [http://www.netpower.fr/osync osync.sh]<br />
| {{AUR|osync}}<br />
| Bash, based on rsync<br />
| {{G|rsync}}<br />
| {{G|rsync}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| '''bi'''directional<br />
| {{G|keeps multiple versions of a file [http://www.netpower.fr/sites/default/files/soft/html-doc/osync_v1.2.html#toc-Subsubsection-1.3.1]}}<br />
| {{G|optional [https://github.com/deajan/osync#daemon-mode]}}<br />
| {{Yes}}<br />
| {{No}}<br />
| BSD<br />
| <br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://www.nongnu.org/rdiff-backup/ rdiff-backup]<br />
| {{Pkg|rdiff-backup}}<br />
| Python 2, librsync<br />
| {{G|rsync}}<br />
| {{G|rsync}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
|colspan="2"| '''uni'''directional<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| GPL<br />
| Win32<br />
| style="text-align:center;" | ?<br />
|<br />
|-<br />
| [[rsync]]<br />
| {{pkg|rsync}}<br />
| C<br />
| {{Yes}}<br />
| {{G|SSH or native protocol}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{G|<br />
* {{ic|--link-dest}} with hard links [http://www.ibm.com/developerworks/aix/library/au-spunix_rsync/index.html#backup]<br />
* {{ic|--backup}}<br />
}}<br />
|colspan="2"| '''uni'''directional<br />
| {{No}}<br />
| {{Yes}}<br />
| {{G|[[Rsync#Front-ends]]}}<br />
| GPLv3<br />
| Win32<br />
| {{Yes}}<br />
| Standard tool present on all Linux distributions.<br />
|-<br />
| [https://sparkleshare.org/ SparkleShare]<br />
| {{Pkg|sparkleshare}}<br />
| C#, git<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| GPLv3<br />
| Windows, macOS<br />
| {{Yes}}<br />
|<br />
|-<br />
| [[Syncthing]]<br />
| {{pkg|syncthing}}<br />
| Go<br />
| {{G|Yes [http://docs.syncthing.net/users/faq.html#is-synchronization-fast]}}<br />
| {{G|Yes [http://docs.syncthing.net/users/security.html]}}<br />
| {{Y|partial [http://docs.syncthing.net/users/faq.html#what-things-are-synced]}}<br />
| {{G|Yes }}<br />
| style="text-align:center;" | ?<br />
| {{G|Yes [http://docs.syncthing.net/users/versioning.html]}}, previous versions moved to archive folder<br />
| '''multi'''directional<br />
| {{G|renames one file [https://docs.syncthing.net/users/faq.html#what-if-there-is-a-conflict]}}<br />
| {{G|Yes}}<br />
| {{Yes}}<br />
| {{G|Web, GTK}}<br />
| MPL v2<br />
| BSD, Windows, macOS, Android, Kindle Paperwhite<br />
| {{Yes}}<br />
| P2P sync<br />
|-<br />
| [http://synkron.sourceforge.net/ Synkron]<br />
| {{AUR|synkron}}<br />
| C++<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| '''multi'''directional<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{G|Qt}}<br />
| GPLv2<br />
| Windows, macOS<br />
| {{R|[https://sourceforge.net/projects/synkron/ No]}}<br />
|<br />
|-<br />
| [[taskd]]<br />
| {{aur|taskd}}<br />
| C++, Python<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| '''multi'''directional<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| MIT<br />
| Android<br />
| {{Yes}}<br />
|<br />
|-<br />
| [[Unison]]<br />
| {{pkg|unison}}<br />
| OCaml<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Y|partial [http://www.cis.upenn.edu/~bcpierce/unison/download/releases/stable/unison-manual.html#perms]}}<br />
| {{G|optional [http://www.cis.upenn.edu/~bcpierce/unison/download/releases/stable/unison-manual.html#speeding]}}<br />
| {{No}}<br />
| {{G|Yes [http://www.cis.upenn.edu/~bcpierce/unison/download/releases/stable/unison-manual.html#backups]}}<br />
| '''bi'''directional<br />
| {{G|interactive}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{G|GTK2}}<br />
| GPL<br />
| FreeBSD, Windows, macOS, Android<br />
| {{G|Yes [http://www.cis.upenn.edu/~bcpierce/unison/status.html]}}<br />
|<br />
|}<br />
<br />
== Incremental backups ==<br />
<br />
Applications that can do incremental backups remember and take into account what data has been backed up during the last run (so-called "diffs") and eliminate the need to have duplicates of unchanged data. Restoring the data to a certain point in time would require locating the last full backup and all the incremental backups from then to the moment when it is supposed to be restored. This sort of backup is useful for those who do it very often.<br />
<br />
See also [[Dotfiles#Version control]].<br />
<br />
'''Legend:'''<br />
<br />
* '''Name''': the application name, linking to the official website.<br />
* '''Installation''': a link to the main ArchWiki article, if existing, or directly to the package pages.<br />
* '''Implementation''': the programming language, library, or utility that the application is based on.<br />
* '''Compressed storage''': compression is used for storage.<br />
* '''Encrypted storage''': encryption is used for storage.<br />
* '''Delta transfer''': only the modified ''parts'' of files are transferred.<br />
* '''Encrypted transfer''': data is encrypted by default when transferred over a network.<br />
* '''FS metadata''': file system permissions and attributes are backed up.<br />
* '''Easy access''': the backup is stored plainly in the file system, or is mountable as such.<br />
* '''Resumable''': the backup can be resumed without restarting it if interrupted.<br />
* '''Handles renames''': moved/renamed files are detected and not stored or transferred twice; it typically means that a checksum is computed for files or chunks thereof.<br />
* '''CLI''': the application is command-line driven, i.e. it is scriptable.<br />
* '''Other interfaces''': the application has the specified user interfaces, e.g. GUI, TUI, or web-based.<br />
* '''Licence''': the licence of the server and client applications.<br />
* '''Other platforms''': supported operating systems other than Linux.<br />
* '''Specificity''': brief notes about special features that notably set the application apart from the others.<br />
<br />
=== Single machine ===<br />
<br />
These applications are aimed at backing up data from the machine they are installed on, although the backup destination can be located on an external machine or storage media.<br />
<br />
==== Chunk-based increments ====<br />
<br />
If a file is modified, these applications store only its changed ''parts'' at the next snapshot. Compared to [[#File-based increments]] applications, these are more space-efficient, especially when large files receive small modifications; on the other hand, the archived snapshots have to be opened with the backup application that created them, since the files have to be reconstructed from the stored binary diffs.<br />
<br />
{| class="wikitable sortable"<br />
! Name<br />
! Installation<br />
! Implementation<br />
! Compressed storage<br />
! Encrypted storage<br />
! Delta transfer<br />
! Encrypted transfer<br />
! FS metadata<br />
! Easy access<br />
! Resumable<br />
! Handles renames<br />
! CLI<br />
! Other interfaces<br />
! Licence<br />
! Other platforms<br />
! Maintained<br />
! Specificity<br />
|-<br />
| [http://areca.sourceforge.net/ Areca Backup]<br />
| {{AUR|areca}}<br />
| Java<br />
| {{G|Zip, Zip64}}<br />
| {{G|AES128, AES256}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Y|Pausing only}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| GPLv2<br />
| Windows<br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://borgbackup.readthedocs.org/en/stable/ BorgBackup]<br />
| {{Pkg|borg}}<br />
| Python, C (Cython)<br />
| {{G|lz4, zlib, lzma, zstd}}<br />
| {{G|AES256}}<br />
| {{Yes}}<br />
| {{G|SSH}}<br />
| {{Yes}}[http://borgbackup.readthedocs.org/en/stable/faq.html#which-file-types-attributes-etc-are-preserved]<br />
| {{Yes}}[http://borgbackup.readthedocs.org/en/stable/usage.html#borg-mount]<br />
| {{Yes}}[http://borgbackup.readthedocs.org/en/stable/faq.html#if-a-backup-stops-mid-way-does-the-already-backed-up-data-stay-there]<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{G|third party}}<br />
| BSD<br />
| *BSD, macOS, Windows (Cygwin / WSL)[https://borgbackup.readthedocs.io/en/stable/#main-features]<br />
| {{Yes}}<br />
| Deduplication based on variable length chunks; support both local and SSH-based remote backup destination<br />
|-<br />
| [http://viric.name/cgi-bin/btar btar]<br />
| {{AUR|btar}}{{Broken package link|{{aur-mirror|btar}}}}<br />
| C<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv3<br />
| <br />
| {{Yes}}<br />
| Redundancy, indexed extraction, multicore compression, input and output serialisation, tolerance to partial archive errors. <br />
|-<br />
| [https://bup.github.io/ bup]<br />
| {{Pkg|bup}} {{AUR|bup-git}}<br />
| C, Python, git<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{G|Immature}}<br />
| {{Yes}}[https://bup.github.io/man/bup-fuse.html]<br />
| {{G|pick up where you left off [https://github.com/bup/bup/blob/master/README.md#reasons-bup-is-awesome]}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{G|third party}}<br />
| GPLv2<br />
| NetBSD, Windows, macOS<br />
| {{Yes}}<br />
| Same storage format as git<br />
|-<br />
| [https://github.com/emersion/bups bups]<br />
| {{AUR|bups}}<br />
| bup frontend<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{G|Immature}}<br />
| {{Yes}}<br />
| {{G|pick up where you left off [https://github.com/bup/bup/blob/master/README.md#reasons-bup-is-awesome]}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{G|GTK 3}}<br />
| MIT<br />
|<br />
| {{Yes}}<br />
|<br />
|-<br />
| [https://launchpad.net/deja-dup Déjà Dup]<br />
| [[Déjà Dup]]<br />
| duplicity front-end<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{G|GTK+}}<br />
| GPLv3<br />
| <br />
| {{Yes}}<br />
| Integrated into [[GNOME Files]].<br />
|-<br />
| [http://www.duplicati.com/ Duplicati]<br />
| {{AUR|duplicati-latest}}<br />
| C#<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{R|scheduled for 2.0 release}}<br />
| {{No}}<br />
| {{Y|Pausing only}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| LGPL<br />
| Windows<br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://www.nongnu.org/duplicity/ Duplicity]<br />
| [[Duplicity]]<br />
| librsync<br />
| {{G|gzip}}<br />
| {{G|gpg}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{G|Déjà Dup}}<br />
| GPL<br />
| <br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://www.duply.net/ Duply]<br />
| [[Duply]]<br />
| duplicity front-end<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv2<br />
| <br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://kde-apps.org/content/show.php/Kup+Backup+System?content=147465 Kup Backup System]<br />
| {{Pkg|kup}}<br />
| rsync, bup front-end<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{G|Immature}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Y|bup}}<br />
| {{G|Qt}}<br />
| GPLv2<br />
| <br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://liw.fi/obnam/ obnam]<br />
| {{AUR|obnam}}<br />
| Python<br />
| {{Yes}}<br />
| {{G|GnuPG}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{G|checkpoints every 100MB}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv3<br />
| <br />
| {{No}}<br />
| <br />
|-<br />
| [https://restic.github.io/ restic]<br />
| {{AUR|restic}} {{AUR|restic-git}}<br />
| Go<br />
| {{No}} [https://github.com/restic/restic/issues/21]<br />
| {{G|AES-256}} [https://github.com/restic/restic/blob/master/doc/Design.md]<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}[https://restic.readthedocs.io/en/stable/manual.html#mount-a-repository]<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| BSD<br />
| <br />
| {{Yes}}<br />
| <br />
|-<br />
| [http://zbackup.org/ ZBackup]<br />
| {{AUR|zbackup}}<br />
| C++<br />
| {{G|LZMA, LZO}}<br />
| {{G|AES}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{R|planned [https://github.com/zbackup/zbackup#improvements]}}<br />
| {{No}}<br />
| {{Y|Kinda through tar}}<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv2<br />
| <br />
| {{Yes}}<br />
| Repository consists of immutable files.<br />
|}<br />
<br />
==== File-based increments ====<br />
<br />
If a file is modified, these applications store its new version entirely at the next snapshot. Compared to [[#Chunk-based increments]] applications, these are less space-efficient, especially when large files receive small modifications; on the other hand, often the archived snapshots can be opened without the need to have the backup application installed.<br />
<br />
'''Specific legend:'''<br />
<br />
* '''Hard links''': whether unmodified files are stored as hard links to previous versions.<br />
<br />
{| class="wikitable sortable"<br />
! Name<br />
! Installation<br />
! Implementation<br />
! Compressed storage<br />
! Encrypted storage<br />
! Delta transfer<br />
! Encrypted transfer<br />
! FS metadata<br />
! Easy access<br />
! Resumable<br />
! Handles renames<br />
! Hard links<br />
! CLI<br />
! Other interfaces<br />
! Licence<br />
! Other platforms<br />
! Maintained<br />
! Specificity<br />
|-<br />
| [https://github.com/bit-team/backintime Back In Time]<br />
| [[Back In Time]]<br />
| Python, rsync, diff<br />
| {{No}}<br />
| {{No}}<br />
| {{G|rsync}}<br />
| {{G|rsync}}<br />
| {{G|rsync}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{No}}<br />
| {{G|Yes [http://backintime.le-web.org/documentation/]}}<br />
| {{Yes}}<br />
| {{G|Qt}}<br />
| GPLv2<br />
| <br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://dar.linux.free.fr/ DAR] (Disk ARchive)<br />
| {{AUR|dar}}<br />
| C++<br />
| {{G|special archive format}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{R|No [http://dar.linux.free.fr/doc/Features.html]}}<br />
| {{Yes}}<br />
| {{G|DarGUI}}<br />
| GPL<br />
| FreeBSD, NetBSD, Windows, macOS<br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://dargui.sourceforge.net/ DarGUI]<br />
| {{AUR|dargui}}<br />
| DAR front-end<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{R|No [http://dar.linux.free.fr/doc/Features.html]}}<br />
| {{No}}<br />
| {{G|GTK}}<br />
| GPL<br />
| Windows<br />
| style="text-align:center;" | ?<br />
|<br />
|-<br />
| [http://miek.nl/projects/hdup2/ hdup]{{Dead link|2016|07|11}}<br />
| {{Aur|hdup}}<br />
| C<br />
| {{G|bzip, gzip, lzop}}<br />
| {{G|gpg}}<br />
| style="text-align:center;" | ?<br />
| {{G|SSH}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{No}}<br />
| {{No}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv2<br />
|<br />
| {{No}}<br />
| Multiple backup targets.<br />
|-<br />
| [http://www.scottlu.com/Content/Link-Backup.html Link-Backup]<br />
| {{AUR|link-backup}}<br />
| Python<br />
| {{No}}<br />
| {{No}}<br />
| style="text-align:center;" | ?<br />
| {{G|SSH}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{R|No [http://www.scottlu.com/Content/Link-Backup.html]}}<br />
| {{Yes}}<br />
| {{No}}<br />
| MIT<br />
| <br />
| {{No}}<br />
| It copies itself to the server.<br />
|-<br />
| [https://github.com/miekg/rdup rdup]<br />
| {{AUR|rdup}}<br />
| C<br />
| {{G|tar.gz}}<br />
| {{G|gpg, blowfish and others}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv3<br />
| <br />
| {{No}}<br />
| Set of command-line tools.<br />
|-<br />
| [http://www.rsnapshot.org/ rsnapshot]<br />
| [[rsnapshot]]<br />
| rsync<br />
| {{No}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{G|Yes [http://rsnapshot.org/rsnapshot/docs/docbook/rest.html]}}<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv2<br />
| Win32<br />
| {{Yes}}<br />
| <br />
|-<br />
| [https://launchpad.net/sbackup sbackup]<br />
| {{AUR|sbackup}}<br />
| Python<br />
| {{G|gzip, bzip2}}<br />
| {{No}}<br />
| style="text-align:center;" | ?<br />
| {{G|SSH}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{No}}<br />
| {{No}}<br />
| {{No}}<br />
| {{No}}<br />
| {{G|GTK}}<br />
| GPLv3<br />
| <br />
| {{Yes}}<br />
|<br />
|-<br />
| [https://github.com/teejee2008/timeshift TimeShift]<br />
| {{AUR|timeshift}}<br />
| rsync<br />
| {{No}}<br />
| {{No}}<br />
| {{G|rsync}}<br />
| {{G|rsync}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{No}}<br />
| {{G|GTK}}<br />
| GPLv3<br />
| Designed for full-system backups to dedicated devices.<br />
| {{Yes}}<br />
|<br />
|}<br />
<br />
=== Network oriented ===<br />
<br />
These applications have been designed to centralize the backup of several machines connected to a network, through a server-client model. In general they are more complicated to deploy, compared to [[#Single machine]] solutions.<br />
<br />
'''Specific legend:'''<br />
<br />
* '''Control direction''': Pull: server logs into client. Push: client initiates backup session.<br />
* '''Increment type''': the strategy used to reduce used space by deduplicating data (i.e., besides compression).<br />
** '''file-based''': if a file is modified, the entire new version is stored at each snapshot.<br />
*** '''hard-links''': whether unmodified files are stored as hard links to previous versions.<br />
** '''chunk-based''': only the modified ''parts'' of files are stored at each snapshot.<br />
<br />
{| class="wikitable sortable"<br />
! Name<br />
! Installation<br />
! Implementation<br />
! Control direction<br />
! Compressed storage<br />
! Encrypted storage<br />
! Delta transfer<br />
! Encrypted transfer<br />
! FS metadata<br />
! Easy access<br />
! Resumable<br />
! Handles renames<br />
! Increment type<br />
! CLI<br />
! Other interfaces<br />
! Licence<br />
! Other platforms<br />
! Maintained<br />
! Specificity<br />
|-<br />
| [http://backuppc.sourceforge.net/index.html BackupPC]<br />
| [[BackupPC]]<br />
| Perl<br />
| Pull<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| file-based, hard links [http://backuppc.sourceforge.net/faq/BackupPC.html#Backup-basics]<br />
| {{No}}<br />
| {{G|Web}}<br />
| GPLv2<br />
| Any (no client needed)<br />
| {{Yes}}<br />
| Identical files across backups of the same or different clients are stored only once.<br />
|-<br />
| [http://www.bacula.org Bacula]<br />
| [https://aur.archlinux.org/packages/?K=bacula bacula*] in [[AUR]]<br />
| C++<br />
| Pull<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| file-based [http://burp.grke.org/why.html]<br />
| {{Yes}}<br />
| {{G|GUI, Web}}<br />
| AGPLv3<br />
| Windows, macOS<br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://burp.grke.org burp]<br />
| {{AUR|burp-backup}}<br />
| librsync<br />
| Push<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| chunk-based [http://burp.grke.org/why.html]<br />
| {{Yes}}<br />
| {{G|[https://git.ziirish.me/ziirish/burp-ui burp-ui]}}<br />
| AGPLv3<br />
| Windows<br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://safekeep.sourceforge.net/ SafeKeep]<br />
| {{AUR|safekeep}}<br />
| rdiff-backup<br />
| Pull<br />
| {{No}}<br />
| {{No}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| chunk-based [http://safekeep.sourceforge.net/safekeep.html]<br />
| {{Yes}}<br />
| {{Yes}}<br />
| GPL<br />
| <br />
| {{No}}<br />
| Integrates with [[LVM]] and databases to create consistent backups. Bandwidth throttling.<br />
|-<br />
| [http://www.snebu.com Snebu]<br />
| {{AUR|snebu}}{{Broken package link|{{aur-mirror|snebu}}}}<br />
| C<br />
| Push or Pull<br />
| {{Yes}}<br />
| {{No}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| file-based [http://www.snebu.com/#_concepts]<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv3<br />
| <br />
| style="text-align:center;" | ?<br />
| Supports arbitrary retention schedules.<br />
|-<br />
| [http://www.initzero.it/portal/soluzioni/software-open-source/synbak-universal-backup-system_2623.html Synbak]<br />
| {{Pkg|synbak}}<br />
| Multitool wrapper<br />
| ?<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| ?<br />
| {{No}}<br />
| {{G|Web}}<br />
| GPLv3<br />
| <br />
| {{Yes}}<br />
| Unifies several backup methods.<br />
|-<br />
| [https://www.urbackup.org UrBackup]<br />
| [https://aur.archlinux.org/packages/?K=urbackup urbackup*] in [[AUR]]<br />
| C++<br />
| Pull<br />
| {{No}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Y|Internet transfers only}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| file-based,hard-links and symlinks[http://blog.urbackup.org/156/symbolically-linking-directories-during-incremental-file-backups]/chunk-based CoW-Snapshots[http://blog.urbackup.org/83/file-backup-storage-with-btrfs-snapshots]<br />
| {{Yes}} (client)<br />
| {{G|GUI, Web}}<br />
| AGPLv3+<br />
| Windows, macOS<br />
| {{Yes}}<br />
| Identical files across backups of the same or different clients are stored only once. Integrates with LVM, dattobd and btrfs for file system snapshots.<br />
|}<br />
<br />
== Cloud storage ==<br />
<br />
=== Third-party services ===<br />
<br />
{{Merge|List of applications#File sharing|Remove the extra bullet points: the Wikipedia comparison table, and the respective webpages and Wikipedia articles do a better job at describing them.}}<br />
<br />
See also [[Wikipedia:Comparison of online backup services]] and [[List of applications#Cloud synchronization clients]].<br />
<br />
{{Tip|{{aur|cryptomator}} is an open-source, multi-platform program designed to add client-side transparent encryption on cloud-shared files.}}<br />
<br />
* {{App|Amazon S3|Amazon Simple Storage Service (Amazon S3), provides developers and IT teams with secure, durable, highly-scalable object storage. Amazon S3 is easy to use, with a simple web service interface to store and retrieve any amount of data from anywhere on the web. With Amazon S3, you pay only for the storage you actually use. There is no minimum fee and no setup cost.|http://aws.amazon.com/s3/|{{Pkg|s3cmd}} (high-level operations), {{Pkg|python-boto3}} (low-level API)}}<br />
<br />
* {{App|Backblaze B2|An object-storage service similar to Amazon S3.<br />
|https://www.backblaze.com/b2/cloud-storage-pricing.html|}}<br />
<br />
* {{App|[[CrashPlan]]|An online/offsite backup solution.<br />
** Unlimited online space for very reasonable pricing.<br />
** Automatic and incremental backups to multiple destinations.<br />
** Intuitive GUI.<br />
** Offers encryption and de-duplication.<br />
** Software is free for local use.<br />
** Restore prevents simultaneous backing up<br />
|http://www.crashplan.com/|{{AUR|crashplan}}}}<br />
<br />
* {{App|[[Dropbox]]|A popular file-sharing service.<br />
** A daemon monitors a specified directory, and uploads incremental changes to dropbox.com. <br />
** Changes automatically show up on your other computers. <br />
** Includes file sharing and a public directory. <br />
** You can recover deleted files. <br />
** Community written add-ons. <br />
** Free accounts have 2GB storage.<br />
|http://www.dropbox.com|{{AUR|dropbox}} {{AUR|nautilus-dropbox}}}}<br />
<br />
* {{App|[[Wikipedia:Google Drive|Google Drive]]|A file storage and synchronization service provided by Google.<br />
** Provides cloud storage, file sharing and collaborative editing.<br />
** Multiple clients are available.<br />
|https://drive.google.com|{{AUR|google-drive-ocamlfuse}} (free), {{AUR|drive}} (free), {{AUR|grive}} (free), {{AUR|gdrivefs}} (free), [[insync]] (non-free)}}, {{AUR|gdrive}} (free), {{AUR|drivesync-git}} (free)<br />
<br />
* {{App|[[Wikipedia:IDrive_Inc.|iDrive]]|Universal Online Backup.<br />
** Multiple Device Backup.<br />
** Online File Sync. <br />
** Real-Time Backup. <br />
** Backup and Access from Mobile Devices. <br />
** Remote Manage. <br />
** No GUI Front end for Linux, command line based. A wrapper script is available to make it easier to use.<br />
|https://www.idrive.com/|}}<br />
<br />
* {{App|[[Wikipedia:Jungle Disk|Jungle Disk]]|An online backup tool that stores its data in Amazon S3 or Rackspace Cloud Files.<br />
** A GNOME Files extension.<br />
** Only paid plans available.<br />
|http://www.jungledisk.com/|}}<br />
<br />
* {{App|[[Wikipedia:Mail.Ru|Mail.ru Cloud]]|Free cloud storage service created by Mail.ru.|https://cloud.mail.ru/|{{AUR|mailru-cloud}}}}<br />
<br />
* {{App|[[Wikipedia:Mega (website)|MEGA]]|Successor to the MegaUpload file-sharing service.<br />
** Free accounts are 50GB with paid plans available for more space.<br />
** Offers encryption and de-duplication.<br />
** Usually accessed through its web interface but other tools exist.<br />
|https://mega.co.nz|{{AUR|megatools}}, {{AUR|megasync}}, {{AUR|megafuse-git}}}}<br />
<br />
* {{App|Nutstore|A cloud service that lets you sync and share files anywhere.<br />
** Multiple file folders sync.<br />
** Service for Chinese users.<br />
|http://jianguoyun.com/|{{AUR|nutstore}}}}<br />
<br />
* {{App|OneDrive|Microsoft cloud service.<br />
|https://onedrive.com|{{AUR|onedrive-git}}}}<br />
<br />
* {{App|rsync.net|Cloud storage for offsite backups.<br />
** ZFS filesystem, accessible with any SSH/SFTP/SCP/rsync tool, running on a UNIX system with [http://www.rsync.net/resources/howto/remote_commands.html jailed shell access].<br />
** Simple rsync synchronization with daily automatic ZFS snapshots.<br />
** Native support for Attic and {{Pkg|borg}} clients: http://rsync.net/products/attic.html<br />
|http://www.rsync.net/|[[rsync]]/[[SSH]], {{Pkg|borg}}}}<br />
<br />
* {{App|[[Wikipedia:SpiderOak|SpiderOak]]|An online backup tool for Windows, Mac and Linux users to back up, share, sync, access and store their data.<br />
** Free account holds 2GB as a 60-day trial.<br />
** Includes file sharing and a public directory.<br />
** Incremental backup and sync are both supported.<br />
|https://spideroak.com/|{{AUR|spideroak-one}}}}<br />
<br />
* {{App|[[Wikipedia:Storage Made Easy|Storage Made Easy]]|Provides unified access to numerous cloud storage services, as well as its own storage.<br />
** Free and paid version available.<br />
** Free account holds 5GB and allows access to up to three other cloud storage providers.<br />
** Supports local directory via fuse, as well as web access.<br />
** Supports many cloud storage services, such as Box, Dropbox, Google Drive, Onedrive, and others.<br />
|http://storagemadeeasy.com/|}}<br />
<br />
* {{App|[[Wikipedia:Tarsnap|Tarsnap]]|A secure online backup service for Linux, BSD, macOS and Windows (through Cygwin).<br />
** Compressed encrypted backups to Amazon S3 Servers.<br />
** Automate via [[cron]].<br />
** Incremental backups.<br />
** Backup any files or directories.<br />
** Command line only client.<br />
** Pay only for usage (bandwidth and storage). <br />
|http://www.tarsnap.com|{{Pkg|tarsnap}}}}<br />
<br />
* {{App|[[Yandex Disk]]|Free cloud storage service created by Yandex.ru that gives you access to your photos, videos and documents from any internet-enabled device.|https://disk.yandex.ru/|{{AUR|yandex-disk}}}}<br />
<br />
==== Multi-service clients ====<br />
<br />
* {{App|[[Déjà Dup]]|A simple GTK+ backup program. It hides the complexity of doing backups the 'right way' (encrypted, off-site, and regular) and uses duplicity as the backend.<br />
** Automatic, timed backup configurable in GUI.<br />
** Restore wizard.<br />
** Integrated into the GNOME Files file manager.<br />
** Inherits several features of duplicity.<br />
|https://launchpad.net/deja-dup|{{Pkg|deja-dup}}}}<br />
<br />
* {{App|Duplicati|Backup client that securely stores encrypted, incremental, compressed backups on cloud storage services and remote file servers. It works with Amazon S3, Windows Live SkyDrive, Google Drive (Google Docs), Rackspace Cloud Files or WebDAV, SSH, FTP (and many more). Duplicati is open source and free.|http://www.duplicati.com/|{{AUR|duplicati-latest}}}}<br />
<br />
* {{App|[[Duplicity]]|A simple command-line utility which allows encrypted compressed incremental backup to nearly any storage.<br />
** Supports gpg encryption and signing.<br />
** Supports gzip compression.<br />
** Supports full or incremental backups, incremental backup stores only difference between new and old file.<br />
** Supports pushing over [http://duplicity.nongnu.org/duplicity.1.html#sect7 many protocols].<br />
|http://www.nongnu.org/duplicity/|{{Pkg|duplicity}}}}<br />
<br />
* {{App|[[Duply]]|Front-end for duplicity which simplifies running it by:<br />
** keeping recurring settings in profiles per backup job;<br />
** automated import/export of keys between profile and keyring;<br />
** enabling batch operations eg. backup_verify_purge;<br />
** executing pre/post scripts;<br />
** precondition checking for flawless duplicity operation.<br />
|http://www.duply.net/|{{AUR|duply}}}}<br />
<br />
* {{App|rclone|Rclone is a command line program to sync files and directories to and from Google Drive, Amazon S3, Openstack Swift / Rackspace cloud files / Memset Memstore, Dropbox, Google Cloud Storage and The local filesystem.|http://rclone.org/|{{Pkg|rclone}}}}<br />
<br />
* {{App|Syncany|Cloud storage and filesharing application with a focus on security and abstraction of storage.|https://www.syncany.org/|{{AUR|syncany}}}}<br />
<br />
=== Custom infrastructure ===<br />
<br />
See [[List of applications/Internet#Cloud storage servers]]<br />
<br />
== Version control systems ==<br />
<br />
{{Merge|List_of_applications#Work_environment|Also drop the extra bullets, the Wikipedia comparison table is much better than this.}}<br />
<br />
These are traditionally used for keeping track of software development; but if you want to have a simple way to manage your config files in one directory, it might be a good solution.<br />
<br />
See also [[Wikipedia:Comparison of revision control software]].<br />
<br />
* {{App|[[Bazaar]]|A distributed version control system that helps you track project history over time and to collaborate easily with others.<br />
** Similar commands to Subversion.<br />
** Supports working with or without a central server.<br />
** Support for working with some other revision control systems<br />
** Complete Unicode support.<br />
|https://bazaar.canonical.com/en/|{{Pkg|bzr}}}}<br />
<br />
* {{App|Darcs|A distributed revision control system that was designed to replace traditional, centralized source control systems such as CVS and Subversion.<br />
** Offline mode.<br />
** Easy branching and merging.<br />
** Written in Haskell.<br />
** Not very fast.<br />
|http://darcs.net/|{{Pkg|darcs}}}}<br />
<br />
* {{App|[[Git]]|A distributed revision control and source code management system with an emphasis on speed.<br />
** Very easy creation, merging, and deletion of branches.<br />
** Nearly all operations are performed locally, giving it a huge speed advantage on centralized systems.<br />
** Has a "staging area" or "index", this is an intermediate area where commits can be formatted and reviewed before completing the commit.<br />
** Does not handle binary files very well.<br />
|https://git-scm.com/|{{Pkg|git}}}}<br />
<br />
* {{App|[[Mercurial]]|A distributed version control system written in Python and similar in many ways to Git.<br />
** Platform independent.<br />
** Support for [http://mercurial.selenic.com/wiki/UsingExtensions extensions].<br />
** A set of commands consistent with Subversion.<br />
** Supports tags.<br />
|https://www.mercurial-scm.org/|{{Pkg|mercurial}}}}<br />
<br />
* {{App|[[Subversion]]|A full-featured centralized version control system originally designed to be a better CVS.<br />
** Renamed/copied/moved/removed files retain full revision history.<br />
** Native support for binary files, with space-efficient binary-diff storage.<br />
** Costs proportional to change size, not to data size.<br />
** Allows arbitrary metadata ("properties") to be attached to any file or directory. <br />
|https://subversion.apache.org/|{{Pkg|subversion}}}}<br />
<br />
== See also ==<br />
<br />
* [[Wikipedia:List of backup software]]<br />
* [[Wikipedia:Comparison of backup software]]<br />
* [https://github.com/restic/others Exhaustive list of backup solutions for Linux]<br />
* [http://www.halfgaar.net/backing-up-unix Backing up Linux and other Unix(-like) systems]<br />
* [http://www.askapache.com/security/mirror-using-rsync-ssh.html Mirroring an Entire Site using Rsync over SSH]<br />
* [http://www.si-journal.org/index.php/JSI/article/view/205 Performance comparison of five remote incremental backup tools: Rsync, Rdiff-backup, Duplicity, Areca and Link-Backup]<br />
* [http://blog.pointsoftware.ch/index.php/howto-local-and-remote-snapshot-backup-using-rsync-with-hard-links/ rsync-snapshot.sh] — Local and remote snapshot backup using rsync with hard links</div>Wzyboyhttps://wiki.archlinux.org/index.php?title=Synchronization_and_backup_programs&diff=514859Synchronization and backup programs2018-03-25T03:47:40Z<p>Wzyboy: /* Third-party services */ Backblaze B2 is an object-storage service similar to Amazon S3.</p>
<hr />
<div>[[Category:Data compression and archiving]]<br />
[[Category:System recovery]]<br />
[[de:Backups]]<br />
[[ja:バックアッププログラム]]<br />
[[ru:Backup programs]]<br />
{{Related articles start}}<br />
{{Related|System backup}}<br />
{{Related|Disk cloning}}<br />
{{Related|List of applications#File sharing}}<br />
{{Related|System maintenance#Backup}}<br />
{{Related|Dotfiles#Version control}}<br />
{{Related|File recovery}}<br />
{{Related articles end}}<br />
<br />
This page lists and compares applications that synchronize data between two or more locations, and those that build on top of such functionality to make incremental copies of important data for backup purposes. Because of their relationship, the two groups share several traits that justify describing them in the same article.<br />
<br />
== Backup overview ==<br />
<br />
Having backups of important data is a necessary measure to take, since human and machine processing errors are very likely to generate corruption as time passes, and also the physical media where the data is stored is inevitably destined to fail. In order to choose the best program for one's own needs, the following aspects should be considered:<br />
<br />
* The type of backup medium that is going to store the data, e.g. CD, DVD, remote server, external hard drive, etc.<br />
* The planned frequency of backups, e.g. daily, weekly, monthly, etc.<br />
* The features expected from the backup solution, e.g. compression, encryption, handles renames, etc.<br />
* The planned method to restore backups if needed.<br />
<br />
== Data synchronization ==<br />
<br />
These applications simply keep directories synchronized between multiple locations/machines, in a "mirror" fashion. Nonetheless, most of them still allow storing and reverting to old revisions of modified or deleted files.<br />
<br />
See also [[Wikipedia:Comparison of file synchronization software]].<br />
<br />
'''Legend:'''<br />
<br />
* '''Name''': the application name, linking to the ArchWiki article or the official website.<br />
* '''Installation''': a link to the package.<br />
* '''Implementation''': the programming language, library, or utility that the application is based on.<br />
* '''Delta transfer''': only the modified ''parts'' of files are transferred.<br />
* '''Encrypted transfer''': data is encrypted by default when transferred over the network.<br />
* '''FS metadata''': file system permissions and attributes are synchronized.<br />
* '''Resumable''': the synchronization can be resumed if interrupted.<br />
* '''Handles renames''': moved/renamed files are detected and not stored or transferred twice. It typically means that a checksum of files or its chunks is computed.<br />
* '''Version control''': the old version of files are backed up ('''reverse incremental backup''').<br />
* '''Change propagation''': specifies in how many directions changes can be propagated.<br />
** ''unidirectional'' means one-way synchronization of two locations,<br />
** ''bidirectional'' means two-way synchronization of two locations and<br />
** ''multidirectional'' means full synchronization of more than two locations.<br />
* '''Conflict resolution''': the application handles file conflicts, either automatically or interactively, i.e. it does not silently discard conflicting files. This attribute does not apply to applications that only propagate changes in one direction.<br />
* '''FS monitoring''': the application listens to file system events to trigger the synchronization.<br />
* '''CLI''': the application is command-line driven, i.e. it is scriptable.<br />
* '''Other interfaces''': the application has the specified user interfaces, e.g. GUI, TUI, or web-based.<br />
* '''License''': the license of the server and client applications.<br />
* '''Other platforms''': supported operating systems other than Linux.<br />
* '''Specificity''': brief notes about special features that notably set the application apart from the others.<br />
<br />
{| class="wikitable sortable"<br />
! Name<br />
! Installation<br />
! Implementation<br />
! Delta transfer<br />
! Encrypted transfer<br />
! FS metadata<br />
! Resumable<br />
! Handles renames<br />
! Version control<br />
! Change propagation<br />
! Conflict resolution<br />
! FS monitoring<br />
! CLI<br />
! Other interfaces<br />
! License<br />
! Other platforms<br />
! Maintained<br />
! Specificity<br />
|-<br />
| [[Resilio Sync]]<br />
| {{aur|rslsync}}<br />
| ? (closed source)<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| '''multi'''directional<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{G|Web}}<br />
| Proprietary freemium<br />
| FreeBSD, Windows, macOS, Android, iOS, Windows Phone, Amazon Kindle Fire<br />
| {{Yes}}<br />
| P2P sync<br />
|-<br />
| [https://www.freefilesync.org/ FreeFileSync]<br />
| {{AUR|freefilesync}}<br />
| C++<br />
| style="text-align:center;" | ?<br />
| {{G|SFTP [http://www.freefilesync.org/faq.php#features]}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{G|Yes [http://www.freefilesync.org/faq.php#features]}}<br />
| {{G|1=Yes [http://www.freefilesync.org/manual.php?topic=versioning]}}<br />
|'''uni'''directional / '''multi'''directional<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| GPL<br />
| Windows, macOS<br />
| {{Yes}}<br />
|<br />
|-<br />
| [https://git-annex.branchable.com/ git-annex]<br />
| {{Pkg|git-annex}}<br />
| Haskell, git<br />
| {{G|rsync [http://git-annex.branchable.com/transferring_data/]}}<br />
| {{G|rsync [http://git-annex.branchable.com/transferring_data/]}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| '''multi'''directional; with git remotes [http://git-annex.branchable.com/sync/]<br />
| {{G|renames conflicting files [http://git-annex.branchable.com/automatic_conflict_resolution/]}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{G|[http://git-annex.branchable.com/assistant/ git-annex assistant]}}<br />
| GPLv3<br />
| macOS, Android<br />
| {{Yes}}<br />
| Manage files with git<br />
|-<br />
| [http://www.netpower.fr/osync osync.sh]<br />
| {{AUR|osync}}<br />
| Bash, based on rsync<br />
| {{G|rsync}}<br />
| {{G|rsync}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| '''bi'''directional<br />
| {{G|keeps multiple versions of a file [http://www.netpower.fr/sites/default/files/soft/html-doc/osync_v1.2.html#toc-Subsubsection-1.3.1]}}<br />
| {{G|optional [https://github.com/deajan/osync#daemon-mode]}}<br />
| {{Yes}}<br />
| {{No}}<br />
| BSD<br />
| <br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://www.nongnu.org/rdiff-backup/ rdiff-backup]<br />
| {{Pkg|rdiff-backup}}<br />
| Python 2, librsync<br />
| {{G|rsync}}<br />
| {{G|rsync}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
|colspan="2"| '''uni'''directional<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| GPL<br />
| Win32<br />
| style="text-align:center;" | ?<br />
|<br />
|-<br />
| [[rsync]]<br />
| {{pkg|rsync}}<br />
| C<br />
| {{Yes}}<br />
| {{G|SSH or native protocol}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{G|<br />
* {{ic|--link-dest}} with hard links [http://www.ibm.com/developerworks/aix/library/au-spunix_rsync/index.html#backup]<br />
* {{ic|--backup}}<br />
}}<br />
|colspan="2"| '''uni'''directional<br />
| {{No}}<br />
| {{Yes}}<br />
| {{G|[[Rsync#Front-ends]]}}<br />
| GPLv3<br />
| Win32<br />
| {{Yes}}<br />
| Standard tool present on all Linux distributions.<br />
|-<br />
| [https://sparkleshare.org/ SparkleShare]<br />
| {{Pkg|sparkleshare}}<br />
| C#, git<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| GPLv3<br />
| Windows, macOS<br />
| {{Yes}}<br />
|<br />
|-<br />
| [[Syncthing]]<br />
| {{pkg|syncthing}}<br />
| Go<br />
| {{G|Yes [http://docs.syncthing.net/users/faq.html#is-synchronization-fast]}}<br />
| {{G|Yes [http://docs.syncthing.net/users/security.html]}}<br />
| {{Y|partial [http://docs.syncthing.net/users/faq.html#what-things-are-synced]}}<br />
| {{G|Yes }}<br />
| style="text-align:center;" | ?<br />
| {{G|Yes [http://docs.syncthing.net/users/versioning.html]}}, previous versions moved to archive folder<br />
| '''multi'''directional<br />
| {{G|renames one file [https://docs.syncthing.net/users/faq.html#what-if-there-is-a-conflict]}}<br />
| {{G|Yes}}<br />
| {{Yes}}<br />
| {{G|Web, GTK}}<br />
| MPL v2<br />
| BSD, Windows, macOS, Android, Kindle Paperwhite<br />
| {{Yes}}<br />
| P2P sync<br />
|-<br />
| [http://synkron.sourceforge.net/ Synkron]<br />
| {{AUR|synkron}}<br />
| C++<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| '''multi'''directional<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{G|Qt}}<br />
| GPLv2<br />
| Windows, macOS<br />
| {{R|[https://sourceforge.net/projects/synkron/ No]}}<br />
|<br />
|-<br />
| [[taskd]]<br />
| {{aur|taskd}}<br />
| C++, Python<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| '''multi'''directional<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| MIT<br />
| Android<br />
| {{Yes}}<br />
|<br />
|-<br />
| [[Unison]]<br />
| {{pkg|unison}}<br />
| OCaml<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Y|partial [http://www.cis.upenn.edu/~bcpierce/unison/download/releases/stable/unison-manual.html#perms]}}<br />
| {{G|optional [http://www.cis.upenn.edu/~bcpierce/unison/download/releases/stable/unison-manual.html#speeding]}}<br />
| {{No}}<br />
| {{G|Yes [http://www.cis.upenn.edu/~bcpierce/unison/download/releases/stable/unison-manual.html#backups]}}<br />
| '''bi'''directional<br />
| {{G|interactive}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{G|GTK2}}<br />
| GPL<br />
| FreeBSD, Windows, macOS, Android<br />
| {{G|Yes [http://www.cis.upenn.edu/~bcpierce/unison/status.html]}}<br />
|<br />
|}<br />
<br />
== Incremental backups ==<br />
<br />
Applications that can do incremental backups remember and take into account what data has been backed up during the last run (so-called "diffs") and eliminate the need to have duplicates of unchanged data. Restoring the data to a certain point in time would require locating the last full backup and all the incremental backups from then to the moment when it is supposed to be restored. This sort of backup is useful for those who do it very often.<br />
<br />
See also [[Dotfiles#Version control]].<br />
<br />
'''Legend:'''<br />
<br />
* '''Name''': the application name, linking to the official website.<br />
* '''Installation''': a link to the main ArchWiki article, if existing, or directly to the package pages.<br />
* '''Implementation''': the programming language, library, or utility that the application is based on.<br />
* '''Compressed storage''': compression is used for storage.<br />
* '''Encrypted storage''': encryption is used for storage.<br />
* '''Delta transfer''': only the modified ''parts'' of files are transferred.<br />
* '''Encrypted transfer''': data is encrypted by default when transferred over a network.<br />
* '''FS metadata''': file system permissions and attributes are backed up.<br />
* '''Easy access''': the backup is stored plainly in the file system, or is mountable as such.<br />
* '''Resumable''': the backup can be resumed without restarting it if interrupted.<br />
* '''Handles renames''': moved/renamed files are detected and not stored or transferred twice; it typically means that a checksum is computed for files or chunks thereof.<br />
* '''CLI''': the application is command-line driven, i.e. it is scriptable.<br />
* '''Other interfaces''': the application has the specified user interfaces, e.g. GUI, TUI, or web-based.<br />
* '''Licence''': the licence of the server and client applications.<br />
* '''Other platforms''': supported operating systems other than Linux.<br />
* '''Specificity''': brief notes about special features that notably set the application apart from the others.<br />
<br />
=== Single machine ===<br />
<br />
These applications are aimed at backing up data from the machine they are installed on, although the backup destination can be located on an external machine or storage media.<br />
<br />
==== Chunk-based increments ====<br />
<br />
If a file is modified, these applications store only its changed ''parts'' at the next snapshot. Compared to [[#File-based increments]] applications, these are more space-efficient, especially when large files receive small modifications; on the other hand, the archived snapshots have to be opened with the backup application that created them, since the files have to be reconstructed from the stored binary diffs.<br />
<br />
{| class="wikitable sortable"<br />
! Name<br />
! Installation<br />
! Implementation<br />
! Compressed storage<br />
! Encrypted storage<br />
! Delta transfer<br />
! Encrypted transfer<br />
! FS metadata<br />
! Easy access<br />
! Resumable<br />
! Handles renames<br />
! CLI<br />
! Other interfaces<br />
! Licence<br />
! Other platforms<br />
! Maintained<br />
! Specificity<br />
|-<br />
| [http://areca.sourceforge.net/ Areca Backup]<br />
| {{AUR|areca}}<br />
| Java<br />
| {{G|Zip, Zip64}}<br />
| {{G|AES128, AES256}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Y|Pausing only}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| GPLv2<br />
| Windows<br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://borgbackup.readthedocs.org/en/stable/ BorgBackup]<br />
| {{Pkg|borg}}<br />
| Python, C (Cython)<br />
| {{G|lz4, zlib, lzma, zstd}}<br />
| {{G|AES256}}<br />
| {{Yes}}<br />
| {{G|SSH}}<br />
| {{Yes}}[http://borgbackup.readthedocs.org/en/stable/faq.html#which-file-types-attributes-etc-are-preserved]<br />
| {{Yes}}[http://borgbackup.readthedocs.org/en/stable/usage.html#borg-mount]<br />
| {{Yes}}[http://borgbackup.readthedocs.org/en/stable/faq.html#if-a-backup-stops-mid-way-does-the-already-backed-up-data-stay-there]<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{G|third party}}<br />
| BSD<br />
| *BSD, macOS<br />
| {{Yes}}<br />
| Deduplication based on variable length chunks; support both local and SSH-based remote backup destination<br />
|-<br />
| [http://viric.name/cgi-bin/btar btar]<br />
| {{AUR|btar}}{{Broken package link|{{aur-mirror|btar}}}}<br />
| C<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv3<br />
| <br />
| {{Yes}}<br />
| Redundancy, indexed extraction, multicore compression, input and output serialisation, tolerance to partial archive errors. <br />
|-<br />
| [https://bup.github.io/ bup]<br />
| {{Pkg|bup}} {{AUR|bup-git}}<br />
| C, Python, git<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{G|Immature}}<br />
| {{Yes}}[https://bup.github.io/man/bup-fuse.html]<br />
| {{G|pick up where you left off [https://github.com/bup/bup/blob/master/README.md#reasons-bup-is-awesome]}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{G|third party}}<br />
| GPLv2<br />
| NetBSD, Windows, macOS<br />
| {{Yes}}<br />
| Same storage format as git<br />
|-<br />
| [https://github.com/emersion/bups bups]<br />
| {{AUR|bups}}<br />
| bup frontend<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{G|Immature}}<br />
| {{Yes}}<br />
| {{G|pick up where you left off [https://github.com/bup/bup/blob/master/README.md#reasons-bup-is-awesome]}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{G|GTK 3}}<br />
| MIT<br />
|<br />
| {{Yes}}<br />
|<br />
|-<br />
| [https://launchpad.net/deja-dup Déjà Dup]<br />
| [[Déjà Dup]]<br />
| duplicity front-end<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{G|GTK+}}<br />
| GPLv3<br />
| <br />
| {{Yes}}<br />
| Integrated into [[GNOME Files]].<br />
|-<br />
| [http://www.duplicati.com/ Duplicati]<br />
| {{AUR|duplicati-latest}}<br />
| C#<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{R|scheduled for 2.0 release}}<br />
| {{No}}<br />
| {{Y|Pausing only}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| LGPL<br />
| Windows<br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://www.nongnu.org/duplicity/ Duplicity]<br />
| [[Duplicity]]<br />
| librsync<br />
| {{G|gzip}}<br />
| {{G|gpg}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{G|Déjà Dup}}<br />
| GPL<br />
| <br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://www.duply.net/ Duply]<br />
| [[Duply]]<br />
| duplicity front-end<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv2<br />
| <br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://kde-apps.org/content/show.php/Kup+Backup+System?content=147465 Kup Backup System]<br />
| {{Pkg|kup}}<br />
| rsync, bup front-end<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{G|Immature}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Y|bup}}<br />
| {{G|Qt}}<br />
| GPLv2<br />
| <br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://liw.fi/obnam/ obnam]<br />
| {{AUR|obnam}}<br />
| Python<br />
| {{Yes}}<br />
| {{G|GnuPG}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{G|checkpoints every 100MB}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv3<br />
| <br />
| {{No}}<br />
| <br />
|-<br />
| [https://restic.github.io/ restic]<br />
| {{AUR|restic}} {{AUR|restic-git}}<br />
| Go<br />
| {{No}} [https://github.com/restic/restic/issues/21]<br />
| {{G|AES-256}} [https://github.com/restic/restic/blob/master/doc/Design.md]<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}[https://restic.readthedocs.io/en/stable/manual.html#mount-a-repository]<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| BSD<br />
| <br />
| {{Yes}}<br />
| <br />
|-<br />
| [http://zbackup.org/ ZBackup]<br />
| {{AUR|zbackup}}<br />
| C++<br />
| {{G|LZMA, LZO}}<br />
| {{G|AES}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{R|planned [https://github.com/zbackup/zbackup#improvements]}}<br />
| {{No}}<br />
| {{Y|Kinda through tar}}<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv2<br />
| <br />
| {{Yes}}<br />
| Repository consists of immutable files.<br />
|}<br />
<br />
==== File-based increments ====<br />
<br />
If a file is modified, these applications store its new version entirely at the next snapshot. Compared to [[#Chunk-based increments]] applications, these are less space-efficient, especially when large files receive small modifications; on the other hand, often the archived snapshots can be opened without the need to have the backup application installed.<br />
<br />
'''Specific legend:'''<br />
<br />
* '''Hard links''': whether unmodified files are stored as hard links to previous versions.<br />
<br />
{| class="wikitable sortable"<br />
! Name<br />
! Installation<br />
! Implementation<br />
! Compressed storage<br />
! Encrypted storage<br />
! Delta transfer<br />
! Encrypted transfer<br />
! FS metadata<br />
! Easy access<br />
! Resumable<br />
! Handles renames<br />
! Hard links<br />
! CLI<br />
! Other interfaces<br />
! Licence<br />
! Other platforms<br />
! Maintained<br />
! Specificity<br />
|-<br />
| [https://github.com/bit-team/backintime Back In Time]<br />
| [[Back In Time]]<br />
| Python, rsync, diff<br />
| {{No}}<br />
| {{No}}<br />
| {{G|rsync}}<br />
| {{G|rsync}}<br />
| {{G|rsync}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{No}}<br />
| {{G|Yes [http://backintime.le-web.org/documentation/]}}<br />
| {{Yes}}<br />
| {{G|Qt}}<br />
| GPLv2<br />
| <br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://dar.linux.free.fr/ DAR] (Disk ARchive)<br />
| {{AUR|dar}}<br />
| C++<br />
| {{G|special archive format}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{R|No [http://dar.linux.free.fr/doc/Features.html]}}<br />
| {{Yes}}<br />
| {{G|DarGUI}}<br />
| GPL<br />
| FreeBSD, NetBSD, Windows, macOS<br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://dargui.sourceforge.net/ DarGUI]<br />
| {{AUR|dargui}}<br />
| DAR front-end<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{R|No [http://dar.linux.free.fr/doc/Features.html]}}<br />
| {{No}}<br />
| {{G|GTK}}<br />
| GPL<br />
| Windows<br />
| style="text-align:center;" | ?<br />
|<br />
|-<br />
| [http://miek.nl/projects/hdup2/ hdup]{{Dead link|2016|07|11}}<br />
| {{Aur|hdup}}<br />
| C<br />
| {{G|bzip, gzip, lzop}}<br />
| {{G|gpg}}<br />
| style="text-align:center;" | ?<br />
| {{G|SSH}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{No}}<br />
| {{No}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv2<br />
|<br />
| {{No}}<br />
| Multiple backup targets.<br />
|-<br />
| [http://www.scottlu.com/Content/Link-Backup.html Link-Backup]<br />
| {{AUR|link-backup}}<br />
| Python<br />
| {{No}}<br />
| {{No}}<br />
| style="text-align:center;" | ?<br />
| {{G|SSH}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{R|No [http://www.scottlu.com/Content/Link-Backup.html]}}<br />
| {{Yes}}<br />
| {{No}}<br />
| MIT<br />
| <br />
| {{No}}<br />
| It copies itself to the server.<br />
|-<br />
| [https://github.com/miekg/rdup rdup]<br />
| {{AUR|rdup}}<br />
| C<br />
| {{G|tar.gz}}<br />
| {{G|gpg, blowfish and others}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv3<br />
| <br />
| {{No}}<br />
| Set of command-line tools.<br />
|-<br />
| [http://www.rsnapshot.org/ rsnapshot]<br />
| [[rsnapshot]]<br />
| rsync<br />
| {{No}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{G|Yes [http://rsnapshot.org/rsnapshot/docs/docbook/rest.html]}}<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv2<br />
| Win32<br />
| {{Yes}}<br />
| <br />
|-<br />
| [https://launchpad.net/sbackup sbackup]<br />
| {{AUR|sbackup}}<br />
| Python<br />
| {{G|gzip, bzip2}}<br />
| {{No}}<br />
| style="text-align:center;" | ?<br />
| {{G|SSH}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{No}}<br />
| {{No}}<br />
| {{No}}<br />
| {{No}}<br />
| {{G|GTK}}<br />
| GPLv3<br />
| <br />
| {{Yes}}<br />
|<br />
|-<br />
| [https://github.com/teejee2008/timeshift TimeShift]<br />
| {{AUR|timeshift}}<br />
| rsync<br />
| {{No}}<br />
| {{No}}<br />
| {{G|rsync}}<br />
| {{G|rsync}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{No}}<br />
| {{G|GTK}}<br />
| GPLv3<br />
| Designed for full-system backups to dedicated devices.<br />
| {{Yes}}<br />
|<br />
|}<br />
<br />
=== Network oriented ===<br />
<br />
These applications have been designed to centralize the backup of several machines connected to a network, through a server-client model. In general they are more complicated to deploy, compared to [[#Single machine]] solutions.<br />
<br />
'''Specific legend:'''<br />
<br />
* '''Control direction''': Pull: server logs into client. Push: client initiates backup session.<br />
* '''Increment type''': the strategy used to reduce used space by deduplicating data (i.e., besides compression).<br />
** '''file-based''': if a file is modified, the entire new version is stored at each snapshot.<br />
*** '''hard-links''': whether unmodified files are stored as hard links to previous versions.<br />
** '''chunk-based''': only the modified ''parts'' of files are stored at each snapshot.<br />
<br />
{| class="wikitable sortable"<br />
! Name<br />
! Installation<br />
! Implementation<br />
! Control direction<br />
! Compressed storage<br />
! Encrypted storage<br />
! Delta transfer<br />
! Encrypted transfer<br />
! FS metadata<br />
! Easy access<br />
! Resumable<br />
! Handles renames<br />
! Increment type<br />
! CLI<br />
! Other interfaces<br />
! Licence<br />
! Other platforms<br />
! Maintained<br />
! Specificity<br />
|-<br />
| [http://backuppc.sourceforge.net/index.html BackupPC]<br />
| [[BackupPC]]<br />
| Perl<br />
| Pull<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| file-based, hard links [http://backuppc.sourceforge.net/faq/BackupPC.html#Backup-basics]<br />
| {{No}}<br />
| {{G|Web}}<br />
| GPLv2<br />
| Any (no client needed)<br />
| {{Yes}}<br />
| Identical files across backups of the same or different clients are stored only once.<br />
|-<br />
| [http://www.bacula.org Bacula]<br />
| [https://aur.archlinux.org/packages/?K=bacula bacula*] in [[AUR]]<br />
| C++<br />
| Pull<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| file-based [http://burp.grke.org/why.html]<br />
| {{Yes}}<br />
| {{G|GUI, Web}}<br />
| AGPLv3<br />
| Windows, macOS<br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://burp.grke.org burp]<br />
| {{AUR|burp-backup}}<br />
| librsync<br />
| Push<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| chunk-based [http://burp.grke.org/why.html]<br />
| {{Yes}}<br />
| {{G|[https://git.ziirish.me/ziirish/burp-ui burp-ui]}}<br />
| AGPLv3<br />
| Windows<br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://safekeep.sourceforge.net/ SafeKeep]<br />
| {{AUR|safekeep}}<br />
| rdiff-backup<br />
| Pull<br />
| {{No}}<br />
| {{No}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| chunk-based [http://safekeep.sourceforge.net/safekeep.html]<br />
| {{Yes}}<br />
| {{Yes}}<br />
| GPL<br />
| <br />
| {{No}}<br />
| Integrates with [[LVM]] and databases to create consistent backups. Bandwidth throttling.<br />
|-<br />
| [http://www.snebu.com Snebu]<br />
| {{AUR|snebu}}{{Broken package link|{{aur-mirror|snebu}}}}<br />
| C<br />
| Push or Pull<br />
| {{Yes}}<br />
| {{No}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| file-based [http://www.snebu.com/#_concepts]<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv3<br />
| <br />
| style="text-align:center;" | ?<br />
| Supports arbitrary retention schedules.<br />
|-<br />
| [http://www.initzero.it/portal/soluzioni/software-open-source/synbak-universal-backup-system_2623.html Synbak]<br />
| {{Pkg|synbak}}<br />
| Multitool wrapper<br />
| ?<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| ?<br />
| {{No}}<br />
| {{G|Web}}<br />
| GPLv3<br />
| <br />
| {{Yes}}<br />
| Unifies several backup methods.<br />
|-<br />
| [https://www.urbackup.org UrBackup]<br />
| [https://aur.archlinux.org/packages/?K=urbackup urbackup*] in [[AUR]]<br />
| C++<br />
| Pull<br />
| {{No}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Y|Internet transfers only}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| file-based,hard-links and symlinks[http://blog.urbackup.org/156/symbolically-linking-directories-during-incremental-file-backups]/chunk-based CoW-Snapshots[http://blog.urbackup.org/83/file-backup-storage-with-btrfs-snapshots]<br />
| {{Yes}} (client)<br />
| {{G|GUI, Web}}<br />
| AGPLv3+<br />
| Windows, macOS<br />
| {{Yes}}<br />
| Identical files across backups of the same or different clients are stored only once. Integrates with LVM, dattobd and btrfs for file system snapshots.<br />
|}<br />
<br />
== Cloud storage ==<br />
<br />
=== Third-party services ===<br />
<br />
{{Merge|List of applications#File sharing|Remove the extra bullet points: the Wikipedia comparison table, and the respective webpages and Wikipedia articles do a better job at describing them.}}<br />
<br />
See also [[Wikipedia:Comparison of online backup services]] and [[List of applications#Cloud synchronization clients]].<br />
<br />
{{Tip|{{aur|cryptomator}} is an open-source, multi-platform program designed to add client-side transparent encryption on cloud-shared files.}}<br />
<br />
* {{App|Amazon S3|Amazon Simple Storage Service (Amazon S3), provides developers and IT teams with secure, durable, highly-scalable object storage. Amazon S3 is easy to use, with a simple web service interface to store and retrieve any amount of data from anywhere on the web. With Amazon S3, you pay only for the storage you actually use. There is no minimum fee and no setup cost.|http://aws.amazon.com/s3/|{{Pkg|s3cmd}} (high-level operations), {{Pkg|python-boto3}} (low-level API)}}<br />
<br />
* {{App|Backblaze B2|An object-storage service similar to Amazon S3.<br />
|https://www.backblaze.com/b2/cloud-storage-pricing.html|}}<br />
<br />
* {{App|[[CrashPlan]]|An online/offsite backup solution.<br />
** Unlimited online space for very reasonable pricing.<br />
** Automatic and incremental backups to multiple destinations.<br />
** Intuitive GUI.<br />
** Offers encryption and de-duplication.<br />
** Software is free for local use.<br />
** Restore prevents simultaneous backing up<br />
|http://www.crashplan.com/|{{AUR|crashplan}}}}<br />
<br />
* {{App|[[Dropbox]]|A popular file-sharing service.<br />
** A daemon monitors a specified directory, and uploads incremental changes to dropbox.com. <br />
** Changes automatically show up on your other computers. <br />
** Includes file sharing and a public directory. <br />
** You can recover deleted files. <br />
** Community written add-ons. <br />
** Free accounts have 2GB storage.<br />
|http://www.dropbox.com|{{AUR|dropbox}} {{AUR|nautilus-dropbox}}}}<br />
<br />
* {{App|[[Wikipedia:Google Drive|Google Drive]]|A file storage and synchronization service provided by Google.<br />
** Provides cloud storage, file sharing and collaborative editing.<br />
** Multiple clients are available.<br />
|https://drive.google.com|{{AUR|google-drive-ocamlfuse}} (free), {{AUR|drive}} (free), {{AUR|grive}} (free), {{AUR|gdrivefs}} (free), [[insync]] (non-free)}}, {{AUR|gdrive}} (free), {{AUR|drivesync-git}} (free)<br />
<br />
* {{App|[[Wikipedia:IDrive_Inc.|iDrive]]|Universal Online Backup.<br />
** Multiple Device Backup.<br />
** Online File Sync. <br />
** Real-Time Backup. <br />
** Backup and Access from Mobile Devices. <br />
** Remote Manage. <br />
** No GUI Front end for Linux, command line based. A wrapper script is available to make it easier to use.<br />
|https://www.idrive.com/|}}<br />
<br />
* {{App|[[Wikipedia:Jungle Disk|Jungle Disk]]|An online backup tool that stores its data in Amazon S3 or Rackspace Cloud Files.<br />
** A GNOME Files extension.<br />
** Only paid plans available.<br />
|http://www.jungledisk.com/|}}<br />
<br />
* {{App|[[Wikipedia:Mail.Ru|Mail.ru Cloud]]|Free cloud storage service created by Mail.ru.|https://cloud.mail.ru/|{{AUR|mailru-cloud}}}}<br />
<br />
* {{App|[[Wikipedia:Mega (website)|MEGA]]|Successor to the MegaUpload file-sharing service.<br />
** Free accounts are 50GB with paid plans available for more space.<br />
** Offers encryption and de-duplication.<br />
** Usually accessed through its web interface but other tools exist.<br />
|https://mega.co.nz|{{AUR|megatools}}, {{AUR|megasync}}, {{AUR|megafuse-git}}}}<br />
<br />
* {{App|Nutstore|A cloud service that lets you sync and share files anywhere.<br />
** Multiple file folders sync.<br />
** Service for Chinese users.<br />
|http://jianguoyun.com/|{{AUR|nutstore}}}}<br />
<br />
* {{App|OneDrive|Microsoft cloud service.<br />
|https://onedrive.com|{{AUR|onedrive-git}}}}<br />
<br />
* {{App|rsync.net|Cloud storage for offsite backups.<br />
** ZFS filesystem, accessible with any SSH/SFTP/SCP/rsync tool, running on a UNIX system with [http://www.rsync.net/resources/howto/remote_commands.html jailed shell access].<br />
** Simple rsync synchronization with daily automatic ZFS snapshots.<br />
** Native support for Attic and {{Pkg|borg}} clients: http://rsync.net/products/attic.html<br />
|http://www.rsync.net/|[[rsync]]/[[SSH]], {{Pkg|borg}}}}<br />
<br />
* {{App|[[Wikipedia:SpiderOak|SpiderOak]]|An online backup tool for Windows, Mac and Linux users to back up, share, sync, access and store their data.<br />
** Free account holds 2GB as a 60-day trial.<br />
** Includes file sharing and a public directory.<br />
** Incremental backup and sync are both supported.<br />
|https://spideroak.com/|{{AUR|spideroak-one}}}}<br />
<br />
* {{App|[[Wikipedia:Storage Made Easy|Storage Made Easy]]|Provides unified access to numerous cloud storage services, as well as its own storage.<br />
** Free and paid version available.<br />
** Free account holds 5GB and allows access to up to three other cloud storage providers.<br />
** Supports local directory via fuse, as well as web access.<br />
** Supports many cloud storage services, such as Box, Dropbox, Google Drive, Onedrive, and others.<br />
|http://storagemadeeasy.com/|}}<br />
<br />
* {{App|[[Wikipedia:Tarsnap|Tarsnap]]|A secure online backup service for Linux, BSD, macOS and Windows (through Cygwin).<br />
** Compressed encrypted backups to Amazon S3 Servers.<br />
** Automate via [[cron]].<br />
** Incremental backups.<br />
** Backup any files or directories.<br />
** Command line only client.<br />
** Pay only for usage (bandwidth and storage). <br />
|http://www.tarsnap.com|{{Pkg|tarsnap}}}}<br />
<br />
* {{App|[[Yandex Disk]]|Free cloud storage service created by Yandex.ru that gives you access to your photos, videos and documents from any internet-enabled device.|https://disk.yandex.ru/|{{AUR|yandex-disk}}}}<br />
<br />
==== Multi-service clients ====<br />
<br />
* {{App|[[Déjà Dup]]|A simple GTK+ backup program. It hides the complexity of doing backups the 'right way' (encrypted, off-site, and regular) and uses duplicity as the backend.<br />
** Automatic, timed backup configurable in GUI.<br />
** Restore wizard.<br />
** Integrated into the GNOME Files file manager.<br />
** Inherits several features of duplicity.<br />
|https://launchpad.net/deja-dup|{{Pkg|deja-dup}}}}<br />
<br />
* {{App|Duplicati|Backup client that securely stores encrypted, incremental, compressed backups on cloud storage services and remote file servers. It works with Amazon S3, Windows Live SkyDrive, Google Drive (Google Docs), Rackspace Cloud Files or WebDAV, SSH, FTP (and many more). Duplicati is open source and free.|http://www.duplicati.com/|{{AUR|duplicati-latest}}}}<br />
<br />
* {{App|[[Duplicity]]|A simple command-line utility which allows encrypted compressed incremental backup to nearly any storage.<br />
** Supports gpg encryption and signing.<br />
** Supports gzip compression.<br />
** Supports full or incremental backups, incremental backup stores only difference between new and old file.<br />
** Supports pushing over [http://duplicity.nongnu.org/duplicity.1.html#sect7 many protocols].<br />
|http://www.nongnu.org/duplicity/|{{Pkg|duplicity}}}}<br />
<br />
* {{App|[[Duply]]|Front-end for duplicity which simplifies running it by:<br />
** keeping recurring settings in profiles per backup job;<br />
** automated import/export of keys between profile and keyring;<br />
** enabling batch operations eg. backup_verify_purge;<br />
** executing pre/post scripts;<br />
** precondition checking for flawless duplicity operation.<br />
|http://www.duply.net/|{{AUR|duply}}}}<br />
<br />
* {{App|rclone|Rclone is a command line program to sync files and directories to and from Google Drive, Amazon S3, Openstack Swift / Rackspace cloud files / Memset Memstore, Dropbox, Google Cloud Storage and The local filesystem.|http://rclone.org/|{{Pkg|rclone}}}}<br />
<br />
* {{App|Syncany|Cloud storage and filesharing application with a focus on security and abstraction of storage.|https://www.syncany.org/|{{AUR|syncany}}}}<br />
<br />
=== Custom infrastructure ===<br />
<br />
See [[List of applications/Internet#Cloud storage servers]]<br />
<br />
== Version control systems ==<br />
<br />
{{Merge|List_of_applications#Work_environment|Also drop the extra bullets, the Wikipedia comparison table is much better than this.}}<br />
<br />
These are traditionally used for keeping track of software development; but if you want to have a simple way to manage your config files in one directory, it might be a good solution.<br />
<br />
See also [[Wikipedia:Comparison of revision control software]].<br />
<br />
* {{App|[[Bazaar]]|A distributed version control system that helps you track project history over time and to collaborate easily with others.<br />
** Similar commands to Subversion.<br />
** Supports working with or without a central server.<br />
** Support for working with some other revision control systems<br />
** Complete Unicode support.<br />
|https://bazaar.canonical.com/en/|{{Pkg|bzr}}}}<br />
<br />
* {{App|Darcs|A distributed revision control system that was designed to replace traditional, centralized source control systems such as CVS and Subversion.<br />
** Offline mode.<br />
** Easy branching and merging.<br />
** Written in Haskell.<br />
** Not very fast.<br />
|http://darcs.net/|{{Pkg|darcs}}}}<br />
<br />
* {{App|[[Git]]|A distributed revision control and source code management system with an emphasis on speed.<br />
** Very easy creation, merging, and deletion of branches.<br />
** Nearly all operations are performed locally, giving it a huge speed advantage on centralized systems.<br />
** Has a "staging area" or "index", this is an intermediate area where commits can be formatted and reviewed before completing the commit.<br />
** Does not handle binary files very well.<br />
|https://git-scm.com/|{{Pkg|git}}}}<br />
<br />
* {{App|[[Mercurial]]|A distributed version control system written in Python and similar in many ways to Git.<br />
** Platform independent.<br />
** Support for [http://mercurial.selenic.com/wiki/UsingExtensions extensions].<br />
** A set of commands consistent with Subversion.<br />
** Supports tags.<br />
|https://www.mercurial-scm.org/|{{Pkg|mercurial}}}}<br />
<br />
* {{App|[[Subversion]]|A full-featured centralized version control system originally designed to be a better CVS.<br />
** Renamed/copied/moved/removed files retain full revision history.<br />
** Native support for binary files, with space-efficient binary-diff storage.<br />
** Costs proportional to change size, not to data size.<br />
** Allows arbitrary metadata ("properties") to be attached to any file or directory. <br />
|https://subversion.apache.org/|{{Pkg|subversion}}}}<br />
<br />
== See also ==<br />
<br />
* [[Wikipedia:List of backup software]]<br />
* [[Wikipedia:Comparison of backup software]]<br />
* [https://github.com/restic/others Exhaustive list of backup solutions for Linux]<br />
* [http://www.halfgaar.net/backing-up-unix Backing up Linux and other Unix(-like) systems]<br />
* [http://www.askapache.com/security/mirror-using-rsync-ssh.html Mirroring an Entire Site using Rsync over SSH]<br />
* [http://www.si-journal.org/index.php/JSI/article/view/205 Performance comparison of five remote incremental backup tools: Rsync, Rdiff-backup, Duplicity, Areca and Link-Backup]<br />
* [http://blog.pointsoftware.ch/index.php/howto-local-and-remote-snapshot-backup-using-rsync-with-hard-links/ rsync-snapshot.sh] — Local and remote snapshot backup using rsync with hard links</div>Wzyboyhttps://wiki.archlinux.org/index.php?title=SnapRAID&diff=512896SnapRAID2018-03-06T18:50:45Z<p>Wzyboy: Improve styling</p>
<hr />
<div>[[Category:File systems]]<br />
[[ja:SnapRAID]]<br />
SnapRAID is a folder-based backup tool that behaves like a software or hardware RAID5/6 disk raid, but is not a disk raid itself. There is no realtime recovery, free space between disks cannot be combined and manual excution of backup is needed.<br />
<br />
Because of the nature of folder-based backup, SnapRAID is more flexible and simpler than software raids. Although disk raids have advantages such as realtime backup, increased complexity or reduced performance are the drawback. Not to mention a two-disk failure or a SATA URE (Unrecoverable Read Error) happening to RAID5 could damage all data, which is not the case with SnapRAID. Thus the use of SnapRAID is logical when backup is the main goal rather than preventing a system from going offline due to disk failure. <br />
<br />
SnapRAID works by storing parity of all folders to another disk. The destination disk which the parity file is stored on should be the largest. Other disks do not have this restriction and can be of any size. Summing up, SnapRAID is suitable for media centers where files are usually large and rarely changed. SnapRAID is highly flexible and can be configured to add/remove disk at any time. Also, more than one redundant disks are supported.<br />
<br />
{{Tip|<br />
* If you want to combine folders into a larger one without setting up disk raid, FUSE-based filesystems is the best option. (e.g. MHDDFS, MergerFS, unionfs-fuse ) Overlayfs is another interesting choice and has been merged into kernel since 3.18. Although it has less features and limitations such as having only one writable path and the need to specify a workdir. Other filesystems such as AUFS often involve kernel patching or unsupported or outdated software.<br />
* {{AUR|mergerfs}} is similar to mhddfs, but more recently updated and has more choices for drive-selection policies. It also has excellent speeds.<br />
}}<br />
<br />
== Installation ==<br />
<br />
Install {{AUR|snapraid}} from the [[AUR]].<br />
<br />
== Usage ==<br />
<br />
See also [http://snapraid.sourceforge.net/manual.html Manual for SnapRAID].<br />
<br />
We have four disks with data on them, and want to save a redundant just in case. These four disks are mounted at:<br />
<br />
* /mnt/sda<br />
* /mnt/sdb<br />
* /mnt/sdc<br />
* /mnt/sdd<br />
<br />
And an empty redundant disk mounted at:<br />
<br />
* /mnt/sde<br />
<br />
Let us create a configuration file! Lines begining with "content" designate the path to a content file that stores SnapRAID metadata.<br />
<br />
{{Warning|SnapRAID will need a content file to build a recovery. Multiple copies of this file are essential for maximum data safety. It would be wise to have this file on all disks and make backups elsewhere.}}<br />
<br />
{{hc|/etc/snapraid.conf|<br />
disk d1 /mnt/sda<br />
disk d2 /mnt/sdb<br />
disk d3 /mnt/sdc<br />
disk d4 /mnt/sdd/I_only_want_to_backup_this_folder<br />
parity /mnt/sde/SnapRAID.parity<br />
content /mnt/sda/SnapRAID.content<br />
content /mnt/sdb/SnapRAID.content<br />
content /mnt/sdc/SnapRAID.content<br />
content /var/snapraid/SnapRAID.content<br />
exclude /lost+found/<br />
}}<br />
<br />
{{Warning|The order of disks is relevant for parity.}}<br />
<br />
{{Tip|The exclude line means the path to exclude. It is relative to ''all'' mount point}}<br />
<br />
=== Backup ===<br />
<br />
To begin backup process, run:<br />
<br />
# snapraid sync<br />
<br />
=== Undeletion ===<br />
<br />
To revert a file or folder to an earlier version (undelete):<br />
<br />
# snapraid fix -f FILENAME<br />
( using compelete PATH of file or dir is better. file path is relative to all root dir )<br />
=== Disk recovery ===<br />
<br />
If the disk is mounted at {{ic|/mnt/sda}} is dead and being replaced, edit {{ic|/etc/snapraid.conf}} before doing a recovery. <br />
<br />
Change the line<br />
<br />
disk d1 /mnt/sda<br />
<br />
to<br />
<br />
disk d1 /mnt/sda_new<br />
<br />
To begin recovery<br />
<br />
# snapraid -d d1 -l recovery.log fix</div>Wzyboyhttps://wiki.archlinux.org/index.php?title=Synchronization_and_backup_programs&diff=512892Synchronization and backup programs2018-03-06T17:15:59Z<p>Wzyboy: /* Third-party services */ Fix a typo.</p>
<hr />
<div>[[Category:Data compression and archiving]]<br />
[[Category:System recovery]]<br />
[[de:Backups]]<br />
[[ja:バックアッププログラム]]<br />
[[ru:Backup programs]]<br />
{{Related articles start}}<br />
{{Related|System backup}}<br />
{{Related|Disk cloning}}<br />
{{Related|List of applications#File sharing}}<br />
{{Related|System maintenance#Backup}}<br />
{{Related|Dotfiles#Version control}}<br />
{{Related|File recovery}}<br />
{{Related articles end}}<br />
<br />
This page lists and compares applications that synchronize data between two or more locations, and those that build on top of such functionality to make incremental copies of important data for backup purposes. Because of their relationship, the two groups share several traits that justify describing them in the same article.<br />
<br />
== Backup overview ==<br />
<br />
Having backups of important data is a necessary measure to take, since human and machine processing errors are very likely to generate corruption as time passes, and also the physical media where the data is stored is inevitably destined to fail. In order to choose the best program for one's own needs, the following aspects should be considered:<br />
<br />
* The type of backup medium that is going to store the data, e.g. CD, DVD, remote server, external hard drive, etc.<br />
* The planned frequency of backups, e.g. daily, weekly, monthly, etc.<br />
* The features expected from the backup solution, e.g. compression, encryption, handles renames, etc.<br />
* The planned method to restore backups if needed.<br />
<br />
== Data synchronization ==<br />
<br />
These applications simply keep directories synchronized between multiple locations/machines, in a "mirror" fashion. Nonetheless, most of them still allow storing and reverting to old revisions of modified or deleted files.<br />
<br />
See also [[Wikipedia:Comparison of file synchronization software]].<br />
<br />
'''Legend:'''<br />
<br />
* '''Name''': the application name, linking to the ArchWiki article or the official website.<br />
* '''Installation''': a link to the package.<br />
* '''Implementation''': the programming language, library, or utility that the application is based on.<br />
* '''Delta transfer''': only the modified ''parts'' of files are transferred.<br />
* '''Encrypted transfer''': data is encrypted by default when transferred over the network.<br />
* '''FS metadata''': file system permissions and attributes are synchronized.<br />
* '''Resumable''': the synchronization can be resumed if interrupted.<br />
* '''Handles renames''': moved/renamed files are detected and not stored or transferred twice. It typically means that a checksum of files or its chunks is computed.<br />
* '''Version control''': the old version of files are backed up ('''reverse incremental backup''').<br />
* '''Change propagation''': specifies in how many directions changes can be propagated.<br />
** ''unidirectional'' means one-way synchronization of two locations,<br />
** ''bidirectional'' means two-way synchronization of two locations and<br />
** ''multidirectional'' means full synchronization of more than two locations.<br />
* '''Conflict resolution''': the application handles file conflicts, either automatically or interactively, i.e. it does not silently discard conflicting files. This attribute does not apply to applications that only propagate changes in one direction.<br />
* '''FS monitoring''': the application listens to file system events to trigger the synchronization.<br />
* '''CLI''': the application is command-line driven, i.e. it is scriptable.<br />
* '''Other interfaces''': the application has the specified user interfaces, e.g. GUI, TUI, or web-based.<br />
* '''License''': the license of the server and client applications.<br />
* '''Other platforms''': supported operating systems other than Linux.<br />
* '''Specificity''': brief notes about special features that notably set the application apart from the others.<br />
<br />
{| class="wikitable sortable"<br />
! Name<br />
! Installation<br />
! Implementation<br />
! Delta transfer<br />
! Encrypted transfer<br />
! FS metadata<br />
! Resumable<br />
! Handles renames<br />
! Version control<br />
! Change propagation<br />
! Conflict resolution<br />
! FS monitoring<br />
! CLI<br />
! Other interfaces<br />
! License<br />
! Other platforms<br />
! Maintained<br />
! Specificity<br />
|-<br />
| [[Resilio Sync]]<br />
| {{aur|rslsync}}<br />
| ? (closed source)<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| '''multi'''directional<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{G|Web}}<br />
| Proprietary freemium<br />
| FreeBSD, Windows, macOS, Android, iOS, Windows Phone, Amazon Kindle Fire<br />
| {{Yes}}<br />
| P2P sync<br />
|-<br />
| [https://www.freefilesync.org/ FreeFileSync]<br />
| {{AUR|freefilesync}}<br />
| C++<br />
| style="text-align:center;" | ?<br />
| {{G|SFTP [http://www.freefilesync.org/faq.php#features]}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{G|Yes [http://www.freefilesync.org/faq.php#features]}}<br />
| {{G|1=Yes [http://www.freefilesync.org/manual.php?topic=versioning]}}<br />
|'''uni'''directional / '''multi'''directional<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| GPL<br />
| Windows, macOS<br />
| {{Yes}}<br />
|<br />
|-<br />
| [https://git-annex.branchable.com/ git-annex]<br />
| {{Pkg|git-annex}}<br />
| Haskell, git<br />
| {{G|rsync [http://git-annex.branchable.com/transferring_data/]}}<br />
| {{G|rsync [http://git-annex.branchable.com/transferring_data/]}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| '''multi'''directional; with git remotes [http://git-annex.branchable.com/sync/]<br />
| {{G|renames conflicting files [http://git-annex.branchable.com/automatic_conflict_resolution/]}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{G|[http://git-annex.branchable.com/assistant/ git-annex assistant]}}<br />
| GPLv3<br />
| macOS, Android<br />
| {{Yes}}<br />
| Manage files with git<br />
|-<br />
| [http://www.netpower.fr/osync osync.sh]<br />
| {{AUR|osync}}<br />
| Bash, based on rsync<br />
| {{G|rsync}}<br />
| {{G|rsync}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| '''bi'''directional<br />
| {{G|keeps multiple versions of a file [http://www.netpower.fr/sites/default/files/soft/html-doc/osync_v1.2.html#toc-Subsubsection-1.3.1]}}<br />
| {{G|optional [https://github.com/deajan/osync#daemon-mode]}}<br />
| {{Yes}}<br />
| {{No}}<br />
| BSD<br />
| <br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://www.nongnu.org/rdiff-backup/ rdiff-backup]<br />
| {{Pkg|rdiff-backup}}<br />
| Python 2, librsync<br />
| {{G|rsync}}<br />
| {{G|rsync}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
|colspan="2"| '''uni'''directional<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| GPL<br />
| Win32<br />
| style="text-align:center;" | ?<br />
|<br />
|-<br />
| [[rsync]]<br />
| {{pkg|rsync}}<br />
| C<br />
| {{Yes}}<br />
| {{G|SSH or native protocol}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{G|<br />
* {{ic|--link-dest}} with hard links [http://www.ibm.com/developerworks/aix/library/au-spunix_rsync/index.html#backup]<br />
* {{ic|--backup}}<br />
}}<br />
|colspan="2"| '''uni'''directional<br />
| {{No}}<br />
| {{Yes}}<br />
| {{G|[[Rsync#Front-ends]]}}<br />
| GPLv3<br />
| Win32<br />
| {{Yes}}<br />
| Standard tool present on all Linux distributions.<br />
|-<br />
| [https://sparkleshare.org/ SparkleShare]<br />
| {{Pkg|sparkleshare}}<br />
| C#, git<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| GPLv3<br />
| Windows, macOS<br />
| {{Yes}}<br />
|<br />
|-<br />
| [[Syncthing]]<br />
| {{pkg|syncthing}}<br />
| Go<br />
| {{G|Yes [http://docs.syncthing.net/users/faq.html#is-synchronization-fast]}}<br />
| {{G|Yes [http://docs.syncthing.net/users/security.html]}}<br />
| {{Y|partial [http://docs.syncthing.net/users/faq.html#what-things-are-synced]}}<br />
| {{G|Yes }}<br />
| style="text-align:center;" | ?<br />
| {{G|Yes [http://docs.syncthing.net/users/versioning.html]}}, previous versions moved to archive folder<br />
| '''multi'''directional<br />
| {{G|renames one file [https://docs.syncthing.net/users/faq.html#what-if-there-is-a-conflict]}}<br />
| {{G|Yes}}<br />
| {{Yes}}<br />
| {{G|Web, GTK}}<br />
| MPL v2<br />
| BSD, Windows, macOS, Android, Kindle Paperwhite<br />
| {{Yes}}<br />
| P2P sync<br />
|-<br />
| [http://synkron.sourceforge.net/ Synkron]<br />
| {{AUR|synkron}}<br />
| C++<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| '''multi'''directional<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{G|Qt}}<br />
| GPLv2<br />
| Windows, macOS<br />
| {{R|[https://sourceforge.net/projects/synkron/ No]}}<br />
|<br />
|-<br />
| [[taskd]]<br />
| {{aur|taskd}}<br />
| C++, Python<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| '''multi'''directional<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| MIT<br />
| Android<br />
| {{Yes}}<br />
|<br />
|-<br />
| [[Unison]]<br />
| {{pkg|unison}}<br />
| OCaml<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Y|partial [http://www.cis.upenn.edu/~bcpierce/unison/download/releases/stable/unison-manual.html#perms]}}<br />
| {{G|optional [http://www.cis.upenn.edu/~bcpierce/unison/download/releases/stable/unison-manual.html#speeding]}}<br />
| {{No}}<br />
| {{G|Yes [http://www.cis.upenn.edu/~bcpierce/unison/download/releases/stable/unison-manual.html#backups]}}<br />
| '''bi'''directional<br />
| {{G|interactive}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{G|GTK2}}<br />
| GPL<br />
| FreeBSD, Windows, macOS, Android<br />
| {{G|Yes [http://www.cis.upenn.edu/~bcpierce/unison/status.html]}}<br />
|<br />
|}<br />
<br />
== Incremental backups ==<br />
<br />
Applications that can do incremental backups remember and take into account what data has been backed up during the last run (so-called "diffs") and eliminate the need to have duplicates of unchanged data. Restoring the data to a certain point in time would require locating the last full backup and all the incremental backups from then to the moment when it is supposed to be restored. This sort of backup is useful for those who do it very often.<br />
<br />
See also [[Dotfiles#Version control]].<br />
<br />
'''Legend:'''<br />
<br />
* '''Name''': the application name, linking to the official website.<br />
* '''Installation''': a link to the main ArchWiki article, if existing, or directly to the package pages.<br />
* '''Implementation''': the programming language, library, or utility that the application is based on.<br />
* '''Compressed storage''': compression is used for storage.<br />
* '''Encrypted storage''': encryption is used for storage.<br />
* '''Delta transfer''': only the modified ''parts'' of files are transferred.<br />
* '''Encrypted transfer''': data is encrypted by default when transferred over a network.<br />
* '''FS metadata''': file system permissions and attributes are backed up.<br />
* '''Easy access''': the backup is stored plainly in the file system, or is mountable as such.<br />
* '''Resumable''': the backup can be resumed without restarting it if interrupted.<br />
* '''Handles renames''': moved/renamed files are detected and not stored or transferred twice; it typically means that a checksum is computed for files or chunks thereof.<br />
* '''CLI''': the application is command-line driven, i.e. it is scriptable.<br />
* '''Other interfaces''': the application has the specified user interfaces, e.g. GUI, TUI, or web-based.<br />
* '''Licence''': the licence of the server and client applications.<br />
* '''Other platforms''': supported operating systems other than Linux.<br />
* '''Specificity''': brief notes about special features that notably set the application apart from the others.<br />
<br />
=== Single machine ===<br />
<br />
These applications are aimed at backing up data from the machine they are installed on, although the backup destination can be located on an external machine or storage media.<br />
<br />
==== Chunk-based increments ====<br />
<br />
If a file is modified, these applications store only its changed ''parts'' at the next snapshot. Compared to [[#File-based increments]] applications, these are more space-efficient, especially when large files receive small modifications; on the other hand, the archived snapshots have to be opened with the backup application that created them, since the files have to be reconstructed from the stored binary diffs.<br />
<br />
{| class="wikitable sortable"<br />
! Name<br />
! Installation<br />
! Implementation<br />
! Compressed storage<br />
! Encrypted storage<br />
! Delta transfer<br />
! Encrypted transfer<br />
! FS metadata<br />
! Easy access<br />
! Resumable<br />
! Handles renames<br />
! CLI<br />
! Other interfaces<br />
! Licence<br />
! Other platforms<br />
! Maintained<br />
! Specificity<br />
|-<br />
| [http://areca.sourceforge.net/ Areca Backup]<br />
| {{AUR|areca}}<br />
| Java<br />
| {{G|Zip, Zip64}}<br />
| {{G|AES128, AES256}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Y|Pausing only}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| GPLv2<br />
| Windows<br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://borgbackup.readthedocs.org/en/stable/ BorgBackup]<br />
| {{Pkg|borg}}<br />
| Python, C (Cython)<br />
| {{G|lz4, zlib, lzma, zstd}}<br />
| {{G|AES256}}<br />
| {{Yes}}<br />
| {{G|SSH}}<br />
| {{Yes}}[http://borgbackup.readthedocs.org/en/stable/faq.html#which-file-types-attributes-etc-are-preserved]<br />
| {{Yes}}[http://borgbackup.readthedocs.org/en/stable/usage.html#borg-mount]<br />
| {{Yes}}[http://borgbackup.readthedocs.org/en/stable/faq.html#if-a-backup-stops-mid-way-does-the-already-backed-up-data-stay-there]<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{G|third party}}<br />
| BSD<br />
| *BSD, macOS<br />
| {{Yes}} (Attic fork)<br />
| Deduplication based on variable length chunks; support both local and SSH-based remote backup destination<br />
|-<br />
| [http://viric.name/cgi-bin/btar btar]<br />
| {{AUR|btar}}{{Broken package link|{{aur-mirror|btar}}}}<br />
| C<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv3<br />
| <br />
| {{Yes}}<br />
| Redundancy, indexed extraction, multicore compression, input and output serialisation, tolerance to partial archive errors. <br />
|-<br />
| [https://bup.github.io/ bup]<br />
| {{Pkg|bup}} {{AUR|bup-git}}<br />
| C, Python, git<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{G|Immature}}<br />
| {{Yes}}[https://bup.github.io/man/bup-fuse.html]<br />
| {{G|pick up where you left off [https://github.com/bup/bup/blob/master/README.md#reasons-bup-is-awesome]}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{G|third party}}<br />
| GPLv2<br />
| NetBSD, Windows, macOS<br />
| {{Yes}}<br />
| Same storage format as git<br />
|-<br />
| [https://github.com/emersion/bups bups]<br />
| {{AUR|bups}}<br />
| bup frontend<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{G|Immature}}<br />
| {{Yes}}<br />
| {{G|pick up where you left off [https://github.com/bup/bup/blob/master/README.md#reasons-bup-is-awesome]}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{G|GTK 3}}<br />
| MIT<br />
|<br />
| {{Yes}}<br />
|<br />
|-<br />
| [https://launchpad.net/deja-dup Déjà Dup]<br />
| [[Déjà Dup]]<br />
| duplicity front-end<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{G|GTK+}}<br />
| GPLv3<br />
| <br />
| {{Yes}}<br />
| Integrated into [[GNOME Files]].<br />
|-<br />
| [http://www.duplicati.com/ Duplicati]<br />
| {{AUR|duplicati-latest}}<br />
| C#<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{R|scheduled for 2.0 release}}<br />
| {{No}}<br />
| {{Y|Pausing only}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| LGPL<br />
| Windows<br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://www.nongnu.org/duplicity/ Duplicity]<br />
| [[Duplicity]]<br />
| librsync<br />
| {{G|gzip}}<br />
| {{G|gpg}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{G|Déjà Dup}}<br />
| GPL<br />
| <br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://www.duply.net/ Duply]<br />
| [[Duply]]<br />
| duplicity front-end<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv2<br />
| <br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://kde-apps.org/content/show.php/Kup+Backup+System?content=147465 Kup Backup System]<br />
| {{Pkg|kup}}<br />
| rsync, bup front-end<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{G|Immature}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Y|bup}}<br />
| {{G|Qt}}<br />
| GPLv2<br />
| <br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://liw.fi/obnam/ obnam]<br />
| {{AUR|obnam}}<br />
| Python<br />
| {{Yes}}<br />
| {{G|GnuPG}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{G|checkpoints every 100MB}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv3<br />
| <br />
| {{No}}<br />
| <br />
|-<br />
| [https://restic.github.io/ restic]<br />
| {{AUR|restic}} {{AUR|restic-git}}<br />
| Go<br />
| {{No}} [https://github.com/restic/restic/issues/21]<br />
| {{G|AES-256}} [https://github.com/restic/restic/blob/master/doc/Design.md]<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}[https://restic.readthedocs.io/en/stable/manual.html#mount-a-repository]<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| BSD<br />
| <br />
| {{Yes}}<br />
| <br />
|-<br />
| [http://zbackup.org/ ZBackup]<br />
| {{AUR|zbackup}}<br />
| C++<br />
| {{G|LZMA, LZO}}<br />
| {{G|AES}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{R|planned [https://github.com/zbackup/zbackup#improvements]}}<br />
| {{No}}<br />
| {{Y|Kinda through tar}}<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv2<br />
| <br />
| {{Yes}}<br />
| Repository consists of immutable files.<br />
|}<br />
<br />
==== File-based increments ====<br />
<br />
If a file is modified, these applications store its new version entirely at the next snapshot. Compared to [[#Chunk-based increments]] applications, these are less space-efficient, especially when large files receive small modifications; on the other hand, often the archived snapshots can be opened without the need to have the backup application installed.<br />
<br />
'''Specific legend:'''<br />
<br />
* '''Hard links''': whether unmodified files are stored as hard links to previous versions.<br />
<br />
{| class="wikitable sortable"<br />
! Name<br />
! Installation<br />
! Implementation<br />
! Compressed storage<br />
! Encrypted storage<br />
! Delta transfer<br />
! Encrypted transfer<br />
! FS metadata<br />
! Easy access<br />
! Resumable<br />
! Handles renames<br />
! Hard links<br />
! CLI<br />
! Other interfaces<br />
! Licence<br />
! Other platforms<br />
! Maintained<br />
! Specificity<br />
|-<br />
| [https://github.com/bit-team/backintime Back In Time]<br />
| [[Back In Time]]<br />
| Python, rsync, diff<br />
| {{No}}<br />
| {{No}}<br />
| {{G|rsync}}<br />
| {{G|rsync}}<br />
| {{G|rsync}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{No}}<br />
| {{G|Yes [http://backintime.le-web.org/documentation/]}}<br />
| {{Yes}}<br />
| {{G|Qt}}<br />
| GPLv2<br />
| <br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://dar.linux.free.fr/ DAR] (Disk ARchive)<br />
| {{AUR|dar}}<br />
| C++<br />
| {{G|special archive format}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{R|No [http://dar.linux.free.fr/doc/Features.html]}}<br />
| {{Yes}}<br />
| {{G|DarGUI}}<br />
| GPL<br />
| FreeBSD, NetBSD, Windows, macOS<br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://dargui.sourceforge.net/ DarGUI]<br />
| {{AUR|dargui}}<br />
| DAR front-end<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{R|No [http://dar.linux.free.fr/doc/Features.html]}}<br />
| {{No}}<br />
| {{G|GTK}}<br />
| GPL<br />
| Windows<br />
| style="text-align:center;" | ?<br />
|<br />
|-<br />
| [http://miek.nl/projects/hdup2/ hdup]{{Dead link|2016|07|11}}<br />
| {{Aur|hdup}}<br />
| C<br />
| {{G|bzip, gzip, lzop}}<br />
| {{G|gpg}}<br />
| style="text-align:center;" | ?<br />
| {{G|SSH}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{No}}<br />
| {{No}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv2<br />
|<br />
| {{No}}<br />
| Multiple backup targets.<br />
|-<br />
| [http://www.scottlu.com/Content/Link-Backup.html Link-Backup]<br />
| {{AUR|link-backup}}<br />
| Python<br />
| {{No}}<br />
| {{No}}<br />
| style="text-align:center;" | ?<br />
| {{G|SSH}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{R|No [http://www.scottlu.com/Content/Link-Backup.html]}}<br />
| {{Yes}}<br />
| {{No}}<br />
| MIT<br />
| <br />
| {{No}}<br />
| It copies itself to the server.<br />
|-<br />
| [https://github.com/miekg/rdup rdup]<br />
| {{AUR|rdup}}<br />
| C<br />
| {{G|tar.gz}}<br />
| {{G|gpg, blowfish and others}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv3<br />
| <br />
| {{No}}<br />
| Set of command-line tools.<br />
|-<br />
| [http://www.rsnapshot.org/ rsnapshot]<br />
| [[rsnapshot]]<br />
| rsync<br />
| {{No}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{G|Yes [http://rsnapshot.org/rsnapshot/docs/docbook/rest.html]}}<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv2<br />
| Win32<br />
| {{Yes}}<br />
| <br />
|-<br />
| [https://launchpad.net/sbackup sbackup]<br />
| {{AUR|sbackup}}<br />
| Python<br />
| {{G|gzip, bzip2}}<br />
| {{No}}<br />
| style="text-align:center;" | ?<br />
| {{G|SSH}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{No}}<br />
| {{No}}<br />
| {{No}}<br />
| {{No}}<br />
| {{G|GTK}}<br />
| GPLv3<br />
| <br />
| {{Yes}}<br />
|<br />
|-<br />
| [https://github.com/teejee2008/timeshift TimeShift]<br />
| {{AUR|timeshift}}<br />
| rsync<br />
| {{No}}<br />
| {{No}}<br />
| {{G|rsync}}<br />
| {{G|rsync}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{No}}<br />
| {{G|GTK}}<br />
| GPLv3<br />
| Designed for full-system backups to dedicated devices.<br />
| {{Yes}}<br />
|<br />
|}<br />
<br />
=== Network oriented ===<br />
<br />
These applications have been designed to centralize the backup of several machines connected to a network, through a server-client model. In general they are more complicated to deploy, compared to [[#Single machine]] solutions.<br />
<br />
'''Specific legend:'''<br />
<br />
* '''Control direction''': Pull: server logs into client. Push: client initiates backup session.<br />
* '''Increment type''': the strategy used to reduce used space by deduplicating data (i.e., besides compression).<br />
** '''file-based''': if a file is modified, the entire new version is stored at each snapshot.<br />
*** '''hard-links''': whether unmodified files are stored as hard links to previous versions.<br />
** '''chunk-based''': only the modified ''parts'' of files are stored at each snapshot.<br />
<br />
{| class="wikitable sortable"<br />
! Name<br />
! Installation<br />
! Implementation<br />
! Control direction<br />
! Compressed storage<br />
! Encrypted storage<br />
! Delta transfer<br />
! Encrypted transfer<br />
! FS metadata<br />
! Easy access<br />
! Resumable<br />
! Handles renames<br />
! Increment type<br />
! CLI<br />
! Other interfaces<br />
! Licence<br />
! Other platforms<br />
! Maintained<br />
! Specificity<br />
|-<br />
| [http://backuppc.sourceforge.net/index.html BackupPC]<br />
| [[BackupPC]]<br />
| Perl<br />
| Pull<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| file-based, hard links [http://backuppc.sourceforge.net/faq/BackupPC.html#Backup-basics]<br />
| {{No}}<br />
| {{G|Web}}<br />
| GPLv2<br />
| Any (no client needed)<br />
| {{Yes}}<br />
| Identical files across backups of the same or different clients are stored only once.<br />
|-<br />
| [http://www.bacula.org Bacula]<br />
| [https://aur.archlinux.org/packages/?K=bacula bacula*] in [[AUR]]<br />
| C++<br />
| Pull<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| file-based [http://burp.grke.org/why.html]<br />
| {{Yes}}<br />
| {{G|GUI, Web}}<br />
| AGPLv3<br />
| Windows, macOS<br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://burp.grke.org burp]<br />
| {{AUR|burp-backup}}<br />
| librsync<br />
| Push<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| chunk-based [http://burp.grke.org/why.html]<br />
| {{Yes}}<br />
| {{G|[https://git.ziirish.me/ziirish/burp-ui burp-ui]}}<br />
| AGPLv3<br />
| Windows<br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://safekeep.sourceforge.net/ SafeKeep]<br />
| {{AUR|safekeep}}<br />
| rdiff-backup<br />
| Pull<br />
| {{No}}<br />
| {{No}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| chunk-based [http://safekeep.sourceforge.net/safekeep.html]<br />
| {{Yes}}<br />
| {{Yes}}<br />
| GPL<br />
| <br />
| {{No}}<br />
| Integrates with [[LVM]] and databases to create consistent backups. Bandwidth throttling.<br />
|-<br />
| [http://www.snebu.com Snebu]<br />
| {{AUR|snebu}}{{Broken package link|{{aur-mirror|snebu}}}}<br />
| C<br />
| Push or Pull<br />
| {{Yes}}<br />
| {{No}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| file-based [http://www.snebu.com/#_concepts]<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv3<br />
| <br />
| style="text-align:center;" | ?<br />
| Supports arbitrary retention schedules.<br />
|-<br />
| [http://www.initzero.it/portal/soluzioni/software-open-source/synbak-universal-backup-system_2623.html Synbak]<br />
| {{Pkg|synbak}}<br />
| Multitool wrapper<br />
| ?<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| ?<br />
| {{No}}<br />
| {{G|Web}}<br />
| GPLv3<br />
| <br />
| {{Yes}}<br />
| Unifies several backup methods.<br />
|-<br />
| [https://www.urbackup.org UrBackup]<br />
| [https://aur.archlinux.org/packages/?K=urbackup urbackup*] in [[AUR]]<br />
| C++<br />
| Pull<br />
| {{No}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Y|Internet transfers only}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| file-based,hard-links and symlinks[http://blog.urbackup.org/156/symbolically-linking-directories-during-incremental-file-backups]/chunk-based CoW-Snapshots[http://blog.urbackup.org/83/file-backup-storage-with-btrfs-snapshots]<br />
| {{Yes}} (client)<br />
| {{G|GUI, Web}}<br />
| AGPLv3+<br />
| Windows, macOS<br />
| {{Yes}}<br />
| Identical files across backups of the same or different clients are stored only once. Integrates with LVM, dattobd and btrfs for file system snapshots.<br />
|}<br />
<br />
== Cloud storage ==<br />
<br />
=== Third-party services ===<br />
<br />
{{Merge|List of applications#File sharing|Remove the extra bullet points: the Wikipedia comparison table, and the respective webpages and Wikipedia articles do a better job at describing them.}}<br />
<br />
See also [[Wikipedia:Comparison of online backup services]] and [[List of applications#Cloud synchronization clients]].<br />
<br />
{{Tip|{{aur|cryptomator}} is an open-source, multi-platform program designed to add client-side transparent encryption on cloud-shared files.}}<br />
<br />
* {{App|Amazon S3|Amazon Simple Storage Service (Amazon S3), provides developers and IT teams with secure, durable, highly-scalable object storage. Amazon S3 is easy to use, with a simple web service interface to store and retrieve any amount of data from anywhere on the web. With Amazon S3, you pay only for the storage you actually use. There is no minimum fee and no setup cost.|http://aws.amazon.com/s3/|{{Pkg|s3cmd}} (high-level operations), {{Pkg|python-boto3}} (low-level API)}}<br />
<br />
* {{App|[[CrashPlan]]|An online/offsite backup solution.<br />
** Unlimited online space for very reasonable pricing.<br />
** Automatic and incremental backups to multiple destinations.<br />
** Intuitive GUI.<br />
** Offers encryption and de-duplication.<br />
** Software is free for local use.<br />
** Restore prevents simultaneous backing up<br />
|http://www.crashplan.com/|{{AUR|crashplan}}}}<br />
<br />
* {{App|[[Dropbox]]|A popular file-sharing service.<br />
** A daemon monitors a specified directory, and uploads incremental changes to dropbox.com. <br />
** Changes automatically show up on your other computers. <br />
** Includes file sharing and a public directory. <br />
** You can recover deleted files. <br />
** Community written add-ons. <br />
** Free accounts have 2GB storage.<br />
|http://www.dropbox.com|{{AUR|dropbox}} {{AUR|nautilus-dropbox}}}}<br />
<br />
* {{App|[[Wikipedia:Google Drive|Google Drive]]|A file storage and synchronization service provided by Google.<br />
** Provides cloud storage, file sharing and collaborative editing.<br />
** Multiple clients are available.<br />
|https://drive.google.com|{{AUR|google-drive-ocamlfuse}} (free), {{AUR|drive}} (free), {{AUR|grive}} (free), {{AUR|gdrivefs}} (free), [[insync]] (non-free)}}, {{AUR|gdrive}} (free), {{AUR|drivesync-git}} (free)<br />
<br />
* {{App|[[Wikipedia:IDrive_Inc.|iDrive]]|Universal Online Backup.<br />
** Multiple Device Backup.<br />
** Online File Sync. <br />
** Real-Time Backup. <br />
** Backup and Access from Mobile Devices. <br />
** Remote Manage. <br />
** No GUI Front end for Linux, command line based. A wrapper script is available to make it easier to use.<br />
|https://www.idrive.com/|}}<br />
<br />
* {{App|[[Wikipedia:Jungle Disk|Jungle Disk]]|An online backup tool that stores its data in Amazon S3 or Rackspace Cloud Files.<br />
** A GNOME Files extension.<br />
** Only paid plans available.<br />
|http://www.jungledisk.com/|}}<br />
<br />
* {{App|[[Wikipedia:Mega (website)|MEGA]]|Successor to the MegaUpload file-sharing service.<br />
** Free accounts are 50GB with paid plans available for more space.<br />
** Offers encryption and de-duplication.<br />
** Usually accessed through its web interface but other tools exist.<br />
|https://mega.co.nz|{{AUR|megatools}}, {{AUR|megasync}}, {{AUR|megafuse-git}}}}<br />
<br />
* {{App|Nutstore|A cloud service that lets you sync and share files anywhere.<br />
** Multiple file folders sync.<br />
** Service for Chinese users.<br />
|http://jianguoyun.com/|{{AUR|nutstore}}}}<br />
<br />
* {{App|OneDrive|Microsoft cloud service.<br />
|https://onedrive.com|{{AUR|onedrive-git}}}}<br />
<br />
* {{App|rsync.net|Cloud storage for offsite backups.<br />
** ZFS filesystem, accessible with any SSH/SFTP/SCP/rsync tool, running on a UNIX system with [http://www.rsync.net/resources/howto/remote_commands.html jailed shell access].<br />
** Simple rsync synchronization with daily automatic ZFS snapshots.<br />
** Native support for Attic and {{Pkg|borg}} clients: http://rsync.net/products/attic.html<br />
|http://www.rsync.net/|[[rsync]]/[[SSH]], {{Pkg|borg}}}}<br />
<br />
* {{App|[[Wikipedia:SpiderOak|SpiderOak]]|An online backup tool for Windows, Mac and Linux users to back up, share, sync, access and store their data.<br />
** Free account holds 2GB as a 60-day trial.<br />
** Includes file sharing and a public directory.<br />
** Incremental backup and sync are both supported.<br />
|https://spideroak.com/|{{AUR|spideroak-one}}}}<br />
<br />
* {{App|[[Wikipedia:Storage Made Easy|Storage Made Easy]]|Provides unified access to numerous cloud storage services, as well as its own storage.<br />
** Free and paid version available.<br />
** Free account holds 5GB and allows access to up to three other cloud storage providers.<br />
** Supports local directory via fuse, as well as web access.<br />
** Supports many cloud storage services, such as Box, Dropbox, Google Drive, Onedrive, and others.<br />
|http://storagemadeeasy.com/|}}<br />
<br />
* {{App|[[Wikipedia:Tarsnap|Tarsnap]]|A secure online backup service for Linux, BSD, macOS and Windows (through Cygwin).<br />
** Compressed encrypted backups to Amazon S3 Servers.<br />
** Automate via [[cron]].<br />
** Incremental backups.<br />
** Backup any files or directories.<br />
** Command line only client.<br />
** Pay only for usage (bandwidth and storage). <br />
|http://www.tarsnap.com|{{Pkg|tarsnap}}}}<br />
<br />
* {{App|[[Yandex Disk]]|Free cloud storage service created by Yandex.ru that gives you access to your photos, videos and documents from any internet-enabled device.|https://disk.yandex.ru/|{{AUR|yandex-disk}}}}<br />
<br />
==== Multi-service clients ====<br />
<br />
* {{App|[[Déjà Dup]]|A simple GTK+ backup program. It hides the complexity of doing backups the 'right way' (encrypted, off-site, and regular) and uses duplicity as the backend.<br />
** Automatic, timed backup configurable in GUI.<br />
** Restore wizard.<br />
** Integrated into the GNOME Files file manager.<br />
** Inherits several features of duplicity.<br />
|https://launchpad.net/deja-dup|{{Pkg|deja-dup}}}}<br />
<br />
* {{App|Duplicati|Backup client that securely stores encrypted, incremental, compressed backups on cloud storage services and remote file servers. It works with Amazon S3, Windows Live SkyDrive, Google Drive (Google Docs), Rackspace Cloud Files or WebDAV, SSH, FTP (and many more). Duplicati is open source and free.|http://www.duplicati.com/|{{AUR|duplicati-latest}}}}<br />
<br />
* {{App|[[Duplicity]]|A simple command-line utility which allows encrypted compressed incremental backup to nearly any storage.<br />
** Supports gpg encryption and signing.<br />
** Supports gzip compression.<br />
** Supports full or incremental backups, incremental backup stores only difference between new and old file.<br />
** Supports pushing over [http://duplicity.nongnu.org/duplicity.1.html#sect7 many protocols].<br />
|http://www.nongnu.org/duplicity/|{{Pkg|duplicity}}}}<br />
<br />
* {{App|[[Duply]]|Front-end for duplicity which simplifies running it by:<br />
** keeping recurring settings in profiles per backup job;<br />
** automated import/export of keys between profile and keyring;<br />
** enabling batch operations eg. backup_verify_purge;<br />
** executing pre/post scripts;<br />
** precondition checking for flawless duplicity operation.<br />
|http://www.duply.net/|{{AUR|duply}}}}<br />
<br />
* {{App|rclone|Rclone is a command line program to sync files and directories to and from Google Drive, Amazon S3, Openstack Swift / Rackspace cloud files / Memset Memstore, Dropbox, Google Cloud Storage and The local filesystem.|http://rclone.org/|{{Pkg|rclone}}}}<br />
<br />
* {{App|Syncany|Cloud storage and filesharing application with a focus on security and abstraction of storage.|https://www.syncany.org/|{{AUR|syncany}}}}<br />
<br />
=== Custom infrastructure ===<br />
<br />
See [[List of applications/Internet#Cloud storage servers]]<br />
<br />
== Version control systems ==<br />
<br />
{{Merge|List_of_applications#Work_environment|Also drop the extra bullets, the Wikipedia comparison table is much better than this.}}<br />
<br />
These are traditionally used for keeping track of software development; but if you want to have a simple way to manage your config files in one directory, it might be a good solution.<br />
<br />
See also [[Wikipedia:Comparison of revision control software]].<br />
<br />
* {{App|[[Bazaar]]|A distributed version control system that helps you track project history over time and to collaborate easily with others.<br />
** Similar commands to Subversion.<br />
** Supports working with or without a central server.<br />
** Support for working with some other revision control systems<br />
** Complete Unicode support.<br />
|https://bazaar.canonical.com/en/|{{Pkg|bzr}}}}<br />
<br />
* {{App|Darcs|A distributed revision control system that was designed to replace traditional, centralized source control systems such as CVS and Subversion.<br />
** Offline mode.<br />
** Easy branching and merging.<br />
** Written in Haskell.<br />
** Not very fast.<br />
|http://darcs.net/|{{Pkg|darcs}}}}<br />
<br />
* {{App|[[Git]]|A distributed revision control and source code management system with an emphasis on speed.<br />
** Very easy creation, merging, and deletion of branches.<br />
** Nearly all operations are performed locally, giving it a huge speed advantage on centralized systems.<br />
** Has a "staging area" or "index", this is an intermediate area where commits can be formatted and reviewed before completing the commit.<br />
** Does not handle binary files very well.<br />
|https://git-scm.com/|{{Pkg|git}}}}<br />
<br />
* {{App|[[Mercurial]]|A distributed version control system written in Python and similar in many ways to Git.<br />
** Platform independent.<br />
** Support for [http://mercurial.selenic.com/wiki/UsingExtensions extensions].<br />
** A set of commands consistent with Subversion.<br />
** Supports tags.<br />
|https://www.mercurial-scm.org/|{{Pkg|mercurial}}}}<br />
<br />
* {{App|[[Subversion]]|A full-featured centralized version control system originally designed to be a better CVS.<br />
** Renamed/copied/moved/removed files retain full revision history.<br />
** Native support for binary files, with space-efficient binary-diff storage.<br />
** Costs proportional to change size, not to data size.<br />
** Allows arbitrary metadata ("properties") to be attached to any file or directory. <br />
|https://subversion.apache.org/|{{Pkg|subversion}}}}<br />
<br />
== See also ==<br />
<br />
* [[Wikipedia:List of backup software]]<br />
* [[Wikipedia:Comparison of backup software]]<br />
* [https://github.com/restic/others Exhaustive list of backup solutions for Linux]<br />
* [http://www.halfgaar.net/backing-up-unix Backing up Linux and other Unix(-like) systems]<br />
* [http://www.askapache.com/security/mirror-using-rsync-ssh.html Mirroring an Entire Site using Rsync over SSH]<br />
* [http://www.si-journal.org/index.php/JSI/article/view/205 Performance comparison of five remote incremental backup tools: Rsync, Rdiff-backup, Duplicity, Areca and Link-Backup]<br />
* [http://blog.pointsoftware.ch/index.php/howto-local-and-remote-snapshot-backup-using-rsync-with-hard-links/ rsync-snapshot.sh] — Local and remote snapshot backup using rsync with hard links</div>Wzyboyhttps://wiki.archlinux.org/index.php?title=Synchronization_and_backup_programs&diff=512891Synchronization and backup programs2018-03-06T17:14:46Z<p>Wzyboy: /* Third-party services */ Someone thought a link to rsync.net is advertisement. No it's not. I was just to say it provides native support for FOSS BorgBackup... I'm re-phrase my wording this time.</p>
<hr />
<div>[[Category:Data compression and archiving]]<br />
[[Category:System recovery]]<br />
[[de:Backups]]<br />
[[ja:バックアッププログラム]]<br />
[[ru:Backup programs]]<br />
{{Related articles start}}<br />
{{Related|System backup}}<br />
{{Related|Disk cloning}}<br />
{{Related|List of applications#File sharing}}<br />
{{Related|System maintenance#Backup}}<br />
{{Related|Dotfiles#Version control}}<br />
{{Related|File recovery}}<br />
{{Related articles end}}<br />
<br />
This page lists and compares applications that synchronize data between two or more locations, and those that build on top of such functionality to make incremental copies of important data for backup purposes. Because of their relationship, the two groups share several traits that justify describing them in the same article.<br />
<br />
== Backup overview ==<br />
<br />
Having backups of important data is a necessary measure to take, since human and machine processing errors are very likely to generate corruption as time passes, and also the physical media where the data is stored is inevitably destined to fail. In order to choose the best program for one's own needs, the following aspects should be considered:<br />
<br />
* The type of backup medium that is going to store the data, e.g. CD, DVD, remote server, external hard drive, etc.<br />
* The planned frequency of backups, e.g. daily, weekly, monthly, etc.<br />
* The features expected from the backup solution, e.g. compression, encryption, handles renames, etc.<br />
* The planned method to restore backups if needed.<br />
<br />
== Data synchronization ==<br />
<br />
These applications simply keep directories synchronized between multiple locations/machines, in a "mirror" fashion. Nonetheless, most of them still allow storing and reverting to old revisions of modified or deleted files.<br />
<br />
See also [[Wikipedia:Comparison of file synchronization software]].<br />
<br />
'''Legend:'''<br />
<br />
* '''Name''': the application name, linking to the ArchWiki article or the official website.<br />
* '''Installation''': a link to the package.<br />
* '''Implementation''': the programming language, library, or utility that the application is based on.<br />
* '''Delta transfer''': only the modified ''parts'' of files are transferred.<br />
* '''Encrypted transfer''': data is encrypted by default when transferred over the network.<br />
* '''FS metadata''': file system permissions and attributes are synchronized.<br />
* '''Resumable''': the synchronization can be resumed if interrupted.<br />
* '''Handles renames''': moved/renamed files are detected and not stored or transferred twice. It typically means that a checksum of files or its chunks is computed.<br />
* '''Version control''': the old version of files are backed up ('''reverse incremental backup''').<br />
* '''Change propagation''': specifies in how many directions changes can be propagated.<br />
** ''unidirectional'' means one-way synchronization of two locations,<br />
** ''bidirectional'' means two-way synchronization of two locations and<br />
** ''multidirectional'' means full synchronization of more than two locations.<br />
* '''Conflict resolution''': the application handles file conflicts, either automatically or interactively, i.e. it does not silently discard conflicting files. This attribute does not apply to applications that only propagate changes in one direction.<br />
* '''FS monitoring''': the application listens to file system events to trigger the synchronization.<br />
* '''CLI''': the application is command-line driven, i.e. it is scriptable.<br />
* '''Other interfaces''': the application has the specified user interfaces, e.g. GUI, TUI, or web-based.<br />
* '''License''': the license of the server and client applications.<br />
* '''Other platforms''': supported operating systems other than Linux.<br />
* '''Specificity''': brief notes about special features that notably set the application apart from the others.<br />
<br />
{| class="wikitable sortable"<br />
! Name<br />
! Installation<br />
! Implementation<br />
! Delta transfer<br />
! Encrypted transfer<br />
! FS metadata<br />
! Resumable<br />
! Handles renames<br />
! Version control<br />
! Change propagation<br />
! Conflict resolution<br />
! FS monitoring<br />
! CLI<br />
! Other interfaces<br />
! License<br />
! Other platforms<br />
! Maintained<br />
! Specificity<br />
|-<br />
| [[Resilio Sync]]<br />
| {{aur|rslsync}}<br />
| ? (closed source)<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| '''multi'''directional<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{G|Web}}<br />
| Proprietary freemium<br />
| FreeBSD, Windows, macOS, Android, iOS, Windows Phone, Amazon Kindle Fire<br />
| {{Yes}}<br />
| P2P sync<br />
|-<br />
| [https://www.freefilesync.org/ FreeFileSync]<br />
| {{AUR|freefilesync}}<br />
| C++<br />
| style="text-align:center;" | ?<br />
| {{G|SFTP [http://www.freefilesync.org/faq.php#features]}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{G|Yes [http://www.freefilesync.org/faq.php#features]}}<br />
| {{G|1=Yes [http://www.freefilesync.org/manual.php?topic=versioning]}}<br />
|'''uni'''directional / '''multi'''directional<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| GPL<br />
| Windows, macOS<br />
| {{Yes}}<br />
|<br />
|-<br />
| [https://git-annex.branchable.com/ git-annex]<br />
| {{Pkg|git-annex}}<br />
| Haskell, git<br />
| {{G|rsync [http://git-annex.branchable.com/transferring_data/]}}<br />
| {{G|rsync [http://git-annex.branchable.com/transferring_data/]}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| '''multi'''directional; with git remotes [http://git-annex.branchable.com/sync/]<br />
| {{G|renames conflicting files [http://git-annex.branchable.com/automatic_conflict_resolution/]}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{G|[http://git-annex.branchable.com/assistant/ git-annex assistant]}}<br />
| GPLv3<br />
| macOS, Android<br />
| {{Yes}}<br />
| Manage files with git<br />
|-<br />
| [http://www.netpower.fr/osync osync.sh]<br />
| {{AUR|osync}}<br />
| Bash, based on rsync<br />
| {{G|rsync}}<br />
| {{G|rsync}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| '''bi'''directional<br />
| {{G|keeps multiple versions of a file [http://www.netpower.fr/sites/default/files/soft/html-doc/osync_v1.2.html#toc-Subsubsection-1.3.1]}}<br />
| {{G|optional [https://github.com/deajan/osync#daemon-mode]}}<br />
| {{Yes}}<br />
| {{No}}<br />
| BSD<br />
| <br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://www.nongnu.org/rdiff-backup/ rdiff-backup]<br />
| {{Pkg|rdiff-backup}}<br />
| Python 2, librsync<br />
| {{G|rsync}}<br />
| {{G|rsync}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
|colspan="2"| '''uni'''directional<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| GPL<br />
| Win32<br />
| style="text-align:center;" | ?<br />
|<br />
|-<br />
| [[rsync]]<br />
| {{pkg|rsync}}<br />
| C<br />
| {{Yes}}<br />
| {{G|SSH or native protocol}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{G|<br />
* {{ic|--link-dest}} with hard links [http://www.ibm.com/developerworks/aix/library/au-spunix_rsync/index.html#backup]<br />
* {{ic|--backup}}<br />
}}<br />
|colspan="2"| '''uni'''directional<br />
| {{No}}<br />
| {{Yes}}<br />
| {{G|[[Rsync#Front-ends]]}}<br />
| GPLv3<br />
| Win32<br />
| {{Yes}}<br />
| Standard tool present on all Linux distributions.<br />
|-<br />
| [https://sparkleshare.org/ SparkleShare]<br />
| {{Pkg|sparkleshare}}<br />
| C#, git<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| GPLv3<br />
| Windows, macOS<br />
| {{Yes}}<br />
|<br />
|-<br />
| [[Syncthing]]<br />
| {{pkg|syncthing}}<br />
| Go<br />
| {{G|Yes [http://docs.syncthing.net/users/faq.html#is-synchronization-fast]}}<br />
| {{G|Yes [http://docs.syncthing.net/users/security.html]}}<br />
| {{Y|partial [http://docs.syncthing.net/users/faq.html#what-things-are-synced]}}<br />
| {{G|Yes }}<br />
| style="text-align:center;" | ?<br />
| {{G|Yes [http://docs.syncthing.net/users/versioning.html]}}, previous versions moved to archive folder<br />
| '''multi'''directional<br />
| {{G|renames one file [https://docs.syncthing.net/users/faq.html#what-if-there-is-a-conflict]}}<br />
| {{G|Yes}}<br />
| {{Yes}}<br />
| {{G|Web, GTK}}<br />
| MPL v2<br />
| BSD, Windows, macOS, Android, Kindle Paperwhite<br />
| {{Yes}}<br />
| P2P sync<br />
|-<br />
| [http://synkron.sourceforge.net/ Synkron]<br />
| {{AUR|synkron}}<br />
| C++<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| '''multi'''directional<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{G|Qt}}<br />
| GPLv2<br />
| Windows, macOS<br />
| {{R|[https://sourceforge.net/projects/synkron/ No]}}<br />
|<br />
|-<br />
| [[taskd]]<br />
| {{aur|taskd}}<br />
| C++, Python<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| '''multi'''directional<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| MIT<br />
| Android<br />
| {{Yes}}<br />
|<br />
|-<br />
| [[Unison]]<br />
| {{pkg|unison}}<br />
| OCaml<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Y|partial [http://www.cis.upenn.edu/~bcpierce/unison/download/releases/stable/unison-manual.html#perms]}}<br />
| {{G|optional [http://www.cis.upenn.edu/~bcpierce/unison/download/releases/stable/unison-manual.html#speeding]}}<br />
| {{No}}<br />
| {{G|Yes [http://www.cis.upenn.edu/~bcpierce/unison/download/releases/stable/unison-manual.html#backups]}}<br />
| '''bi'''directional<br />
| {{G|interactive}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{G|GTK2}}<br />
| GPL<br />
| FreeBSD, Windows, macOS, Android<br />
| {{G|Yes [http://www.cis.upenn.edu/~bcpierce/unison/status.html]}}<br />
|<br />
|}<br />
<br />
== Incremental backups ==<br />
<br />
Applications that can do incremental backups remember and take into account what data has been backed up during the last run (so-called "diffs") and eliminate the need to have duplicates of unchanged data. Restoring the data to a certain point in time would require locating the last full backup and all the incremental backups from then to the moment when it is supposed to be restored. This sort of backup is useful for those who do it very often.<br />
<br />
See also [[Dotfiles#Version control]].<br />
<br />
'''Legend:'''<br />
<br />
* '''Name''': the application name, linking to the official website.<br />
* '''Installation''': a link to the main ArchWiki article, if existing, or directly to the package pages.<br />
* '''Implementation''': the programming language, library, or utility that the application is based on.<br />
* '''Compressed storage''': compression is used for storage.<br />
* '''Encrypted storage''': encryption is used for storage.<br />
* '''Delta transfer''': only the modified ''parts'' of files are transferred.<br />
* '''Encrypted transfer''': data is encrypted by default when transferred over a network.<br />
* '''FS metadata''': file system permissions and attributes are backed up.<br />
* '''Easy access''': the backup is stored plainly in the file system, or is mountable as such.<br />
* '''Resumable''': the backup can be resumed without restarting it if interrupted.<br />
* '''Handles renames''': moved/renamed files are detected and not stored or transferred twice; it typically means that a checksum is computed for files or chunks thereof.<br />
* '''CLI''': the application is command-line driven, i.e. it is scriptable.<br />
* '''Other interfaces''': the application has the specified user interfaces, e.g. GUI, TUI, or web-based.<br />
* '''Licence''': the licence of the server and client applications.<br />
* '''Other platforms''': supported operating systems other than Linux.<br />
* '''Specificity''': brief notes about special features that notably set the application apart from the others.<br />
<br />
=== Single machine ===<br />
<br />
These applications are aimed at backing up data from the machine they are installed on, although the backup destination can be located on an external machine or storage media.<br />
<br />
==== Chunk-based increments ====<br />
<br />
If a file is modified, these applications store only its changed ''parts'' at the next snapshot. Compared to [[#File-based increments]] applications, these are more space-efficient, especially when large files receive small modifications; on the other hand, the archived snapshots have to be opened with the backup application that created them, since the files have to be reconstructed from the stored binary diffs.<br />
<br />
{| class="wikitable sortable"<br />
! Name<br />
! Installation<br />
! Implementation<br />
! Compressed storage<br />
! Encrypted storage<br />
! Delta transfer<br />
! Encrypted transfer<br />
! FS metadata<br />
! Easy access<br />
! Resumable<br />
! Handles renames<br />
! CLI<br />
! Other interfaces<br />
! Licence<br />
! Other platforms<br />
! Maintained<br />
! Specificity<br />
|-<br />
| [http://areca.sourceforge.net/ Areca Backup]<br />
| {{AUR|areca}}<br />
| Java<br />
| {{G|Zip, Zip64}}<br />
| {{G|AES128, AES256}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Y|Pausing only}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| GPLv2<br />
| Windows<br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://borgbackup.readthedocs.org/en/stable/ BorgBackup]<br />
| {{Pkg|borg}}<br />
| Python, C (Cython)<br />
| {{G|lz4, zlib, lzma, zstd}}<br />
| {{G|AES256}}<br />
| {{Yes}}<br />
| {{G|SSH}}<br />
| {{Yes}}[http://borgbackup.readthedocs.org/en/stable/faq.html#which-file-types-attributes-etc-are-preserved]<br />
| {{Yes}}[http://borgbackup.readthedocs.org/en/stable/usage.html#borg-mount]<br />
| {{Yes}}[http://borgbackup.readthedocs.org/en/stable/faq.html#if-a-backup-stops-mid-way-does-the-already-backed-up-data-stay-there]<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{G|third party}}<br />
| BSD<br />
| *BSD, macOS<br />
| {{Yes}} (Attic fork)<br />
| Deduplication based on variable length chunks; support both local and SSH-based remote backup destination<br />
|-<br />
| [http://viric.name/cgi-bin/btar btar]<br />
| {{AUR|btar}}{{Broken package link|{{aur-mirror|btar}}}}<br />
| C<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv3<br />
| <br />
| {{Yes}}<br />
| Redundancy, indexed extraction, multicore compression, input and output serialisation, tolerance to partial archive errors. <br />
|-<br />
| [https://bup.github.io/ bup]<br />
| {{Pkg|bup}} {{AUR|bup-git}}<br />
| C, Python, git<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{G|Immature}}<br />
| {{Yes}}[https://bup.github.io/man/bup-fuse.html]<br />
| {{G|pick up where you left off [https://github.com/bup/bup/blob/master/README.md#reasons-bup-is-awesome]}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{G|third party}}<br />
| GPLv2<br />
| NetBSD, Windows, macOS<br />
| {{Yes}}<br />
| Same storage format as git<br />
|-<br />
| [https://github.com/emersion/bups bups]<br />
| {{AUR|bups}}<br />
| bup frontend<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{G|Immature}}<br />
| {{Yes}}<br />
| {{G|pick up where you left off [https://github.com/bup/bup/blob/master/README.md#reasons-bup-is-awesome]}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{G|GTK 3}}<br />
| MIT<br />
|<br />
| {{Yes}}<br />
|<br />
|-<br />
| [https://launchpad.net/deja-dup Déjà Dup]<br />
| [[Déjà Dup]]<br />
| duplicity front-end<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{G|GTK+}}<br />
| GPLv3<br />
| <br />
| {{Yes}}<br />
| Integrated into [[GNOME Files]].<br />
|-<br />
| [http://www.duplicati.com/ Duplicati]<br />
| {{AUR|duplicati-latest}}<br />
| C#<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{R|scheduled for 2.0 release}}<br />
| {{No}}<br />
| {{Y|Pausing only}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| LGPL<br />
| Windows<br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://www.nongnu.org/duplicity/ Duplicity]<br />
| [[Duplicity]]<br />
| librsync<br />
| {{G|gzip}}<br />
| {{G|gpg}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{G|Déjà Dup}}<br />
| GPL<br />
| <br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://www.duply.net/ Duply]<br />
| [[Duply]]<br />
| duplicity front-end<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv2<br />
| <br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://kde-apps.org/content/show.php/Kup+Backup+System?content=147465 Kup Backup System]<br />
| {{Pkg|kup}}<br />
| rsync, bup front-end<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{G|Immature}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Y|bup}}<br />
| {{G|Qt}}<br />
| GPLv2<br />
| <br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://liw.fi/obnam/ obnam]<br />
| {{AUR|obnam}}<br />
| Python<br />
| {{Yes}}<br />
| {{G|GnuPG}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{G|checkpoints every 100MB}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv3<br />
| <br />
| {{No}}<br />
| <br />
|-<br />
| [https://restic.github.io/ restic]<br />
| {{AUR|restic}} {{AUR|restic-git}}<br />
| Go<br />
| {{No}} [https://github.com/restic/restic/issues/21]<br />
| {{G|AES-256}} [https://github.com/restic/restic/blob/master/doc/Design.md]<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}[https://restic.readthedocs.io/en/stable/manual.html#mount-a-repository]<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| BSD<br />
| <br />
| {{Yes}}<br />
| <br />
|-<br />
| [http://zbackup.org/ ZBackup]<br />
| {{AUR|zbackup}}<br />
| C++<br />
| {{G|LZMA, LZO}}<br />
| {{G|AES}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{R|planned [https://github.com/zbackup/zbackup#improvements]}}<br />
| {{No}}<br />
| {{Y|Kinda through tar}}<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv2<br />
| <br />
| {{Yes}}<br />
| Repository consists of immutable files.<br />
|}<br />
<br />
==== File-based increments ====<br />
<br />
If a file is modified, these applications store its new version entirely at the next snapshot. Compared to [[#Chunk-based increments]] applications, these are less space-efficient, especially when large files receive small modifications; on the other hand, often the archived snapshots can be opened without the need to have the backup application installed.<br />
<br />
'''Specific legend:'''<br />
<br />
* '''Hard links''': whether unmodified files are stored as hard links to previous versions.<br />
<br />
{| class="wikitable sortable"<br />
! Name<br />
! Installation<br />
! Implementation<br />
! Compressed storage<br />
! Encrypted storage<br />
! Delta transfer<br />
! Encrypted transfer<br />
! FS metadata<br />
! Easy access<br />
! Resumable<br />
! Handles renames<br />
! Hard links<br />
! CLI<br />
! Other interfaces<br />
! Licence<br />
! Other platforms<br />
! Maintained<br />
! Specificity<br />
|-<br />
| [https://github.com/bit-team/backintime Back In Time]<br />
| [[Back In Time]]<br />
| Python, rsync, diff<br />
| {{No}}<br />
| {{No}}<br />
| {{G|rsync}}<br />
| {{G|rsync}}<br />
| {{G|rsync}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{No}}<br />
| {{G|Yes [http://backintime.le-web.org/documentation/]}}<br />
| {{Yes}}<br />
| {{G|Qt}}<br />
| GPLv2<br />
| <br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://dar.linux.free.fr/ DAR] (Disk ARchive)<br />
| {{AUR|dar}}<br />
| C++<br />
| {{G|special archive format}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{R|No [http://dar.linux.free.fr/doc/Features.html]}}<br />
| {{Yes}}<br />
| {{G|DarGUI}}<br />
| GPL<br />
| FreeBSD, NetBSD, Windows, macOS<br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://dargui.sourceforge.net/ DarGUI]<br />
| {{AUR|dargui}}<br />
| DAR front-end<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{R|No [http://dar.linux.free.fr/doc/Features.html]}}<br />
| {{No}}<br />
| {{G|GTK}}<br />
| GPL<br />
| Windows<br />
| style="text-align:center;" | ?<br />
|<br />
|-<br />
| [http://miek.nl/projects/hdup2/ hdup]{{Dead link|2016|07|11}}<br />
| {{Aur|hdup}}<br />
| C<br />
| {{G|bzip, gzip, lzop}}<br />
| {{G|gpg}}<br />
| style="text-align:center;" | ?<br />
| {{G|SSH}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{No}}<br />
| {{No}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv2<br />
|<br />
| {{No}}<br />
| Multiple backup targets.<br />
|-<br />
| [http://www.scottlu.com/Content/Link-Backup.html Link-Backup]<br />
| {{AUR|link-backup}}<br />
| Python<br />
| {{No}}<br />
| {{No}}<br />
| style="text-align:center;" | ?<br />
| {{G|SSH}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{R|No [http://www.scottlu.com/Content/Link-Backup.html]}}<br />
| {{Yes}}<br />
| {{No}}<br />
| MIT<br />
| <br />
| {{No}}<br />
| It copies itself to the server.<br />
|-<br />
| [https://github.com/miekg/rdup rdup]<br />
| {{AUR|rdup}}<br />
| C<br />
| {{G|tar.gz}}<br />
| {{G|gpg, blowfish and others}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv3<br />
| <br />
| {{No}}<br />
| Set of command-line tools.<br />
|-<br />
| [http://www.rsnapshot.org/ rsnapshot]<br />
| [[rsnapshot]]<br />
| rsync<br />
| {{No}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{G|Yes [http://rsnapshot.org/rsnapshot/docs/docbook/rest.html]}}<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv2<br />
| Win32<br />
| {{Yes}}<br />
| <br />
|-<br />
| [https://launchpad.net/sbackup sbackup]<br />
| {{AUR|sbackup}}<br />
| Python<br />
| {{G|gzip, bzip2}}<br />
| {{No}}<br />
| style="text-align:center;" | ?<br />
| {{G|SSH}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{No}}<br />
| {{No}}<br />
| {{No}}<br />
| {{No}}<br />
| {{G|GTK}}<br />
| GPLv3<br />
| <br />
| {{Yes}}<br />
|<br />
|-<br />
| [https://github.com/teejee2008/timeshift TimeShift]<br />
| {{AUR|timeshift}}<br />
| rsync<br />
| {{No}}<br />
| {{No}}<br />
| {{G|rsync}}<br />
| {{G|rsync}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{No}}<br />
| {{G|GTK}}<br />
| GPLv3<br />
| Designed for full-system backups to dedicated devices.<br />
| {{Yes}}<br />
|<br />
|}<br />
<br />
=== Network oriented ===<br />
<br />
These applications have been designed to centralize the backup of several machines connected to a network, through a server-client model. In general they are more complicated to deploy, compared to [[#Single machine]] solutions.<br />
<br />
'''Specific legend:'''<br />
<br />
* '''Control direction''': Pull: server logs into client. Push: client initiates backup session.<br />
* '''Increment type''': the strategy used to reduce used space by deduplicating data (i.e., besides compression).<br />
** '''file-based''': if a file is modified, the entire new version is stored at each snapshot.<br />
*** '''hard-links''': whether unmodified files are stored as hard links to previous versions.<br />
** '''chunk-based''': only the modified ''parts'' of files are stored at each snapshot.<br />
<br />
{| class="wikitable sortable"<br />
! Name<br />
! Installation<br />
! Implementation<br />
! Control direction<br />
! Compressed storage<br />
! Encrypted storage<br />
! Delta transfer<br />
! Encrypted transfer<br />
! FS metadata<br />
! Easy access<br />
! Resumable<br />
! Handles renames<br />
! Increment type<br />
! CLI<br />
! Other interfaces<br />
! Licence<br />
! Other platforms<br />
! Maintained<br />
! Specificity<br />
|-<br />
| [http://backuppc.sourceforge.net/index.html BackupPC]<br />
| [[BackupPC]]<br />
| Perl<br />
| Pull<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| file-based, hard links [http://backuppc.sourceforge.net/faq/BackupPC.html#Backup-basics]<br />
| {{No}}<br />
| {{G|Web}}<br />
| GPLv2<br />
| Any (no client needed)<br />
| {{Yes}}<br />
| Identical files across backups of the same or different clients are stored only once.<br />
|-<br />
| [http://www.bacula.org Bacula]<br />
| [https://aur.archlinux.org/packages/?K=bacula bacula*] in [[AUR]]<br />
| C++<br />
| Pull<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| file-based [http://burp.grke.org/why.html]<br />
| {{Yes}}<br />
| {{G|GUI, Web}}<br />
| AGPLv3<br />
| Windows, macOS<br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://burp.grke.org burp]<br />
| {{AUR|burp-backup}}<br />
| librsync<br />
| Push<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| chunk-based [http://burp.grke.org/why.html]<br />
| {{Yes}}<br />
| {{G|[https://git.ziirish.me/ziirish/burp-ui burp-ui]}}<br />
| AGPLv3<br />
| Windows<br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://safekeep.sourceforge.net/ SafeKeep]<br />
| {{AUR|safekeep}}<br />
| rdiff-backup<br />
| Pull<br />
| {{No}}<br />
| {{No}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| chunk-based [http://safekeep.sourceforge.net/safekeep.html]<br />
| {{Yes}}<br />
| {{Yes}}<br />
| GPL<br />
| <br />
| {{No}}<br />
| Integrates with [[LVM]] and databases to create consistent backups. Bandwidth throttling.<br />
|-<br />
| [http://www.snebu.com Snebu]<br />
| {{AUR|snebu}}{{Broken package link|{{aur-mirror|snebu}}}}<br />
| C<br />
| Push or Pull<br />
| {{Yes}}<br />
| {{No}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| file-based [http://www.snebu.com/#_concepts]<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv3<br />
| <br />
| style="text-align:center;" | ?<br />
| Supports arbitrary retention schedules.<br />
|-<br />
| [http://www.initzero.it/portal/soluzioni/software-open-source/synbak-universal-backup-system_2623.html Synbak]<br />
| {{Pkg|synbak}}<br />
| Multitool wrapper<br />
| ?<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| ?<br />
| {{No}}<br />
| {{G|Web}}<br />
| GPLv3<br />
| <br />
| {{Yes}}<br />
| Unifies several backup methods.<br />
|-<br />
| [https://www.urbackup.org UrBackup]<br />
| [https://aur.archlinux.org/packages/?K=urbackup urbackup*] in [[AUR]]<br />
| C++<br />
| Pull<br />
| {{No}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Y|Internet transfers only}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| file-based,hard-links and symlinks[http://blog.urbackup.org/156/symbolically-linking-directories-during-incremental-file-backups]/chunk-based CoW-Snapshots[http://blog.urbackup.org/83/file-backup-storage-with-btrfs-snapshots]<br />
| {{Yes}} (client)<br />
| {{G|GUI, Web}}<br />
| AGPLv3+<br />
| Windows, macOS<br />
| {{Yes}}<br />
| Identical files across backups of the same or different clients are stored only once. Integrates with LVM, dattobd and btrfs for file system snapshots.<br />
|}<br />
<br />
== Cloud storage ==<br />
<br />
=== Third-party services ===<br />
<br />
{{Merge|List of applications#File sharing|Remove the extra bullet points: the Wikipedia comparison table, and the respective webpages and Wikipedia articles do a better job at describing them.}}<br />
<br />
See also [[Wikipedia:Comparison of online backup services]] and [[List of applications#Cloud synchronization clients]].<br />
<br />
{{Tip|{{aur|cryptomator}} is an open-source, multi-platform program designed to add client-side transparent encryption on cloud-shared files.}}<br />
<br />
* {{App|Amazon S3|Amazon Simple Storage Service (Amazon S3), provides developers and IT teams with secure, durable, highly-scalable object storage. Amazon S3 is easy to use, with a simple web service interface to store and retrieve any amount of data from anywhere on the web. With Amazon S3, you pay only for the storage you actually use. There is no minimum fee and no setup cost.|http://aws.amazon.com/s3/|{{Pkg|s3cmd}} (high-level operations), {{Pkg|python-boto3}} (low-level API)}}<br />
<br />
* {{App|[[CrashPlan]]|An online/offsite backup solution.<br />
** Unlimited online space for very reasonable pricing.<br />
** Automatic and incremental backups to multiple destinations.<br />
** Intuitive GUI.<br />
** Offers encryption and de-duplication.<br />
** Software is free for local use.<br />
** Restore prevents simultaneous backing up<br />
|http://www.crashplan.com/|{{AUR|crashplan}}}}<br />
<br />
* {{App|[[Dropbox]]|A popular file-sharing service.<br />
** A daemon monitors a specified directory, and uploads incremental changes to dropbox.com. <br />
** Changes automatically show up on your other computers. <br />
** Includes file sharing and a public directory. <br />
** You can recover deleted files. <br />
** Community written add-ons. <br />
** Free accounts have 2GB storage.<br />
|http://www.dropbox.com|{{AUR|dropbox}} {{AUR|nautilus-dropbox}}}}<br />
<br />
* {{App|[[Wikipedia:Google Drive|Google Drive]]|A file storage and synchronization service provided by Google.<br />
** Provides cloud storage, file sharing and collaborative editing.<br />
** Multiple clients are available.<br />
|https://drive.google.com|{{AUR|google-drive-ocamlfuse}} (free), {{AUR|drive}} (free), {{AUR|grive}} (free), {{AUR|gdrivefs}} (free), [[insync]] (non-free)}}, {{AUR|gdrive}} (free), {{AUR|drivesync-git}} (free)<br />
<br />
* {{App|[[Wikipedia:IDrive_Inc.|iDrive]]|Universal Online Backup.<br />
** Multiple Device Backup.<br />
** Online File Sync. <br />
** Real-Time Backup. <br />
** Backup and Access from Mobile Devices. <br />
** Remote Manage. <br />
** No GUI Front end for Linux, command line based. A wrapper script is available to make it easier to use.<br />
|https://www.idrive.com/|}}<br />
<br />
* {{App|[[Wikipedia:Jungle Disk|Jungle Disk]]|An online backup tool that stores its data in Amazon S3 or Rackspace Cloud Files.<br />
** A GNOME Files extension.<br />
** Only paid plans available.<br />
|http://www.jungledisk.com/|}}<br />
<br />
* {{App|[[Wikipedia:Mega (website)|MEGA]]|Successor to the MegaUpload file-sharing service.<br />
** Free accounts are 50GB with paid plans available for more space.<br />
** Offers encryption and de-duplication.<br />
** Usually accessed through its web interface but other tools exist.<br />
|https://mega.co.nz|{{AUR|megatools}}, {{AUR|megasync}}, {{AUR|megafuse-git}}}}<br />
<br />
* {{App|Nutstore|A cloud service that lets you sync and share files anywhere.<br />
** Multiple file folders sync.<br />
** Service for Chinese users.<br />
|http://jianguoyun.com/|{{AUR|nutstore}}}}<br />
<br />
* {{App|OneDrive|Microsoft cloud service.<br />
|https://onedrive.com|{{AUR|onedrive-git}}}}<br />
<br />
* {{App|rsync.net|Cloud storage for offsite backups.<br />
** ZFS filesystem, accessible with any SSH/SFTP/SCP/rsync tool, running on a UNIX system with [http://www.rsync.net/resources/howto/remote_commands.html jailed shell access].<br />
** Simple rsync synchronization with daily automatic ZFS snapshots.<br />
** Native upport for Attic and {{Pkg|borg}} clients: http://rsync.net/products/attic.html<br />
|http://www.rsync.net/|[[rsync]]/[[SSH]], {{Pkg|borg}}}}<br />
<br />
* {{App|[[Wikipedia:SpiderOak|SpiderOak]]|An online backup tool for Windows, Mac and Linux users to back up, share, sync, access and store their data.<br />
** Free account holds 2GB as a 60-day trial.<br />
** Includes file sharing and a public directory.<br />
** Incremental backup and sync are both supported.<br />
|https://spideroak.com/|{{AUR|spideroak-one}}}}<br />
<br />
* {{App|[[Wikipedia:Storage Made Easy|Storage Made Easy]]|Provides unified access to numerous cloud storage services, as well as its own storage.<br />
** Free and paid version available.<br />
** Free account holds 5GB and allows access to up to three other cloud storage providers.<br />
** Supports local directory via fuse, as well as web access.<br />
** Supports many cloud storage services, such as Box, Dropbox, Google Drive, Onedrive, and others.<br />
|http://storagemadeeasy.com/|}}<br />
<br />
* {{App|[[Wikipedia:Tarsnap|Tarsnap]]|A secure online backup service for Linux, BSD, macOS and Windows (through Cygwin).<br />
** Compressed encrypted backups to Amazon S3 Servers.<br />
** Automate via [[cron]].<br />
** Incremental backups.<br />
** Backup any files or directories.<br />
** Command line only client.<br />
** Pay only for usage (bandwidth and storage). <br />
|http://www.tarsnap.com|{{Pkg|tarsnap}}}}<br />
<br />
* {{App|[[Yandex Disk]]|Free cloud storage service created by Yandex.ru that gives you access to your photos, videos and documents from any internet-enabled device.|https://disk.yandex.ru/|{{AUR|yandex-disk}}}}<br />
<br />
==== Multi-service clients ====<br />
<br />
* {{App|[[Déjà Dup]]|A simple GTK+ backup program. It hides the complexity of doing backups the 'right way' (encrypted, off-site, and regular) and uses duplicity as the backend.<br />
** Automatic, timed backup configurable in GUI.<br />
** Restore wizard.<br />
** Integrated into the GNOME Files file manager.<br />
** Inherits several features of duplicity.<br />
|https://launchpad.net/deja-dup|{{Pkg|deja-dup}}}}<br />
<br />
* {{App|Duplicati|Backup client that securely stores encrypted, incremental, compressed backups on cloud storage services and remote file servers. It works with Amazon S3, Windows Live SkyDrive, Google Drive (Google Docs), Rackspace Cloud Files or WebDAV, SSH, FTP (and many more). Duplicati is open source and free.|http://www.duplicati.com/|{{AUR|duplicati-latest}}}}<br />
<br />
* {{App|[[Duplicity]]|A simple command-line utility which allows encrypted compressed incremental backup to nearly any storage.<br />
** Supports gpg encryption and signing.<br />
** Supports gzip compression.<br />
** Supports full or incremental backups, incremental backup stores only difference between new and old file.<br />
** Supports pushing over [http://duplicity.nongnu.org/duplicity.1.html#sect7 many protocols].<br />
|http://www.nongnu.org/duplicity/|{{Pkg|duplicity}}}}<br />
<br />
* {{App|[[Duply]]|Front-end for duplicity which simplifies running it by:<br />
** keeping recurring settings in profiles per backup job;<br />
** automated import/export of keys between profile and keyring;<br />
** enabling batch operations eg. backup_verify_purge;<br />
** executing pre/post scripts;<br />
** precondition checking for flawless duplicity operation.<br />
|http://www.duply.net/|{{AUR|duply}}}}<br />
<br />
* {{App|rclone|Rclone is a command line program to sync files and directories to and from Google Drive, Amazon S3, Openstack Swift / Rackspace cloud files / Memset Memstore, Dropbox, Google Cloud Storage and The local filesystem.|http://rclone.org/|{{Pkg|rclone}}}}<br />
<br />
* {{App|Syncany|Cloud storage and filesharing application with a focus on security and abstraction of storage.|https://www.syncany.org/|{{AUR|syncany}}}}<br />
<br />
=== Custom infrastructure ===<br />
<br />
See [[List of applications/Internet#Cloud storage servers]]<br />
<br />
== Version control systems ==<br />
<br />
{{Merge|List_of_applications#Work_environment|Also drop the extra bullets, the Wikipedia comparison table is much better than this.}}<br />
<br />
These are traditionally used for keeping track of software development; but if you want to have a simple way to manage your config files in one directory, it might be a good solution.<br />
<br />
See also [[Wikipedia:Comparison of revision control software]].<br />
<br />
* {{App|[[Bazaar]]|A distributed version control system that helps you track project history over time and to collaborate easily with others.<br />
** Similar commands to Subversion.<br />
** Supports working with or without a central server.<br />
** Support for working with some other revision control systems<br />
** Complete Unicode support.<br />
|https://bazaar.canonical.com/en/|{{Pkg|bzr}}}}<br />
<br />
* {{App|Darcs|A distributed revision control system that was designed to replace traditional, centralized source control systems such as CVS and Subversion.<br />
** Offline mode.<br />
** Easy branching and merging.<br />
** Written in Haskell.<br />
** Not very fast.<br />
|http://darcs.net/|{{Pkg|darcs}}}}<br />
<br />
* {{App|[[Git]]|A distributed revision control and source code management system with an emphasis on speed.<br />
** Very easy creation, merging, and deletion of branches.<br />
** Nearly all operations are performed locally, giving it a huge speed advantage on centralized systems.<br />
** Has a "staging area" or "index", this is an intermediate area where commits can be formatted and reviewed before completing the commit.<br />
** Does not handle binary files very well.<br />
|https://git-scm.com/|{{Pkg|git}}}}<br />
<br />
* {{App|[[Mercurial]]|A distributed version control system written in Python and similar in many ways to Git.<br />
** Platform independent.<br />
** Support for [http://mercurial.selenic.com/wiki/UsingExtensions extensions].<br />
** A set of commands consistent with Subversion.<br />
** Supports tags.<br />
|https://www.mercurial-scm.org/|{{Pkg|mercurial}}}}<br />
<br />
* {{App|[[Subversion]]|A full-featured centralized version control system originally designed to be a better CVS.<br />
** Renamed/copied/moved/removed files retain full revision history.<br />
** Native support for binary files, with space-efficient binary-diff storage.<br />
** Costs proportional to change size, not to data size.<br />
** Allows arbitrary metadata ("properties") to be attached to any file or directory. <br />
|https://subversion.apache.org/|{{Pkg|subversion}}}}<br />
<br />
== See also ==<br />
<br />
* [[Wikipedia:List of backup software]]<br />
* [[Wikipedia:Comparison of backup software]]<br />
* [https://github.com/restic/others Exhaustive list of backup solutions for Linux]<br />
* [http://www.halfgaar.net/backing-up-unix Backing up Linux and other Unix(-like) systems]<br />
* [http://www.askapache.com/security/mirror-using-rsync-ssh.html Mirroring an Entire Site using Rsync over SSH]<br />
* [http://www.si-journal.org/index.php/JSI/article/view/205 Performance comparison of five remote incremental backup tools: Rsync, Rdiff-backup, Duplicity, Areca and Link-Backup]<br />
* [http://blog.pointsoftware.ch/index.php/howto-local-and-remote-snapshot-backup-using-rsync-with-hard-links/ rsync-snapshot.sh] — Local and remote snapshot backup using rsync with hard links</div>Wzyboyhttps://wiki.archlinux.org/index.php?title=Synchronization_and_backup_programs&diff=512882Synchronization and backup programs2018-03-06T16:01:41Z<p>Wzyboy: /* Third-party services */ rsync.net: jailed shell access and discounted price for borg use</p>
<hr />
<div>[[Category:Data compression and archiving]]<br />
[[Category:System recovery]]<br />
[[de:Backups]]<br />
[[ja:バックアッププログラム]]<br />
[[ru:Backup programs]]<br />
{{Related articles start}}<br />
{{Related|System backup}}<br />
{{Related|Disk cloning}}<br />
{{Related|List of applications#File sharing}}<br />
{{Related|System maintenance#Backup}}<br />
{{Related|Dotfiles#Version control}}<br />
{{Related|File recovery}}<br />
{{Related articles end}}<br />
<br />
This page lists and compares applications that synchronize data between two or more locations, and those that build on top of such functionality to make incremental copies of important data for backup purposes. Because of their relationship, the two groups share several traits that justify describing them in the same article.<br />
<br />
== Backup overview ==<br />
<br />
Having backups of important data is a necessary measure to take, since human and machine processing errors are very likely to generate corruption as time passes, and also the physical media where the data is stored is inevitably destined to fail. In order to choose the best program for one's own needs, the following aspects should be considered:<br />
<br />
* The type of backup medium that is going to store the data, e.g. CD, DVD, remote server, external hard drive, etc.<br />
* The planned frequency of backups, e.g. daily, weekly, monthly, etc.<br />
* The features expected from the backup solution, e.g. compression, encryption, handles renames, etc.<br />
* The planned method to restore backups if needed.<br />
<br />
== Data synchronization ==<br />
<br />
These applications simply keep directories synchronized between multiple locations/machines, in a "mirror" fashion. Nonetheless, most of them still allow storing and reverting to old revisions of modified or deleted files.<br />
<br />
See also [[Wikipedia:Comparison of file synchronization software]].<br />
<br />
'''Legend:'''<br />
<br />
* '''Name''': the application name, linking to the ArchWiki article or the official website.<br />
* '''Installation''': a link to the package.<br />
* '''Implementation''': the programming language, library, or utility that the application is based on.<br />
* '''Delta transfer''': only the modified ''parts'' of files are transferred.<br />
* '''Encrypted transfer''': data is encrypted by default when transferred over the network.<br />
* '''FS metadata''': file system permissions and attributes are synchronized.<br />
* '''Resumable''': the synchronization can be resumed if interrupted.<br />
* '''Handles renames''': moved/renamed files are detected and not stored or transferred twice. It typically means that a checksum of files or its chunks is computed.<br />
* '''Version control''': the old version of files are backed up ('''reverse incremental backup''').<br />
* '''Change propagation''': specifies in how many directions changes can be propagated.<br />
** ''unidirectional'' means one-way synchronization of two locations,<br />
** ''bidirectional'' means two-way synchronization of two locations and<br />
** ''multidirectional'' means full synchronization of more than two locations.<br />
* '''Conflict resolution''': the application handles file conflicts, either automatically or interactively, i.e. it does not silently discard conflicting files. This attribute does not apply to applications that only propagate changes in one direction.<br />
* '''FS monitoring''': the application listens to file system events to trigger the synchronization.<br />
* '''CLI''': the application is command-line driven, i.e. it is scriptable.<br />
* '''Other interfaces''': the application has the specified user interfaces, e.g. GUI, TUI, or web-based.<br />
* '''License''': the license of the server and client applications.<br />
* '''Other platforms''': supported operating systems other than Linux.<br />
* '''Specificity''': brief notes about special features that notably set the application apart from the others.<br />
<br />
{| class="wikitable sortable"<br />
! Name<br />
! Installation<br />
! Implementation<br />
! Delta transfer<br />
! Encrypted transfer<br />
! FS metadata<br />
! Resumable<br />
! Handles renames<br />
! Version control<br />
! Change propagation<br />
! Conflict resolution<br />
! FS monitoring<br />
! CLI<br />
! Other interfaces<br />
! License<br />
! Other platforms<br />
! Maintained<br />
! Specificity<br />
|-<br />
| [[Resilio Sync]]<br />
| {{aur|rslsync}}<br />
| ? (closed source)<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| '''multi'''directional<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{G|Web}}<br />
| Proprietary freemium<br />
| FreeBSD, Windows, macOS, Android, iOS, Windows Phone, Amazon Kindle Fire<br />
| {{Yes}}<br />
| P2P sync<br />
|-<br />
| [https://www.freefilesync.org/ FreeFileSync]<br />
| {{AUR|freefilesync}}<br />
| C++<br />
| style="text-align:center;" | ?<br />
| {{G|SFTP [http://www.freefilesync.org/faq.php#features]}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{G|Yes [http://www.freefilesync.org/faq.php#features]}}<br />
| {{G|1=Yes [http://www.freefilesync.org/manual.php?topic=versioning]}}<br />
|'''uni'''directional / '''multi'''directional<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| GPL<br />
| Windows, macOS<br />
| {{Yes}}<br />
|<br />
|-<br />
| [https://git-annex.branchable.com/ git-annex]<br />
| {{Pkg|git-annex}}<br />
| Haskell, git<br />
| {{G|rsync [http://git-annex.branchable.com/transferring_data/]}}<br />
| {{G|rsync [http://git-annex.branchable.com/transferring_data/]}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| '''multi'''directional; with git remotes [http://git-annex.branchable.com/sync/]<br />
| {{G|renames conflicting files [http://git-annex.branchable.com/automatic_conflict_resolution/]}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{G|[http://git-annex.branchable.com/assistant/ git-annex assistant]}}<br />
| GPLv3<br />
| macOS, Android<br />
| {{Yes}}<br />
| Manage files with git<br />
|-<br />
| [http://www.netpower.fr/osync osync.sh]<br />
| {{AUR|osync}}<br />
| Bash, based on rsync<br />
| {{G|rsync}}<br />
| {{G|rsync}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| '''bi'''directional<br />
| {{G|keeps multiple versions of a file [http://www.netpower.fr/sites/default/files/soft/html-doc/osync_v1.2.html#toc-Subsubsection-1.3.1]}}<br />
| {{G|optional [https://github.com/deajan/osync#daemon-mode]}}<br />
| {{Yes}}<br />
| {{No}}<br />
| BSD<br />
| <br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://www.nongnu.org/rdiff-backup/ rdiff-backup]<br />
| {{Pkg|rdiff-backup}}<br />
| Python 2, librsync<br />
| {{G|rsync}}<br />
| {{G|rsync}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
|colspan="2"| '''uni'''directional<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| GPL<br />
| Win32<br />
| style="text-align:center;" | ?<br />
|<br />
|-<br />
| [[rsync]]<br />
| {{pkg|rsync}}<br />
| C<br />
| {{Yes}}<br />
| {{G|SSH or native protocol}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{G|<br />
* {{ic|--link-dest}} with hard links [http://www.ibm.com/developerworks/aix/library/au-spunix_rsync/index.html#backup]<br />
* {{ic|--backup}}<br />
}}<br />
|colspan="2"| '''uni'''directional<br />
| {{No}}<br />
| {{Yes}}<br />
| {{G|[[Rsync#Front-ends]]}}<br />
| GPLv3<br />
| Win32<br />
| {{Yes}}<br />
| Standard tool present on all Linux distributions.<br />
|-<br />
| [https://sparkleshare.org/ SparkleShare]<br />
| {{Pkg|sparkleshare}}<br />
| C#, git<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| GPLv3<br />
| Windows, macOS<br />
| {{Yes}}<br />
|<br />
|-<br />
| [[Syncthing]]<br />
| {{pkg|syncthing}}<br />
| Go<br />
| {{G|Yes [http://docs.syncthing.net/users/faq.html#is-synchronization-fast]}}<br />
| {{G|Yes [http://docs.syncthing.net/users/security.html]}}<br />
| {{Y|partial [http://docs.syncthing.net/users/faq.html#what-things-are-synced]}}<br />
| {{G|Yes }}<br />
| style="text-align:center;" | ?<br />
| {{G|Yes [http://docs.syncthing.net/users/versioning.html]}}, previous versions moved to archive folder<br />
| '''multi'''directional<br />
| {{G|renames one file [https://docs.syncthing.net/users/faq.html#what-if-there-is-a-conflict]}}<br />
| {{G|Yes}}<br />
| {{Yes}}<br />
| {{G|Web, GTK}}<br />
| MPL v2<br />
| BSD, Windows, macOS, Android, Kindle Paperwhite<br />
| {{Yes}}<br />
| P2P sync<br />
|-<br />
| [http://synkron.sourceforge.net/ Synkron]<br />
| {{AUR|synkron}}<br />
| C++<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| '''multi'''directional<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{G|Qt}}<br />
| GPLv2<br />
| Windows, macOS<br />
| {{R|[https://sourceforge.net/projects/synkron/ No]}}<br />
|<br />
|-<br />
| [[taskd]]<br />
| {{aur|taskd}}<br />
| C++, Python<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| '''multi'''directional<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| MIT<br />
| Android<br />
| {{Yes}}<br />
|<br />
|-<br />
| [[Unison]]<br />
| {{pkg|unison}}<br />
| OCaml<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Y|partial [http://www.cis.upenn.edu/~bcpierce/unison/download/releases/stable/unison-manual.html#perms]}}<br />
| {{G|optional [http://www.cis.upenn.edu/~bcpierce/unison/download/releases/stable/unison-manual.html#speeding]}}<br />
| {{No}}<br />
| {{G|Yes [http://www.cis.upenn.edu/~bcpierce/unison/download/releases/stable/unison-manual.html#backups]}}<br />
| '''bi'''directional<br />
| {{G|interactive}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{G|GTK2}}<br />
| GPL<br />
| FreeBSD, Windows, macOS, Android<br />
| {{G|Yes [http://www.cis.upenn.edu/~bcpierce/unison/status.html]}}<br />
|<br />
|}<br />
<br />
== Incremental backups ==<br />
<br />
Applications that can do incremental backups remember and take into account what data has been backed up during the last run (so-called "diffs") and eliminate the need to have duplicates of unchanged data. Restoring the data to a certain point in time would require locating the last full backup and all the incremental backups from then to the moment when it is supposed to be restored. This sort of backup is useful for those who do it very often.<br />
<br />
See also [[Dotfiles#Version control]].<br />
<br />
'''Legend:'''<br />
<br />
* '''Name''': the application name, linking to the official website.<br />
* '''Installation''': a link to the main ArchWiki article, if existing, or directly to the package pages.<br />
* '''Implementation''': the programming language, library, or utility that the application is based on.<br />
* '''Compressed storage''': compression is used for storage.<br />
* '''Encrypted storage''': encryption is used for storage.<br />
* '''Delta transfer''': only the modified ''parts'' of files are transferred.<br />
* '''Encrypted transfer''': data is encrypted by default when transferred over a network.<br />
* '''FS metadata''': file system permissions and attributes are backed up.<br />
* '''Easy access''': the backup is stored plainly in the file system, or is mountable as such.<br />
* '''Resumable''': the backup can be resumed without restarting it if interrupted.<br />
* '''Handles renames''': moved/renamed files are detected and not stored or transferred twice; it typically means that a checksum is computed for files or chunks thereof.<br />
* '''CLI''': the application is command-line driven, i.e. it is scriptable.<br />
* '''Other interfaces''': the application has the specified user interfaces, e.g. GUI, TUI, or web-based.<br />
* '''Licence''': the licence of the server and client applications.<br />
* '''Other platforms''': supported operating systems other than Linux.<br />
* '''Specificity''': brief notes about special features that notably set the application apart from the others.<br />
<br />
=== Single machine ===<br />
<br />
These applications are aimed at backing up data from the machine they are installed on, although the backup destination can be located on an external machine or storage media.<br />
<br />
==== Chunk-based increments ====<br />
<br />
If a file is modified, these applications store only its changed ''parts'' at the next snapshot. Compared to [[#File-based increments]] applications, these are more space-efficient, especially when large files receive small modifications; on the other hand, the archived snapshots have to be opened with the backup application that created them, since the files have to be reconstructed from the stored binary diffs.<br />
<br />
{| class="wikitable sortable"<br />
! Name<br />
! Installation<br />
! Implementation<br />
! Compressed storage<br />
! Encrypted storage<br />
! Delta transfer<br />
! Encrypted transfer<br />
! FS metadata<br />
! Easy access<br />
! Resumable<br />
! Handles renames<br />
! CLI<br />
! Other interfaces<br />
! Licence<br />
! Other platforms<br />
! Maintained<br />
! Specificity<br />
|-<br />
| [http://areca.sourceforge.net/ Areca Backup]<br />
| {{AUR|areca}}<br />
| Java<br />
| {{G|Zip, Zip64}}<br />
| {{G|AES128, AES256}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Y|Pausing only}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| GPLv2<br />
| Windows<br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://borgbackup.readthedocs.org/en/stable/ BorgBackup]<br />
| {{Pkg|borg}}<br />
| Python, C (Cython)<br />
| {{G|lz4, zlib, lzma, zstd}}<br />
| {{G|AES256}}<br />
| {{Yes}}<br />
| {{G|SSH}}<br />
| {{Yes}}[http://borgbackup.readthedocs.org/en/stable/faq.html#which-file-types-attributes-etc-are-preserved]<br />
| {{Yes}}[http://borgbackup.readthedocs.org/en/stable/usage.html#borg-mount]<br />
| {{Yes}}[http://borgbackup.readthedocs.org/en/stable/faq.html#if-a-backup-stops-mid-way-does-the-already-backed-up-data-stay-there]<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{G|third party}}<br />
| BSD<br />
| *BSD, macOS<br />
| {{Yes}} (Attic fork)<br />
| Deduplication based on variable length chunks; support both local and SSH-based remote backup destination<br />
|-<br />
| [http://viric.name/cgi-bin/btar btar]<br />
| {{AUR|btar}}{{Broken package link|{{aur-mirror|btar}}}}<br />
| C<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv3<br />
| <br />
| {{Yes}}<br />
| Redundancy, indexed extraction, multicore compression, input and output serialisation, tolerance to partial archive errors. <br />
|-<br />
| [https://bup.github.io/ bup]<br />
| {{Pkg|bup}} {{AUR|bup-git}}<br />
| C, Python, git<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{G|Immature}}<br />
| {{Yes}}[https://bup.github.io/man/bup-fuse.html]<br />
| {{G|pick up where you left off [https://github.com/bup/bup/blob/master/README.md#reasons-bup-is-awesome]}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{G|third party}}<br />
| GPLv2<br />
| NetBSD, Windows, macOS<br />
| {{Yes}}<br />
| Same storage format as git<br />
|-<br />
| [https://github.com/emersion/bups bups]<br />
| {{AUR|bups}}<br />
| bup frontend<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{G|Immature}}<br />
| {{Yes}}<br />
| {{G|pick up where you left off [https://github.com/bup/bup/blob/master/README.md#reasons-bup-is-awesome]}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{G|GTK 3}}<br />
| MIT<br />
|<br />
| {{Yes}}<br />
|<br />
|-<br />
| [https://launchpad.net/deja-dup Déjà Dup]<br />
| [[Déjà Dup]]<br />
| duplicity front-end<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{G|GTK+}}<br />
| GPLv3<br />
| <br />
| {{Yes}}<br />
| Integrated into [[GNOME Files]].<br />
|-<br />
| [http://www.duplicati.com/ Duplicati]<br />
| {{AUR|duplicati-latest}}<br />
| C#<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{R|scheduled for 2.0 release}}<br />
| {{No}}<br />
| {{Y|Pausing only}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| LGPL<br />
| Windows<br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://www.nongnu.org/duplicity/ Duplicity]<br />
| [[Duplicity]]<br />
| librsync<br />
| {{G|gzip}}<br />
| {{G|gpg}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{G|Déjà Dup}}<br />
| GPL<br />
| <br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://www.duply.net/ Duply]<br />
| [[Duply]]<br />
| duplicity front-end<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv2<br />
| <br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://kde-apps.org/content/show.php/Kup+Backup+System?content=147465 Kup Backup System]<br />
| {{Pkg|kup}}<br />
| rsync, bup front-end<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{G|Immature}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Y|bup}}<br />
| {{G|Qt}}<br />
| GPLv2<br />
| <br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://liw.fi/obnam/ obnam]<br />
| {{AUR|obnam}}<br />
| Python<br />
| {{Yes}}<br />
| {{G|GnuPG}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{G|checkpoints every 100MB}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv3<br />
| <br />
| {{No}}<br />
| <br />
|-<br />
| [https://restic.github.io/ restic]<br />
| {{AUR|restic}} {{AUR|restic-git}}<br />
| Go<br />
| {{No}} [https://github.com/restic/restic/issues/21]<br />
| {{G|AES-256}} [https://github.com/restic/restic/blob/master/doc/Design.md]<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}[https://restic.readthedocs.io/en/stable/manual.html#mount-a-repository]<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| BSD<br />
| <br />
| {{Yes}}<br />
| <br />
|-<br />
| [http://zbackup.org/ ZBackup]<br />
| {{AUR|zbackup}}<br />
| C++<br />
| {{G|LZMA, LZO}}<br />
| {{G|AES}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{R|planned [https://github.com/zbackup/zbackup#improvements]}}<br />
| {{No}}<br />
| {{Y|Kinda through tar}}<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv2<br />
| <br />
| {{Yes}}<br />
| Repository consists of immutable files.<br />
|}<br />
<br />
==== File-based increments ====<br />
<br />
If a file is modified, these applications store its new version entirely at the next snapshot. Compared to [[#Chunk-based increments]] applications, these are less space-efficient, especially when large files receive small modifications; on the other hand, often the archived snapshots can be opened without the need to have the backup application installed.<br />
<br />
'''Specific legend:'''<br />
<br />
* '''Hard links''': whether unmodified files are stored as hard links to previous versions.<br />
<br />
{| class="wikitable sortable"<br />
! Name<br />
! Installation<br />
! Implementation<br />
! Compressed storage<br />
! Encrypted storage<br />
! Delta transfer<br />
! Encrypted transfer<br />
! FS metadata<br />
! Easy access<br />
! Resumable<br />
! Handles renames<br />
! Hard links<br />
! CLI<br />
! Other interfaces<br />
! Licence<br />
! Other platforms<br />
! Maintained<br />
! Specificity<br />
|-<br />
| [https://github.com/bit-team/backintime Back In Time]<br />
| [[Back In Time]]<br />
| Python, rsync, diff<br />
| {{No}}<br />
| {{No}}<br />
| {{G|rsync}}<br />
| {{G|rsync}}<br />
| {{G|rsync}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{No}}<br />
| {{G|Yes [http://backintime.le-web.org/documentation/]}}<br />
| {{Yes}}<br />
| {{G|Qt}}<br />
| GPLv2<br />
| <br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://dar.linux.free.fr/ DAR] (Disk ARchive)<br />
| {{AUR|dar}}<br />
| C++<br />
| {{G|special archive format}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{R|No [http://dar.linux.free.fr/doc/Features.html]}}<br />
| {{Yes}}<br />
| {{G|DarGUI}}<br />
| GPL<br />
| FreeBSD, NetBSD, Windows, macOS<br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://dargui.sourceforge.net/ DarGUI]<br />
| {{AUR|dargui}}<br />
| DAR front-end<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{R|No [http://dar.linux.free.fr/doc/Features.html]}}<br />
| {{No}}<br />
| {{G|GTK}}<br />
| GPL<br />
| Windows<br />
| style="text-align:center;" | ?<br />
|<br />
|-<br />
| [http://miek.nl/projects/hdup2/ hdup]{{Dead link|2016|07|11}}<br />
| {{Aur|hdup}}<br />
| C<br />
| {{G|bzip, gzip, lzop}}<br />
| {{G|gpg}}<br />
| style="text-align:center;" | ?<br />
| {{G|SSH}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{No}}<br />
| {{No}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv2<br />
|<br />
| {{No}}<br />
| Multiple backup targets.<br />
|-<br />
| [http://www.scottlu.com/Content/Link-Backup.html Link-Backup]<br />
| {{AUR|link-backup}}<br />
| Python<br />
| {{No}}<br />
| {{No}}<br />
| style="text-align:center;" | ?<br />
| {{G|SSH}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{R|No [http://www.scottlu.com/Content/Link-Backup.html]}}<br />
| {{Yes}}<br />
| {{No}}<br />
| MIT<br />
| <br />
| {{No}}<br />
| It copies itself to the server.<br />
|-<br />
| [https://github.com/miekg/rdup rdup]<br />
| {{AUR|rdup}}<br />
| C<br />
| {{G|tar.gz}}<br />
| {{G|gpg, blowfish and others}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv3<br />
| <br />
| {{No}}<br />
| Set of command-line tools.<br />
|-<br />
| [http://www.rsnapshot.org/ rsnapshot]<br />
| [[rsnapshot]]<br />
| rsync<br />
| {{No}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{G|Yes [http://rsnapshot.org/rsnapshot/docs/docbook/rest.html]}}<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv2<br />
| Win32<br />
| {{Yes}}<br />
| <br />
|-<br />
| [https://launchpad.net/sbackup sbackup]<br />
| {{AUR|sbackup}}<br />
| Python<br />
| {{G|gzip, bzip2}}<br />
| {{No}}<br />
| style="text-align:center;" | ?<br />
| {{G|SSH}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{No}}<br />
| {{No}}<br />
| {{No}}<br />
| {{No}}<br />
| {{G|GTK}}<br />
| GPLv3<br />
| <br />
| {{Yes}}<br />
|<br />
|-<br />
| [https://github.com/teejee2008/timeshift TimeShift]<br />
| {{AUR|timeshift}}<br />
| rsync<br />
| {{No}}<br />
| {{No}}<br />
| {{G|rsync}}<br />
| {{G|rsync}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{No}}<br />
| {{G|GTK}}<br />
| GPLv3<br />
| Designed for full-system backups to dedicated devices.<br />
| {{Yes}}<br />
|<br />
|}<br />
<br />
=== Network oriented ===<br />
<br />
These applications have been designed to centralize the backup of several machines connected to a network, through a server-client model. In general they are more complicated to deploy, compared to [[#Single machine]] solutions.<br />
<br />
'''Specific legend:'''<br />
<br />
* '''Control direction''': Pull: server logs into client. Push: client initiates backup session.<br />
* '''Increment type''': the strategy used to reduce used space by deduplicating data (i.e., besides compression).<br />
** '''file-based''': if a file is modified, the entire new version is stored at each snapshot.<br />
*** '''hard-links''': whether unmodified files are stored as hard links to previous versions.<br />
** '''chunk-based''': only the modified ''parts'' of files are stored at each snapshot.<br />
<br />
{| class="wikitable sortable"<br />
! Name<br />
! Installation<br />
! Implementation<br />
! Control direction<br />
! Compressed storage<br />
! Encrypted storage<br />
! Delta transfer<br />
! Encrypted transfer<br />
! FS metadata<br />
! Easy access<br />
! Resumable<br />
! Handles renames<br />
! Increment type<br />
! CLI<br />
! Other interfaces<br />
! Licence<br />
! Other platforms<br />
! Maintained<br />
! Specificity<br />
|-<br />
| [http://backuppc.sourceforge.net/index.html BackupPC]<br />
| [[BackupPC]]<br />
| Perl<br />
| Pull<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| file-based, hard links [http://backuppc.sourceforge.net/faq/BackupPC.html#Backup-basics]<br />
| {{No}}<br />
| {{G|Web}}<br />
| GPLv2<br />
| Any (no client needed)<br />
| {{Yes}}<br />
| Identical files across backups of the same or different clients are stored only once.<br />
|-<br />
| [http://www.bacula.org Bacula]<br />
| [https://aur.archlinux.org/packages/?K=bacula bacula*] in [[AUR]]<br />
| C++<br />
| Pull<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| file-based [http://burp.grke.org/why.html]<br />
| {{Yes}}<br />
| {{G|GUI, Web}}<br />
| AGPLv3<br />
| Windows, macOS<br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://burp.grke.org burp]<br />
| {{AUR|burp-backup}}<br />
| librsync<br />
| Push<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| chunk-based [http://burp.grke.org/why.html]<br />
| {{Yes}}<br />
| {{G|[https://git.ziirish.me/ziirish/burp-ui burp-ui]}}<br />
| AGPLv3<br />
| Windows<br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://safekeep.sourceforge.net/ SafeKeep]<br />
| {{AUR|safekeep}}<br />
| rdiff-backup<br />
| Pull<br />
| {{No}}<br />
| {{No}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| chunk-based [http://safekeep.sourceforge.net/safekeep.html]<br />
| {{Yes}}<br />
| {{Yes}}<br />
| GPL<br />
| <br />
| {{No}}<br />
| Integrates with [[LVM]] and databases to create consistent backups. Bandwidth throttling.<br />
|-<br />
| [http://www.snebu.com Snebu]<br />
| {{AUR|snebu}}{{Broken package link|{{aur-mirror|snebu}}}}<br />
| C<br />
| Push or Pull<br />
| {{Yes}}<br />
| {{No}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| file-based [http://www.snebu.com/#_concepts]<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv3<br />
| <br />
| style="text-align:center;" | ?<br />
| Supports arbitrary retention schedules.<br />
|-<br />
| [http://www.initzero.it/portal/soluzioni/software-open-source/synbak-universal-backup-system_2623.html Synbak]<br />
| {{Pkg|synbak}}<br />
| Multitool wrapper<br />
| ?<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| ?<br />
| {{No}}<br />
| {{G|Web}}<br />
| GPLv3<br />
| <br />
| {{Yes}}<br />
| Unifies several backup methods.<br />
|-<br />
| [https://www.urbackup.org UrBackup]<br />
| [https://aur.archlinux.org/packages/?K=urbackup urbackup*] in [[AUR]]<br />
| C++<br />
| Pull<br />
| {{No}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Y|Internet transfers only}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| file-based,hard-links and symlinks[http://blog.urbackup.org/156/symbolically-linking-directories-during-incremental-file-backups]/chunk-based CoW-Snapshots[http://blog.urbackup.org/83/file-backup-storage-with-btrfs-snapshots]<br />
| {{Yes}} (client)<br />
| {{G|GUI, Web}}<br />
| AGPLv3+<br />
| Windows, macOS<br />
| {{Yes}}<br />
| Identical files across backups of the same or different clients are stored only once. Integrates with LVM, dattobd and btrfs for file system snapshots.<br />
|}<br />
<br />
== Cloud storage ==<br />
<br />
=== Third-party services ===<br />
<br />
{{Merge|List of applications#File sharing|Remove the extra bullet points: the Wikipedia comparison table, and the respective webpages and Wikipedia articles do a better job at describing them.}}<br />
<br />
See also [[Wikipedia:Comparison of online backup services]] and [[List of applications#Cloud synchronization clients]].<br />
<br />
{{Tip|{{aur|cryptomator}} is an open-source, multi-platform program designed to add client-side transparent encryption on cloud-shared files.}}<br />
<br />
* {{App|Amazon S3|Amazon Simple Storage Service (Amazon S3), provides developers and IT teams with secure, durable, highly-scalable object storage. Amazon S3 is easy to use, with a simple web service interface to store and retrieve any amount of data from anywhere on the web. With Amazon S3, you pay only for the storage you actually use. There is no minimum fee and no setup cost.|http://aws.amazon.com/s3/|{{Pkg|s3cmd}} (high-level operations), {{Pkg|python-boto3}} (low-level API)}}<br />
<br />
* {{App|[[CrashPlan]]|An online/offsite backup solution.<br />
** Unlimited online space for very reasonable pricing.<br />
** Automatic and incremental backups to multiple destinations.<br />
** Intuitive GUI.<br />
** Offers encryption and de-duplication.<br />
** Software is free for local use.<br />
** Restore prevents simultaneous backing up<br />
|http://www.crashplan.com/|{{AUR|crashplan}}}}<br />
<br />
* {{App|[[Dropbox]]|A popular file-sharing service.<br />
** A daemon monitors a specified directory, and uploads incremental changes to dropbox.com. <br />
** Changes automatically show up on your other computers. <br />
** Includes file sharing and a public directory. <br />
** You can recover deleted files. <br />
** Community written add-ons. <br />
** Free accounts have 2GB storage.<br />
|http://www.dropbox.com|{{AUR|dropbox}} {{AUR|nautilus-dropbox}}}}<br />
<br />
* {{App|[[Wikipedia:Google Drive|Google Drive]]|A file storage and synchronization service provided by Google.<br />
** Provides cloud storage, file sharing and collaborative editing.<br />
** Multiple clients are available.<br />
|https://drive.google.com|{{AUR|google-drive-ocamlfuse}} (free), {{AUR|drive}} (free), {{AUR|grive}} (free), {{AUR|gdrivefs}} (free), [[insync]] (non-free)}}, {{AUR|gdrive}} (free), {{AUR|drivesync-git}} (free)<br />
<br />
* {{App|[[Wikipedia:IDrive_Inc.|iDrive]]|Universal Online Backup.<br />
** Multiple Device Backup.<br />
** Online File Sync. <br />
** Real-Time Backup. <br />
** Backup and Access from Mobile Devices. <br />
** Remote Manage. <br />
** No GUI Front end for Linux, command line based. A wrapper script is available to make it easier to use.<br />
|https://www.idrive.com/|}}<br />
<br />
* {{App|[[Wikipedia:Jungle Disk|Jungle Disk]]|An online backup tool that stores its data in Amazon S3 or Rackspace Cloud Files.<br />
** A GNOME Files extension.<br />
** Only paid plans available.<br />
|http://www.jungledisk.com/|}}<br />
<br />
* {{App|[[Wikipedia:Mega (website)|MEGA]]|Successor to the MegaUpload file-sharing service.<br />
** Free accounts are 50GB with paid plans available for more space.<br />
** Offers encryption and de-duplication.<br />
** Usually accessed through its web interface but other tools exist.<br />
|https://mega.co.nz|{{AUR|megatools}}, {{AUR|megasync}}, {{AUR|megafuse-git}}}}<br />
<br />
* {{App|Nutstore|A cloud service that lets you sync and share files anywhere.<br />
** Multiple file folders sync.<br />
** Service for Chinese users.<br />
|http://jianguoyun.com/|{{AUR|nutstore}}}}<br />
<br />
* {{App|OneDrive|Microsoft cloud service.<br />
|https://onedrive.com|{{AUR|onedrive-git}}}}<br />
<br />
* {{App|rsync.net|Cloud storage for offsite backups.<br />
** ZFS filesystem, accessible with any SSH/SFTP/SCP/rsync tool, running on a UNIX system with [http://www.rsync.net/resources/howto/remote_commands.html jailed shell access.]<br />
** Simple rsync synchronization with daily automatic ZFS snapshots.<br />
** Discounted price for {{Pkg|borg}} use: http://rsync.net/products/attic.html<br />
|http://www.rsync.net/|[[rsync]]/[[SSH]], {{Pkg|borg}}}}<br />
<br />
* {{App|[[Wikipedia:SpiderOak|SpiderOak]]|An online backup tool for Windows, Mac and Linux users to back up, share, sync, access and store their data.<br />
** Free account holds 2GB as a 60-day trial.<br />
** Includes file sharing and a public directory.<br />
** Incremental backup and sync are both supported.<br />
|https://spideroak.com/|{{AUR|spideroak-one}}}}<br />
<br />
* {{App|[[Wikipedia:Storage Made Easy|Storage Made Easy]]|Provides unified access to numerous cloud storage services, as well as its own storage.<br />
** Free and paid version available.<br />
** Free account holds 5GB and allows access to up to three other cloud storage providers.<br />
** Supports local directory via fuse, as well as web access.<br />
** Supports many cloud storage services, such as Box, Dropbox, Google Drive, Onedrive, and others.<br />
|http://storagemadeeasy.com/|}}<br />
<br />
* {{App|[[Wikipedia:Tarsnap|Tarsnap]]|A secure online backup service for Linux, BSD, macOS and Windows (through Cygwin).<br />
** Compressed encrypted backups to Amazon S3 Servers.<br />
** Automate via [[cron]].<br />
** Incremental backups.<br />
** Backup any files or directories.<br />
** Command line only client.<br />
** Pay only for usage (bandwidth and storage). <br />
|http://www.tarsnap.com|{{Pkg|tarsnap}}}}<br />
<br />
* {{App|[[Yandex Disk]]|Free cloud storage service created by Yandex.ru that gives you access to your photos, videos and documents from any internet-enabled device.|https://disk.yandex.ru/|{{AUR|yandex-disk}}}}<br />
<br />
==== Multi-service clients ====<br />
<br />
* {{App|[[Déjà Dup]]|A simple GTK+ backup program. It hides the complexity of doing backups the 'right way' (encrypted, off-site, and regular) and uses duplicity as the backend.<br />
** Automatic, timed backup configurable in GUI.<br />
** Restore wizard.<br />
** Integrated into the GNOME Files file manager.<br />
** Inherits several features of duplicity.<br />
|https://launchpad.net/deja-dup|{{Pkg|deja-dup}}}}<br />
<br />
* {{App|Duplicati|Backup client that securely stores encrypted, incremental, compressed backups on cloud storage services and remote file servers. It works with Amazon S3, Windows Live SkyDrive, Google Drive (Google Docs), Rackspace Cloud Files or WebDAV, SSH, FTP (and many more). Duplicati is open source and free.|http://www.duplicati.com/|{{AUR|duplicati-latest}}}}<br />
<br />
* {{App|[[Duplicity]]|A simple command-line utility which allows encrypted compressed incremental backup to nearly any storage.<br />
** Supports gpg encryption and signing.<br />
** Supports gzip compression.<br />
** Supports full or incremental backups, incremental backup stores only difference between new and old file.<br />
** Supports pushing over [http://duplicity.nongnu.org/duplicity.1.html#sect7 many protocols].<br />
|http://www.nongnu.org/duplicity/|{{Pkg|duplicity}}}}<br />
<br />
* {{App|[[Duply]]|Front-end for duplicity which simplifies running it by:<br />
** keeping recurring settings in profiles per backup job;<br />
** automated import/export of keys between profile and keyring;<br />
** enabling batch operations eg. backup_verify_purge;<br />
** executing pre/post scripts;<br />
** precondition checking for flawless duplicity operation.<br />
|http://www.duply.net/|{{AUR|duply}}}}<br />
<br />
* {{App|rclone|Rclone is a command line program to sync files and directories to and from Google Drive, Amazon S3, Openstack Swift / Rackspace cloud files / Memset Memstore, Dropbox, Google Cloud Storage and The local filesystem.|http://rclone.org/|{{Pkg|rclone}}}}<br />
<br />
* {{App|Syncany|Cloud storage and filesharing application with a focus on security and abstraction of storage.|https://www.syncany.org/|{{AUR|syncany}}}}<br />
<br />
=== Custom infrastructure ===<br />
<br />
See [[List of applications/Internet#Cloud storage servers]]<br />
<br />
== Version control systems ==<br />
<br />
{{Merge|List_of_applications#Work_environment|Also drop the extra bullets, the Wikipedia comparison table is much better than this.}}<br />
<br />
These are traditionally used for keeping track of software development; but if you want to have a simple way to manage your config files in one directory, it might be a good solution.<br />
<br />
See also [[Wikipedia:Comparison of revision control software]].<br />
<br />
* {{App|[[Bazaar]]|A distributed version control system that helps you track project history over time and to collaborate easily with others.<br />
** Similar commands to Subversion.<br />
** Supports working with or without a central server.<br />
** Support for working with some other revision control systems<br />
** Complete Unicode support.<br />
|https://bazaar.canonical.com/en/|{{Pkg|bzr}}}}<br />
<br />
* {{App|Darcs|A distributed revision control system that was designed to replace traditional, centralized source control systems such as CVS and Subversion.<br />
** Offline mode.<br />
** Easy branching and merging.<br />
** Written in Haskell.<br />
** Not very fast.<br />
|http://darcs.net/|{{Pkg|darcs}}}}<br />
<br />
* {{App|[[Git]]|A distributed revision control and source code management system with an emphasis on speed.<br />
** Very easy creation, merging, and deletion of branches.<br />
** Nearly all operations are performed locally, giving it a huge speed advantage on centralized systems.<br />
** Has a "staging area" or "index", this is an intermediate area where commits can be formatted and reviewed before completing the commit.<br />
** Does not handle binary files very well.<br />
|https://git-scm.com/|{{Pkg|git}}}}<br />
<br />
* {{App|[[Mercurial]]|A distributed version control system written in Python and similar in many ways to Git.<br />
** Platform independent.<br />
** Support for [http://mercurial.selenic.com/wiki/UsingExtensions extensions].<br />
** A set of commands consistent with Subversion.<br />
** Supports tags.<br />
|https://www.mercurial-scm.org/|{{Pkg|mercurial}}}}<br />
<br />
* {{App|[[Subversion]]|A full-featured centralized version control system originally designed to be a better CVS.<br />
** Renamed/copied/moved/removed files retain full revision history.<br />
** Native support for binary files, with space-efficient binary-diff storage.<br />
** Costs proportional to change size, not to data size.<br />
** Allows arbitrary metadata ("properties") to be attached to any file or directory. <br />
|https://subversion.apache.org/|{{Pkg|subversion}}}}<br />
<br />
== See also ==<br />
<br />
* [[Wikipedia:List of backup software]]<br />
* [[Wikipedia:Comparison of backup software]]<br />
* [https://github.com/restic/others Exhaustive list of backup solutions for Linux]<br />
* [http://www.halfgaar.net/backing-up-unix Backing up Linux and other Unix(-like) systems]<br />
* [http://www.askapache.com/security/mirror-using-rsync-ssh.html Mirroring an Entire Site using Rsync over SSH]<br />
* [http://www.si-journal.org/index.php/JSI/article/view/205 Performance comparison of five remote incremental backup tools: Rsync, Rdiff-backup, Duplicity, Areca and Link-Backup]<br />
* [http://blog.pointsoftware.ch/index.php/howto-local-and-remote-snapshot-backup-using-rsync-with-hard-links/ rsync-snapshot.sh] — Local and remote snapshot backup using rsync with hard links</div>Wzyboyhttps://wiki.archlinux.org/index.php?title=Synchronization_and_backup_programs&diff=512881Synchronization and backup programs2018-03-06T15:56:49Z<p>Wzyboy: /* Third-party services */ S3: s3cmd and boto3</p>
<hr />
<div>[[Category:Data compression and archiving]]<br />
[[Category:System recovery]]<br />
[[de:Backups]]<br />
[[ja:バックアッププログラム]]<br />
[[ru:Backup programs]]<br />
{{Related articles start}}<br />
{{Related|System backup}}<br />
{{Related|Disk cloning}}<br />
{{Related|List of applications#File sharing}}<br />
{{Related|System maintenance#Backup}}<br />
{{Related|Dotfiles#Version control}}<br />
{{Related|File recovery}}<br />
{{Related articles end}}<br />
<br />
This page lists and compares applications that synchronize data between two or more locations, and those that build on top of such functionality to make incremental copies of important data for backup purposes. Because of their relationship, the two groups share several traits that justify describing them in the same article.<br />
<br />
== Backup overview ==<br />
<br />
Having backups of important data is a necessary measure to take, since human and machine processing errors are very likely to generate corruption as time passes, and also the physical media where the data is stored is inevitably destined to fail. In order to choose the best program for one's own needs, the following aspects should be considered:<br />
<br />
* The type of backup medium that is going to store the data, e.g. CD, DVD, remote server, external hard drive, etc.<br />
* The planned frequency of backups, e.g. daily, weekly, monthly, etc.<br />
* The features expected from the backup solution, e.g. compression, encryption, handles renames, etc.<br />
* The planned method to restore backups if needed.<br />
<br />
== Data synchronization ==<br />
<br />
These applications simply keep directories synchronized between multiple locations/machines, in a "mirror" fashion. Nonetheless, most of them still allow storing and reverting to old revisions of modified or deleted files.<br />
<br />
See also [[Wikipedia:Comparison of file synchronization software]].<br />
<br />
'''Legend:'''<br />
<br />
* '''Name''': the application name, linking to the ArchWiki article or the official website.<br />
* '''Installation''': a link to the package.<br />
* '''Implementation''': the programming language, library, or utility that the application is based on.<br />
* '''Delta transfer''': only the modified ''parts'' of files are transferred.<br />
* '''Encrypted transfer''': data is encrypted by default when transferred over the network.<br />
* '''FS metadata''': file system permissions and attributes are synchronized.<br />
* '''Resumable''': the synchronization can be resumed if interrupted.<br />
* '''Handles renames''': moved/renamed files are detected and not stored or transferred twice. It typically means that a checksum of files or its chunks is computed.<br />
* '''Version control''': the old version of files are backed up ('''reverse incremental backup''').<br />
* '''Change propagation''': specifies in how many directions changes can be propagated.<br />
** ''unidirectional'' means one-way synchronization of two locations,<br />
** ''bidirectional'' means two-way synchronization of two locations and<br />
** ''multidirectional'' means full synchronization of more than two locations.<br />
* '''Conflict resolution''': the application handles file conflicts, either automatically or interactively, i.e. it does not silently discard conflicting files. This attribute does not apply to applications that only propagate changes in one direction.<br />
* '''FS monitoring''': the application listens to file system events to trigger the synchronization.<br />
* '''CLI''': the application is command-line driven, i.e. it is scriptable.<br />
* '''Other interfaces''': the application has the specified user interfaces, e.g. GUI, TUI, or web-based.<br />
* '''License''': the license of the server and client applications.<br />
* '''Other platforms''': supported operating systems other than Linux.<br />
* '''Specificity''': brief notes about special features that notably set the application apart from the others.<br />
<br />
{| class="wikitable sortable"<br />
! Name<br />
! Installation<br />
! Implementation<br />
! Delta transfer<br />
! Encrypted transfer<br />
! FS metadata<br />
! Resumable<br />
! Handles renames<br />
! Version control<br />
! Change propagation<br />
! Conflict resolution<br />
! FS monitoring<br />
! CLI<br />
! Other interfaces<br />
! License<br />
! Other platforms<br />
! Maintained<br />
! Specificity<br />
|-<br />
| [[Resilio Sync]]<br />
| {{aur|rslsync}}<br />
| ? (closed source)<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| '''multi'''directional<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{G|Web}}<br />
| Proprietary freemium<br />
| FreeBSD, Windows, macOS, Android, iOS, Windows Phone, Amazon Kindle Fire<br />
| {{Yes}}<br />
| P2P sync<br />
|-<br />
| [https://www.freefilesync.org/ FreeFileSync]<br />
| {{AUR|freefilesync}}<br />
| C++<br />
| style="text-align:center;" | ?<br />
| {{G|SFTP [http://www.freefilesync.org/faq.php#features]}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{G|Yes [http://www.freefilesync.org/faq.php#features]}}<br />
| {{G|1=Yes [http://www.freefilesync.org/manual.php?topic=versioning]}}<br />
|'''uni'''directional / '''multi'''directional<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| GPL<br />
| Windows, macOS<br />
| {{Yes}}<br />
|<br />
|-<br />
| [https://git-annex.branchable.com/ git-annex]<br />
| {{Pkg|git-annex}}<br />
| Haskell, git<br />
| {{G|rsync [http://git-annex.branchable.com/transferring_data/]}}<br />
| {{G|rsync [http://git-annex.branchable.com/transferring_data/]}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| '''multi'''directional; with git remotes [http://git-annex.branchable.com/sync/]<br />
| {{G|renames conflicting files [http://git-annex.branchable.com/automatic_conflict_resolution/]}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{G|[http://git-annex.branchable.com/assistant/ git-annex assistant]}}<br />
| GPLv3<br />
| macOS, Android<br />
| {{Yes}}<br />
| Manage files with git<br />
|-<br />
| [http://www.netpower.fr/osync osync.sh]<br />
| {{AUR|osync}}<br />
| Bash, based on rsync<br />
| {{G|rsync}}<br />
| {{G|rsync}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| '''bi'''directional<br />
| {{G|keeps multiple versions of a file [http://www.netpower.fr/sites/default/files/soft/html-doc/osync_v1.2.html#toc-Subsubsection-1.3.1]}}<br />
| {{G|optional [https://github.com/deajan/osync#daemon-mode]}}<br />
| {{Yes}}<br />
| {{No}}<br />
| BSD<br />
| <br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://www.nongnu.org/rdiff-backup/ rdiff-backup]<br />
| {{Pkg|rdiff-backup}}<br />
| Python 2, librsync<br />
| {{G|rsync}}<br />
| {{G|rsync}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
|colspan="2"| '''uni'''directional<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| GPL<br />
| Win32<br />
| style="text-align:center;" | ?<br />
|<br />
|-<br />
| [[rsync]]<br />
| {{pkg|rsync}}<br />
| C<br />
| {{Yes}}<br />
| {{G|SSH or native protocol}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{G|<br />
* {{ic|--link-dest}} with hard links [http://www.ibm.com/developerworks/aix/library/au-spunix_rsync/index.html#backup]<br />
* {{ic|--backup}}<br />
}}<br />
|colspan="2"| '''uni'''directional<br />
| {{No}}<br />
| {{Yes}}<br />
| {{G|[[Rsync#Front-ends]]}}<br />
| GPLv3<br />
| Win32<br />
| {{Yes}}<br />
| Standard tool present on all Linux distributions.<br />
|-<br />
| [https://sparkleshare.org/ SparkleShare]<br />
| {{Pkg|sparkleshare}}<br />
| C#, git<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| GPLv3<br />
| Windows, macOS<br />
| {{Yes}}<br />
|<br />
|-<br />
| [[Syncthing]]<br />
| {{pkg|syncthing}}<br />
| Go<br />
| {{G|Yes [http://docs.syncthing.net/users/faq.html#is-synchronization-fast]}}<br />
| {{G|Yes [http://docs.syncthing.net/users/security.html]}}<br />
| {{Y|partial [http://docs.syncthing.net/users/faq.html#what-things-are-synced]}}<br />
| {{G|Yes }}<br />
| style="text-align:center;" | ?<br />
| {{G|Yes [http://docs.syncthing.net/users/versioning.html]}}, previous versions moved to archive folder<br />
| '''multi'''directional<br />
| {{G|renames one file [https://docs.syncthing.net/users/faq.html#what-if-there-is-a-conflict]}}<br />
| {{G|Yes}}<br />
| {{Yes}}<br />
| {{G|Web, GTK}}<br />
| MPL v2<br />
| BSD, Windows, macOS, Android, Kindle Paperwhite<br />
| {{Yes}}<br />
| P2P sync<br />
|-<br />
| [http://synkron.sourceforge.net/ Synkron]<br />
| {{AUR|synkron}}<br />
| C++<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| '''multi'''directional<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{G|Qt}}<br />
| GPLv2<br />
| Windows, macOS<br />
| {{R|[https://sourceforge.net/projects/synkron/ No]}}<br />
|<br />
|-<br />
| [[taskd]]<br />
| {{aur|taskd}}<br />
| C++, Python<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| '''multi'''directional<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| MIT<br />
| Android<br />
| {{Yes}}<br />
|<br />
|-<br />
| [[Unison]]<br />
| {{pkg|unison}}<br />
| OCaml<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Y|partial [http://www.cis.upenn.edu/~bcpierce/unison/download/releases/stable/unison-manual.html#perms]}}<br />
| {{G|optional [http://www.cis.upenn.edu/~bcpierce/unison/download/releases/stable/unison-manual.html#speeding]}}<br />
| {{No}}<br />
| {{G|Yes [http://www.cis.upenn.edu/~bcpierce/unison/download/releases/stable/unison-manual.html#backups]}}<br />
| '''bi'''directional<br />
| {{G|interactive}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{G|GTK2}}<br />
| GPL<br />
| FreeBSD, Windows, macOS, Android<br />
| {{G|Yes [http://www.cis.upenn.edu/~bcpierce/unison/status.html]}}<br />
|<br />
|}<br />
<br />
== Incremental backups ==<br />
<br />
Applications that can do incremental backups remember and take into account what data has been backed up during the last run (so-called "diffs") and eliminate the need to have duplicates of unchanged data. Restoring the data to a certain point in time would require locating the last full backup and all the incremental backups from then to the moment when it is supposed to be restored. This sort of backup is useful for those who do it very often.<br />
<br />
See also [[Dotfiles#Version control]].<br />
<br />
'''Legend:'''<br />
<br />
* '''Name''': the application name, linking to the official website.<br />
* '''Installation''': a link to the main ArchWiki article, if existing, or directly to the package pages.<br />
* '''Implementation''': the programming language, library, or utility that the application is based on.<br />
* '''Compressed storage''': compression is used for storage.<br />
* '''Encrypted storage''': encryption is used for storage.<br />
* '''Delta transfer''': only the modified ''parts'' of files are transferred.<br />
* '''Encrypted transfer''': data is encrypted by default when transferred over a network.<br />
* '''FS metadata''': file system permissions and attributes are backed up.<br />
* '''Easy access''': the backup is stored plainly in the file system, or is mountable as such.<br />
* '''Resumable''': the backup can be resumed without restarting it if interrupted.<br />
* '''Handles renames''': moved/renamed files are detected and not stored or transferred twice; it typically means that a checksum is computed for files or chunks thereof.<br />
* '''CLI''': the application is command-line driven, i.e. it is scriptable.<br />
* '''Other interfaces''': the application has the specified user interfaces, e.g. GUI, TUI, or web-based.<br />
* '''Licence''': the licence of the server and client applications.<br />
* '''Other platforms''': supported operating systems other than Linux.<br />
* '''Specificity''': brief notes about special features that notably set the application apart from the others.<br />
<br />
=== Single machine ===<br />
<br />
These applications are aimed at backing up data from the machine they are installed on, although the backup destination can be located on an external machine or storage media.<br />
<br />
==== Chunk-based increments ====<br />
<br />
If a file is modified, these applications store only its changed ''parts'' at the next snapshot. Compared to [[#File-based increments]] applications, these are more space-efficient, especially when large files receive small modifications; on the other hand, the archived snapshots have to be opened with the backup application that created them, since the files have to be reconstructed from the stored binary diffs.<br />
<br />
{| class="wikitable sortable"<br />
! Name<br />
! Installation<br />
! Implementation<br />
! Compressed storage<br />
! Encrypted storage<br />
! Delta transfer<br />
! Encrypted transfer<br />
! FS metadata<br />
! Easy access<br />
! Resumable<br />
! Handles renames<br />
! CLI<br />
! Other interfaces<br />
! Licence<br />
! Other platforms<br />
! Maintained<br />
! Specificity<br />
|-<br />
| [http://areca.sourceforge.net/ Areca Backup]<br />
| {{AUR|areca}}<br />
| Java<br />
| {{G|Zip, Zip64}}<br />
| {{G|AES128, AES256}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Y|Pausing only}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| GPLv2<br />
| Windows<br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://borgbackup.readthedocs.org/en/stable/ BorgBackup]<br />
| {{Pkg|borg}}<br />
| Python, C (Cython)<br />
| {{G|lz4, zlib, lzma, zstd}}<br />
| {{G|AES256}}<br />
| {{Yes}}<br />
| {{G|SSH}}<br />
| {{Yes}}[http://borgbackup.readthedocs.org/en/stable/faq.html#which-file-types-attributes-etc-are-preserved]<br />
| {{Yes}}[http://borgbackup.readthedocs.org/en/stable/usage.html#borg-mount]<br />
| {{Yes}}[http://borgbackup.readthedocs.org/en/stable/faq.html#if-a-backup-stops-mid-way-does-the-already-backed-up-data-stay-there]<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{G|third party}}<br />
| BSD<br />
| *BSD, macOS<br />
| {{Yes}} (Attic fork)<br />
| Deduplication based on variable length chunks; support both local and SSH-based remote backup destination<br />
|-<br />
| [http://viric.name/cgi-bin/btar btar]<br />
| {{AUR|btar}}{{Broken package link|{{aur-mirror|btar}}}}<br />
| C<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv3<br />
| <br />
| {{Yes}}<br />
| Redundancy, indexed extraction, multicore compression, input and output serialisation, tolerance to partial archive errors. <br />
|-<br />
| [https://bup.github.io/ bup]<br />
| {{Pkg|bup}} {{AUR|bup-git}}<br />
| C, Python, git<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{G|Immature}}<br />
| {{Yes}}[https://bup.github.io/man/bup-fuse.html]<br />
| {{G|pick up where you left off [https://github.com/bup/bup/blob/master/README.md#reasons-bup-is-awesome]}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{G|third party}}<br />
| GPLv2<br />
| NetBSD, Windows, macOS<br />
| {{Yes}}<br />
| Same storage format as git<br />
|-<br />
| [https://github.com/emersion/bups bups]<br />
| {{AUR|bups}}<br />
| bup frontend<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{G|Immature}}<br />
| {{Yes}}<br />
| {{G|pick up where you left off [https://github.com/bup/bup/blob/master/README.md#reasons-bup-is-awesome]}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{G|GTK 3}}<br />
| MIT<br />
|<br />
| {{Yes}}<br />
|<br />
|-<br />
| [https://launchpad.net/deja-dup Déjà Dup]<br />
| [[Déjà Dup]]<br />
| duplicity front-end<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{G|GTK+}}<br />
| GPLv3<br />
| <br />
| {{Yes}}<br />
| Integrated into [[GNOME Files]].<br />
|-<br />
| [http://www.duplicati.com/ Duplicati]<br />
| {{AUR|duplicati-latest}}<br />
| C#<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{R|scheduled for 2.0 release}}<br />
| {{No}}<br />
| {{Y|Pausing only}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| LGPL<br />
| Windows<br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://www.nongnu.org/duplicity/ Duplicity]<br />
| [[Duplicity]]<br />
| librsync<br />
| {{G|gzip}}<br />
| {{G|gpg}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{G|Déjà Dup}}<br />
| GPL<br />
| <br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://www.duply.net/ Duply]<br />
| [[Duply]]<br />
| duplicity front-end<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv2<br />
| <br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://kde-apps.org/content/show.php/Kup+Backup+System?content=147465 Kup Backup System]<br />
| {{Pkg|kup}}<br />
| rsync, bup front-end<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{G|Immature}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Y|bup}}<br />
| {{G|Qt}}<br />
| GPLv2<br />
| <br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://liw.fi/obnam/ obnam]<br />
| {{AUR|obnam}}<br />
| Python<br />
| {{Yes}}<br />
| {{G|GnuPG}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{G|checkpoints every 100MB}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv3<br />
| <br />
| {{No}}<br />
| <br />
|-<br />
| [https://restic.github.io/ restic]<br />
| {{AUR|restic}} {{AUR|restic-git}}<br />
| Go<br />
| {{No}} [https://github.com/restic/restic/issues/21]<br />
| {{G|AES-256}} [https://github.com/restic/restic/blob/master/doc/Design.md]<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}[https://restic.readthedocs.io/en/stable/manual.html#mount-a-repository]<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| BSD<br />
| <br />
| {{Yes}}<br />
| <br />
|-<br />
| [http://zbackup.org/ ZBackup]<br />
| {{AUR|zbackup}}<br />
| C++<br />
| {{G|LZMA, LZO}}<br />
| {{G|AES}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{R|planned [https://github.com/zbackup/zbackup#improvements]}}<br />
| {{No}}<br />
| {{Y|Kinda through tar}}<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv2<br />
| <br />
| {{Yes}}<br />
| Repository consists of immutable files.<br />
|}<br />
<br />
==== File-based increments ====<br />
<br />
If a file is modified, these applications store its new version entirely at the next snapshot. Compared to [[#Chunk-based increments]] applications, these are less space-efficient, especially when large files receive small modifications; on the other hand, often the archived snapshots can be opened without the need to have the backup application installed.<br />
<br />
'''Specific legend:'''<br />
<br />
* '''Hard links''': whether unmodified files are stored as hard links to previous versions.<br />
<br />
{| class="wikitable sortable"<br />
! Name<br />
! Installation<br />
! Implementation<br />
! Compressed storage<br />
! Encrypted storage<br />
! Delta transfer<br />
! Encrypted transfer<br />
! FS metadata<br />
! Easy access<br />
! Resumable<br />
! Handles renames<br />
! Hard links<br />
! CLI<br />
! Other interfaces<br />
! Licence<br />
! Other platforms<br />
! Maintained<br />
! Specificity<br />
|-<br />
| [https://github.com/bit-team/backintime Back In Time]<br />
| [[Back In Time]]<br />
| Python, rsync, diff<br />
| {{No}}<br />
| {{No}}<br />
| {{G|rsync}}<br />
| {{G|rsync}}<br />
| {{G|rsync}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{No}}<br />
| {{G|Yes [http://backintime.le-web.org/documentation/]}}<br />
| {{Yes}}<br />
| {{G|Qt}}<br />
| GPLv2<br />
| <br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://dar.linux.free.fr/ DAR] (Disk ARchive)<br />
| {{AUR|dar}}<br />
| C++<br />
| {{G|special archive format}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{R|No [http://dar.linux.free.fr/doc/Features.html]}}<br />
| {{Yes}}<br />
| {{G|DarGUI}}<br />
| GPL<br />
| FreeBSD, NetBSD, Windows, macOS<br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://dargui.sourceforge.net/ DarGUI]<br />
| {{AUR|dargui}}<br />
| DAR front-end<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{R|No [http://dar.linux.free.fr/doc/Features.html]}}<br />
| {{No}}<br />
| {{G|GTK}}<br />
| GPL<br />
| Windows<br />
| style="text-align:center;" | ?<br />
|<br />
|-<br />
| [http://miek.nl/projects/hdup2/ hdup]{{Dead link|2016|07|11}}<br />
| {{Aur|hdup}}<br />
| C<br />
| {{G|bzip, gzip, lzop}}<br />
| {{G|gpg}}<br />
| style="text-align:center;" | ?<br />
| {{G|SSH}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{No}}<br />
| {{No}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv2<br />
|<br />
| {{No}}<br />
| Multiple backup targets.<br />
|-<br />
| [http://www.scottlu.com/Content/Link-Backup.html Link-Backup]<br />
| {{AUR|link-backup}}<br />
| Python<br />
| {{No}}<br />
| {{No}}<br />
| style="text-align:center;" | ?<br />
| {{G|SSH}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{R|No [http://www.scottlu.com/Content/Link-Backup.html]}}<br />
| {{Yes}}<br />
| {{No}}<br />
| MIT<br />
| <br />
| {{No}}<br />
| It copies itself to the server.<br />
|-<br />
| [https://github.com/miekg/rdup rdup]<br />
| {{AUR|rdup}}<br />
| C<br />
| {{G|tar.gz}}<br />
| {{G|gpg, blowfish and others}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv3<br />
| <br />
| {{No}}<br />
| Set of command-line tools.<br />
|-<br />
| [http://www.rsnapshot.org/ rsnapshot]<br />
| [[rsnapshot]]<br />
| rsync<br />
| {{No}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{G|Yes [http://rsnapshot.org/rsnapshot/docs/docbook/rest.html]}}<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv2<br />
| Win32<br />
| {{Yes}}<br />
| <br />
|-<br />
| [https://launchpad.net/sbackup sbackup]<br />
| {{AUR|sbackup}}<br />
| Python<br />
| {{G|gzip, bzip2}}<br />
| {{No}}<br />
| style="text-align:center;" | ?<br />
| {{G|SSH}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{No}}<br />
| {{No}}<br />
| {{No}}<br />
| {{No}}<br />
| {{G|GTK}}<br />
| GPLv3<br />
| <br />
| {{Yes}}<br />
|<br />
|-<br />
| [https://github.com/teejee2008/timeshift TimeShift]<br />
| {{AUR|timeshift}}<br />
| rsync<br />
| {{No}}<br />
| {{No}}<br />
| {{G|rsync}}<br />
| {{G|rsync}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{No}}<br />
| {{G|GTK}}<br />
| GPLv3<br />
| Designed for full-system backups to dedicated devices.<br />
| {{Yes}}<br />
|<br />
|}<br />
<br />
=== Network oriented ===<br />
<br />
These applications have been designed to centralize the backup of several machines connected to a network, through a server-client model. In general they are more complicated to deploy, compared to [[#Single machine]] solutions.<br />
<br />
'''Specific legend:'''<br />
<br />
* '''Control direction''': Pull: server logs into client. Push: client initiates backup session.<br />
* '''Increment type''': the strategy used to reduce used space by deduplicating data (i.e., besides compression).<br />
** '''file-based''': if a file is modified, the entire new version is stored at each snapshot.<br />
*** '''hard-links''': whether unmodified files are stored as hard links to previous versions.<br />
** '''chunk-based''': only the modified ''parts'' of files are stored at each snapshot.<br />
<br />
{| class="wikitable sortable"<br />
! Name<br />
! Installation<br />
! Implementation<br />
! Control direction<br />
! Compressed storage<br />
! Encrypted storage<br />
! Delta transfer<br />
! Encrypted transfer<br />
! FS metadata<br />
! Easy access<br />
! Resumable<br />
! Handles renames<br />
! Increment type<br />
! CLI<br />
! Other interfaces<br />
! Licence<br />
! Other platforms<br />
! Maintained<br />
! Specificity<br />
|-<br />
| [http://backuppc.sourceforge.net/index.html BackupPC]<br />
| [[BackupPC]]<br />
| Perl<br />
| Pull<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| file-based, hard links [http://backuppc.sourceforge.net/faq/BackupPC.html#Backup-basics]<br />
| {{No}}<br />
| {{G|Web}}<br />
| GPLv2<br />
| Any (no client needed)<br />
| {{Yes}}<br />
| Identical files across backups of the same or different clients are stored only once.<br />
|-<br />
| [http://www.bacula.org Bacula]<br />
| [https://aur.archlinux.org/packages/?K=bacula bacula*] in [[AUR]]<br />
| C++<br />
| Pull<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| file-based [http://burp.grke.org/why.html]<br />
| {{Yes}}<br />
| {{G|GUI, Web}}<br />
| AGPLv3<br />
| Windows, macOS<br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://burp.grke.org burp]<br />
| {{AUR|burp-backup}}<br />
| librsync<br />
| Push<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| chunk-based [http://burp.grke.org/why.html]<br />
| {{Yes}}<br />
| {{G|[https://git.ziirish.me/ziirish/burp-ui burp-ui]}}<br />
| AGPLv3<br />
| Windows<br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://safekeep.sourceforge.net/ SafeKeep]<br />
| {{AUR|safekeep}}<br />
| rdiff-backup<br />
| Pull<br />
| {{No}}<br />
| {{No}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| chunk-based [http://safekeep.sourceforge.net/safekeep.html]<br />
| {{Yes}}<br />
| {{Yes}}<br />
| GPL<br />
| <br />
| {{No}}<br />
| Integrates with [[LVM]] and databases to create consistent backups. Bandwidth throttling.<br />
|-<br />
| [http://www.snebu.com Snebu]<br />
| {{AUR|snebu}}{{Broken package link|{{aur-mirror|snebu}}}}<br />
| C<br />
| Push or Pull<br />
| {{Yes}}<br />
| {{No}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| file-based [http://www.snebu.com/#_concepts]<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv3<br />
| <br />
| style="text-align:center;" | ?<br />
| Supports arbitrary retention schedules.<br />
|-<br />
| [http://www.initzero.it/portal/soluzioni/software-open-source/synbak-universal-backup-system_2623.html Synbak]<br />
| {{Pkg|synbak}}<br />
| Multitool wrapper<br />
| ?<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| ?<br />
| {{No}}<br />
| {{G|Web}}<br />
| GPLv3<br />
| <br />
| {{Yes}}<br />
| Unifies several backup methods.<br />
|-<br />
| [https://www.urbackup.org UrBackup]<br />
| [https://aur.archlinux.org/packages/?K=urbackup urbackup*] in [[AUR]]<br />
| C++<br />
| Pull<br />
| {{No}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Y|Internet transfers only}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| file-based,hard-links and symlinks[http://blog.urbackup.org/156/symbolically-linking-directories-during-incremental-file-backups]/chunk-based CoW-Snapshots[http://blog.urbackup.org/83/file-backup-storage-with-btrfs-snapshots]<br />
| {{Yes}} (client)<br />
| {{G|GUI, Web}}<br />
| AGPLv3+<br />
| Windows, macOS<br />
| {{Yes}}<br />
| Identical files across backups of the same or different clients are stored only once. Integrates with LVM, dattobd and btrfs for file system snapshots.<br />
|}<br />
<br />
== Cloud storage ==<br />
<br />
=== Third-party services ===<br />
<br />
{{Merge|List of applications#File sharing|Remove the extra bullet points: the Wikipedia comparison table, and the respective webpages and Wikipedia articles do a better job at describing them.}}<br />
<br />
See also [[Wikipedia:Comparison of online backup services]] and [[List of applications#Cloud synchronization clients]].<br />
<br />
{{Tip|{{aur|cryptomator}} is an open-source, multi-platform program designed to add client-side transparent encryption on cloud-shared files.}}<br />
<br />
* {{App|Amazon S3|Amazon Simple Storage Service (Amazon S3), provides developers and IT teams with secure, durable, highly-scalable object storage. Amazon S3 is easy to use, with a simple web service interface to store and retrieve any amount of data from anywhere on the web. With Amazon S3, you pay only for the storage you actually use. There is no minimum fee and no setup cost.|http://aws.amazon.com/s3/|{{Pkg|s3cmd}} (high-level operations), {{Pkg|python-boto3}} (low-level API)}}<br />
<br />
* {{App|[[CrashPlan]]|An online/offsite backup solution.<br />
** Unlimited online space for very reasonable pricing.<br />
** Automatic and incremental backups to multiple destinations.<br />
** Intuitive GUI.<br />
** Offers encryption and de-duplication.<br />
** Software is free for local use.<br />
** Restore prevents simultaneous backing up<br />
|http://www.crashplan.com/|{{AUR|crashplan}}}}<br />
<br />
* {{App|[[Dropbox]]|A popular file-sharing service.<br />
** A daemon monitors a specified directory, and uploads incremental changes to dropbox.com. <br />
** Changes automatically show up on your other computers. <br />
** Includes file sharing and a public directory. <br />
** You can recover deleted files. <br />
** Community written add-ons. <br />
** Free accounts have 2GB storage.<br />
|http://www.dropbox.com|{{AUR|dropbox}} {{AUR|nautilus-dropbox}}}}<br />
<br />
* {{App|[[Wikipedia:Google Drive|Google Drive]]|A file storage and synchronization service provided by Google.<br />
** Provides cloud storage, file sharing and collaborative editing.<br />
** Multiple clients are available.<br />
|https://drive.google.com|{{AUR|google-drive-ocamlfuse}} (free), {{AUR|drive}} (free), {{AUR|grive}} (free), {{AUR|gdrivefs}} (free), [[insync]] (non-free)}}, {{AUR|gdrive}} (free), {{AUR|drivesync-git}} (free)<br />
<br />
* {{App|[[Wikipedia:IDrive_Inc.|iDrive]]|Universal Online Backup.<br />
** Multiple Device Backup.<br />
** Online File Sync. <br />
** Real-Time Backup. <br />
** Backup and Access from Mobile Devices. <br />
** Remote Manage. <br />
** No GUI Front end for Linux, command line based. A wrapper script is available to make it easier to use.<br />
|https://www.idrive.com/|}}<br />
<br />
* {{App|[[Wikipedia:Jungle Disk|Jungle Disk]]|An online backup tool that stores its data in Amazon S3 or Rackspace Cloud Files.<br />
** A GNOME Files extension.<br />
** Only paid plans available.<br />
|http://www.jungledisk.com/|}}<br />
<br />
* {{App|[[Wikipedia:Mega (website)|MEGA]]|Successor to the MegaUpload file-sharing service.<br />
** Free accounts are 50GB with paid plans available for more space.<br />
** Offers encryption and de-duplication.<br />
** Usually accessed through its web interface but other tools exist.<br />
|https://mega.co.nz|{{AUR|megatools}}, {{AUR|megasync}}, {{AUR|megafuse-git}}}}<br />
<br />
* {{App|Nutstore|A cloud service that lets you sync and share files anywhere.<br />
** Multiple file folders sync.<br />
** Service for Chinese users.<br />
|http://jianguoyun.com/|{{AUR|nutstore}}}}<br />
<br />
* {{App|OneDrive|Microsoft cloud service.<br />
|https://onedrive.com|{{AUR|onedrive-git}}}}<br />
<br />
* {{App|rsync.net|Cloud storage for offsite backups.<br />
** ZFS filesystem, accessible with any SSH/SFTP/SCP tool, running on a UNIX system.<br />
** Simple rsync synchronization with daily automatic ZFS snapshots.<br />
|http://www.rsync.net/|[[rsync]]/[[SSH]], {{Pkg|borg}}}}<br />
<br />
* {{App|[[Wikipedia:SpiderOak|SpiderOak]]|An online backup tool for Windows, Mac and Linux users to back up, share, sync, access and store their data.<br />
** Free account holds 2GB as a 60-day trial.<br />
** Includes file sharing and a public directory.<br />
** Incremental backup and sync are both supported.<br />
|https://spideroak.com/|{{AUR|spideroak-one}}}}<br />
<br />
* {{App|[[Wikipedia:Storage Made Easy|Storage Made Easy]]|Provides unified access to numerous cloud storage services, as well as its own storage.<br />
** Free and paid version available.<br />
** Free account holds 5GB and allows access to up to three other cloud storage providers.<br />
** Supports local directory via fuse, as well as web access.<br />
** Supports many cloud storage services, such as Box, Dropbox, Google Drive, Onedrive, and others.<br />
|http://storagemadeeasy.com/|}}<br />
<br />
* {{App|[[Wikipedia:Tarsnap|Tarsnap]]|A secure online backup service for Linux, BSD, macOS and Windows (through Cygwin).<br />
** Compressed encrypted backups to Amazon S3 Servers.<br />
** Automate via [[cron]].<br />
** Incremental backups.<br />
** Backup any files or directories.<br />
** Command line only client.<br />
** Pay only for usage (bandwidth and storage). <br />
|http://www.tarsnap.com|{{Pkg|tarsnap}}}}<br />
<br />
* {{App|[[Yandex Disk]]|Free cloud storage service created by Yandex.ru that gives you access to your photos, videos and documents from any internet-enabled device.|https://disk.yandex.ru/|{{AUR|yandex-disk}}}}<br />
<br />
==== Multi-service clients ====<br />
<br />
* {{App|[[Déjà Dup]]|A simple GTK+ backup program. It hides the complexity of doing backups the 'right way' (encrypted, off-site, and regular) and uses duplicity as the backend.<br />
** Automatic, timed backup configurable in GUI.<br />
** Restore wizard.<br />
** Integrated into the GNOME Files file manager.<br />
** Inherits several features of duplicity.<br />
|https://launchpad.net/deja-dup|{{Pkg|deja-dup}}}}<br />
<br />
* {{App|Duplicati|Backup client that securely stores encrypted, incremental, compressed backups on cloud storage services and remote file servers. It works with Amazon S3, Windows Live SkyDrive, Google Drive (Google Docs), Rackspace Cloud Files or WebDAV, SSH, FTP (and many more). Duplicati is open source and free.|http://www.duplicati.com/|{{AUR|duplicati-latest}}}}<br />
<br />
* {{App|[[Duplicity]]|A simple command-line utility which allows encrypted compressed incremental backup to nearly any storage.<br />
** Supports gpg encryption and signing.<br />
** Supports gzip compression.<br />
** Supports full or incremental backups, incremental backup stores only difference between new and old file.<br />
** Supports pushing over [http://duplicity.nongnu.org/duplicity.1.html#sect7 many protocols].<br />
|http://www.nongnu.org/duplicity/|{{Pkg|duplicity}}}}<br />
<br />
* {{App|[[Duply]]|Front-end for duplicity which simplifies running it by:<br />
** keeping recurring settings in profiles per backup job;<br />
** automated import/export of keys between profile and keyring;<br />
** enabling batch operations eg. backup_verify_purge;<br />
** executing pre/post scripts;<br />
** precondition checking for flawless duplicity operation.<br />
|http://www.duply.net/|{{AUR|duply}}}}<br />
<br />
* {{App|rclone|Rclone is a command line program to sync files and directories to and from Google Drive, Amazon S3, Openstack Swift / Rackspace cloud files / Memset Memstore, Dropbox, Google Cloud Storage and The local filesystem.|http://rclone.org/|{{Pkg|rclone}}}}<br />
<br />
* {{App|Syncany|Cloud storage and filesharing application with a focus on security and abstraction of storage.|https://www.syncany.org/|{{AUR|syncany}}}}<br />
<br />
=== Custom infrastructure ===<br />
<br />
See [[List of applications/Internet#Cloud storage servers]]<br />
<br />
== Version control systems ==<br />
<br />
{{Merge|List_of_applications#Work_environment|Also drop the extra bullets, the Wikipedia comparison table is much better than this.}}<br />
<br />
These are traditionally used for keeping track of software development; but if you want to have a simple way to manage your config files in one directory, it might be a good solution.<br />
<br />
See also [[Wikipedia:Comparison of revision control software]].<br />
<br />
* {{App|[[Bazaar]]|A distributed version control system that helps you track project history over time and to collaborate easily with others.<br />
** Similar commands to Subversion.<br />
** Supports working with or without a central server.<br />
** Support for working with some other revision control systems<br />
** Complete Unicode support.<br />
|https://bazaar.canonical.com/en/|{{Pkg|bzr}}}}<br />
<br />
* {{App|Darcs|A distributed revision control system that was designed to replace traditional, centralized source control systems such as CVS and Subversion.<br />
** Offline mode.<br />
** Easy branching and merging.<br />
** Written in Haskell.<br />
** Not very fast.<br />
|http://darcs.net/|{{Pkg|darcs}}}}<br />
<br />
* {{App|[[Git]]|A distributed revision control and source code management system with an emphasis on speed.<br />
** Very easy creation, merging, and deletion of branches.<br />
** Nearly all operations are performed locally, giving it a huge speed advantage on centralized systems.<br />
** Has a "staging area" or "index", this is an intermediate area where commits can be formatted and reviewed before completing the commit.<br />
** Does not handle binary files very well.<br />
|https://git-scm.com/|{{Pkg|git}}}}<br />
<br />
* {{App|[[Mercurial]]|A distributed version control system written in Python and similar in many ways to Git.<br />
** Platform independent.<br />
** Support for [http://mercurial.selenic.com/wiki/UsingExtensions extensions].<br />
** A set of commands consistent with Subversion.<br />
** Supports tags.<br />
|https://www.mercurial-scm.org/|{{Pkg|mercurial}}}}<br />
<br />
* {{App|[[Subversion]]|A full-featured centralized version control system originally designed to be a better CVS.<br />
** Renamed/copied/moved/removed files retain full revision history.<br />
** Native support for binary files, with space-efficient binary-diff storage.<br />
** Costs proportional to change size, not to data size.<br />
** Allows arbitrary metadata ("properties") to be attached to any file or directory. <br />
|https://subversion.apache.org/|{{Pkg|subversion}}}}<br />
<br />
== See also ==<br />
<br />
* [[Wikipedia:List of backup software]]<br />
* [[Wikipedia:Comparison of backup software]]<br />
* [https://github.com/restic/others Exhaustive list of backup solutions for Linux]<br />
* [http://www.halfgaar.net/backing-up-unix Backing up Linux and other Unix(-like) systems]<br />
* [http://www.askapache.com/security/mirror-using-rsync-ssh.html Mirroring an Entire Site using Rsync over SSH]<br />
* [http://www.si-journal.org/index.php/JSI/article/view/205 Performance comparison of five remote incremental backup tools: Rsync, Rdiff-backup, Duplicity, Areca and Link-Backup]<br />
* [http://blog.pointsoftware.ch/index.php/howto-local-and-remote-snapshot-backup-using-rsync-with-hard-links/ rsync-snapshot.sh] — Local and remote snapshot backup using rsync with hard links</div>Wzyboyhttps://wiki.archlinux.org/index.php?title=Synchronization_and_backup_programs&diff=512880Synchronization and backup programs2018-03-06T15:53:56Z<p>Wzyboy: /* Chunk-based increments */ borg also supports remote backup</p>
<hr />
<div>[[Category:Data compression and archiving]]<br />
[[Category:System recovery]]<br />
[[de:Backups]]<br />
[[ja:バックアッププログラム]]<br />
[[ru:Backup programs]]<br />
{{Related articles start}}<br />
{{Related|System backup}}<br />
{{Related|Disk cloning}}<br />
{{Related|List of applications#File sharing}}<br />
{{Related|System maintenance#Backup}}<br />
{{Related|Dotfiles#Version control}}<br />
{{Related|File recovery}}<br />
{{Related articles end}}<br />
<br />
This page lists and compares applications that synchronize data between two or more locations, and those that build on top of such functionality to make incremental copies of important data for backup purposes. Because of their relationship, the two groups share several traits that justify describing them in the same article.<br />
<br />
== Backup overview ==<br />
<br />
Having backups of important data is a necessary measure to take, since human and machine processing errors are very likely to generate corruption as time passes, and also the physical media where the data is stored is inevitably destined to fail. In order to choose the best program for one's own needs, the following aspects should be considered:<br />
<br />
* The type of backup medium that is going to store the data, e.g. CD, DVD, remote server, external hard drive, etc.<br />
* The planned frequency of backups, e.g. daily, weekly, monthly, etc.<br />
* The features expected from the backup solution, e.g. compression, encryption, handles renames, etc.<br />
* The planned method to restore backups if needed.<br />
<br />
== Data synchronization ==<br />
<br />
These applications simply keep directories synchronized between multiple locations/machines, in a "mirror" fashion. Nonetheless, most of them still allow storing and reverting to old revisions of modified or deleted files.<br />
<br />
See also [[Wikipedia:Comparison of file synchronization software]].<br />
<br />
'''Legend:'''<br />
<br />
* '''Name''': the application name, linking to the ArchWiki article or the official website.<br />
* '''Installation''': a link to the package.<br />
* '''Implementation''': the programming language, library, or utility that the application is based on.<br />
* '''Delta transfer''': only the modified ''parts'' of files are transferred.<br />
* '''Encrypted transfer''': data is encrypted by default when transferred over the network.<br />
* '''FS metadata''': file system permissions and attributes are synchronized.<br />
* '''Resumable''': the synchronization can be resumed if interrupted.<br />
* '''Handles renames''': moved/renamed files are detected and not stored or transferred twice. It typically means that a checksum of files or its chunks is computed.<br />
* '''Version control''': the old version of files are backed up ('''reverse incremental backup''').<br />
* '''Change propagation''': specifies in how many directions changes can be propagated.<br />
** ''unidirectional'' means one-way synchronization of two locations,<br />
** ''bidirectional'' means two-way synchronization of two locations and<br />
** ''multidirectional'' means full synchronization of more than two locations.<br />
* '''Conflict resolution''': the application handles file conflicts, either automatically or interactively, i.e. it does not silently discard conflicting files. This attribute does not apply to applications that only propagate changes in one direction.<br />
* '''FS monitoring''': the application listens to file system events to trigger the synchronization.<br />
* '''CLI''': the application is command-line driven, i.e. it is scriptable.<br />
* '''Other interfaces''': the application has the specified user interfaces, e.g. GUI, TUI, or web-based.<br />
* '''License''': the license of the server and client applications.<br />
* '''Other platforms''': supported operating systems other than Linux.<br />
* '''Specificity''': brief notes about special features that notably set the application apart from the others.<br />
<br />
{| class="wikitable sortable"<br />
! Name<br />
! Installation<br />
! Implementation<br />
! Delta transfer<br />
! Encrypted transfer<br />
! FS metadata<br />
! Resumable<br />
! Handles renames<br />
! Version control<br />
! Change propagation<br />
! Conflict resolution<br />
! FS monitoring<br />
! CLI<br />
! Other interfaces<br />
! License<br />
! Other platforms<br />
! Maintained<br />
! Specificity<br />
|-<br />
| [[Resilio Sync]]<br />
| {{aur|rslsync}}<br />
| ? (closed source)<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| '''multi'''directional<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{G|Web}}<br />
| Proprietary freemium<br />
| FreeBSD, Windows, macOS, Android, iOS, Windows Phone, Amazon Kindle Fire<br />
| {{Yes}}<br />
| P2P sync<br />
|-<br />
| [https://www.freefilesync.org/ FreeFileSync]<br />
| {{AUR|freefilesync}}<br />
| C++<br />
| style="text-align:center;" | ?<br />
| {{G|SFTP [http://www.freefilesync.org/faq.php#features]}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{G|Yes [http://www.freefilesync.org/faq.php#features]}}<br />
| {{G|1=Yes [http://www.freefilesync.org/manual.php?topic=versioning]}}<br />
|'''uni'''directional / '''multi'''directional<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| GPL<br />
| Windows, macOS<br />
| {{Yes}}<br />
|<br />
|-<br />
| [https://git-annex.branchable.com/ git-annex]<br />
| {{Pkg|git-annex}}<br />
| Haskell, git<br />
| {{G|rsync [http://git-annex.branchable.com/transferring_data/]}}<br />
| {{G|rsync [http://git-annex.branchable.com/transferring_data/]}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| '''multi'''directional; with git remotes [http://git-annex.branchable.com/sync/]<br />
| {{G|renames conflicting files [http://git-annex.branchable.com/automatic_conflict_resolution/]}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{G|[http://git-annex.branchable.com/assistant/ git-annex assistant]}}<br />
| GPLv3<br />
| macOS, Android<br />
| {{Yes}}<br />
| Manage files with git<br />
|-<br />
| [http://www.netpower.fr/osync osync.sh]<br />
| {{AUR|osync}}<br />
| Bash, based on rsync<br />
| {{G|rsync}}<br />
| {{G|rsync}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| '''bi'''directional<br />
| {{G|keeps multiple versions of a file [http://www.netpower.fr/sites/default/files/soft/html-doc/osync_v1.2.html#toc-Subsubsection-1.3.1]}}<br />
| {{G|optional [https://github.com/deajan/osync#daemon-mode]}}<br />
| {{Yes}}<br />
| {{No}}<br />
| BSD<br />
| <br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://www.nongnu.org/rdiff-backup/ rdiff-backup]<br />
| {{Pkg|rdiff-backup}}<br />
| Python 2, librsync<br />
| {{G|rsync}}<br />
| {{G|rsync}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
|colspan="2"| '''uni'''directional<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| GPL<br />
| Win32<br />
| style="text-align:center;" | ?<br />
|<br />
|-<br />
| [[rsync]]<br />
| {{pkg|rsync}}<br />
| C<br />
| {{Yes}}<br />
| {{G|SSH or native protocol}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{G|<br />
* {{ic|--link-dest}} with hard links [http://www.ibm.com/developerworks/aix/library/au-spunix_rsync/index.html#backup]<br />
* {{ic|--backup}}<br />
}}<br />
|colspan="2"| '''uni'''directional<br />
| {{No}}<br />
| {{Yes}}<br />
| {{G|[[Rsync#Front-ends]]}}<br />
| GPLv3<br />
| Win32<br />
| {{Yes}}<br />
| Standard tool present on all Linux distributions.<br />
|-<br />
| [https://sparkleshare.org/ SparkleShare]<br />
| {{Pkg|sparkleshare}}<br />
| C#, git<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| GPLv3<br />
| Windows, macOS<br />
| {{Yes}}<br />
|<br />
|-<br />
| [[Syncthing]]<br />
| {{pkg|syncthing}}<br />
| Go<br />
| {{G|Yes [http://docs.syncthing.net/users/faq.html#is-synchronization-fast]}}<br />
| {{G|Yes [http://docs.syncthing.net/users/security.html]}}<br />
| {{Y|partial [http://docs.syncthing.net/users/faq.html#what-things-are-synced]}}<br />
| {{G|Yes }}<br />
| style="text-align:center;" | ?<br />
| {{G|Yes [http://docs.syncthing.net/users/versioning.html]}}, previous versions moved to archive folder<br />
| '''multi'''directional<br />
| {{G|renames one file [https://docs.syncthing.net/users/faq.html#what-if-there-is-a-conflict]}}<br />
| {{G|Yes}}<br />
| {{Yes}}<br />
| {{G|Web, GTK}}<br />
| MPL v2<br />
| BSD, Windows, macOS, Android, Kindle Paperwhite<br />
| {{Yes}}<br />
| P2P sync<br />
|-<br />
| [http://synkron.sourceforge.net/ Synkron]<br />
| {{AUR|synkron}}<br />
| C++<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| '''multi'''directional<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{G|Qt}}<br />
| GPLv2<br />
| Windows, macOS<br />
| {{R|[https://sourceforge.net/projects/synkron/ No]}}<br />
|<br />
|-<br />
| [[taskd]]<br />
| {{aur|taskd}}<br />
| C++, Python<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| '''multi'''directional<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| MIT<br />
| Android<br />
| {{Yes}}<br />
|<br />
|-<br />
| [[Unison]]<br />
| {{pkg|unison}}<br />
| OCaml<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Y|partial [http://www.cis.upenn.edu/~bcpierce/unison/download/releases/stable/unison-manual.html#perms]}}<br />
| {{G|optional [http://www.cis.upenn.edu/~bcpierce/unison/download/releases/stable/unison-manual.html#speeding]}}<br />
| {{No}}<br />
| {{G|Yes [http://www.cis.upenn.edu/~bcpierce/unison/download/releases/stable/unison-manual.html#backups]}}<br />
| '''bi'''directional<br />
| {{G|interactive}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{G|GTK2}}<br />
| GPL<br />
| FreeBSD, Windows, macOS, Android<br />
| {{G|Yes [http://www.cis.upenn.edu/~bcpierce/unison/status.html]}}<br />
|<br />
|}<br />
<br />
== Incremental backups ==<br />
<br />
Applications that can do incremental backups remember and take into account what data has been backed up during the last run (so-called "diffs") and eliminate the need to have duplicates of unchanged data. Restoring the data to a certain point in time would require locating the last full backup and all the incremental backups from then to the moment when it is supposed to be restored. This sort of backup is useful for those who do it very often.<br />
<br />
See also [[Dotfiles#Version control]].<br />
<br />
'''Legend:'''<br />
<br />
* '''Name''': the application name, linking to the official website.<br />
* '''Installation''': a link to the main ArchWiki article, if existing, or directly to the package pages.<br />
* '''Implementation''': the programming language, library, or utility that the application is based on.<br />
* '''Compressed storage''': compression is used for storage.<br />
* '''Encrypted storage''': encryption is used for storage.<br />
* '''Delta transfer''': only the modified ''parts'' of files are transferred.<br />
* '''Encrypted transfer''': data is encrypted by default when transferred over a network.<br />
* '''FS metadata''': file system permissions and attributes are backed up.<br />
* '''Easy access''': the backup is stored plainly in the file system, or is mountable as such.<br />
* '''Resumable''': the backup can be resumed without restarting it if interrupted.<br />
* '''Handles renames''': moved/renamed files are detected and not stored or transferred twice; it typically means that a checksum is computed for files or chunks thereof.<br />
* '''CLI''': the application is command-line driven, i.e. it is scriptable.<br />
* '''Other interfaces''': the application has the specified user interfaces, e.g. GUI, TUI, or web-based.<br />
* '''Licence''': the licence of the server and client applications.<br />
* '''Other platforms''': supported operating systems other than Linux.<br />
* '''Specificity''': brief notes about special features that notably set the application apart from the others.<br />
<br />
=== Single machine ===<br />
<br />
These applications are aimed at backing up data from the machine they are installed on, although the backup destination can be located on an external machine or storage media.<br />
<br />
==== Chunk-based increments ====<br />
<br />
If a file is modified, these applications store only its changed ''parts'' at the next snapshot. Compared to [[#File-based increments]] applications, these are more space-efficient, especially when large files receive small modifications; on the other hand, the archived snapshots have to be opened with the backup application that created them, since the files have to be reconstructed from the stored binary diffs.<br />
<br />
{| class="wikitable sortable"<br />
! Name<br />
! Installation<br />
! Implementation<br />
! Compressed storage<br />
! Encrypted storage<br />
! Delta transfer<br />
! Encrypted transfer<br />
! FS metadata<br />
! Easy access<br />
! Resumable<br />
! Handles renames<br />
! CLI<br />
! Other interfaces<br />
! Licence<br />
! Other platforms<br />
! Maintained<br />
! Specificity<br />
|-<br />
| [http://areca.sourceforge.net/ Areca Backup]<br />
| {{AUR|areca}}<br />
| Java<br />
| {{G|Zip, Zip64}}<br />
| {{G|AES128, AES256}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Y|Pausing only}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| GPLv2<br />
| Windows<br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://borgbackup.readthedocs.org/en/stable/ BorgBackup]<br />
| {{Pkg|borg}}<br />
| Python, C (Cython)<br />
| {{G|lz4, zlib, lzma, zstd}}<br />
| {{G|AES256}}<br />
| {{Yes}}<br />
| {{G|SSH}}<br />
| {{Yes}}[http://borgbackup.readthedocs.org/en/stable/faq.html#which-file-types-attributes-etc-are-preserved]<br />
| {{Yes}}[http://borgbackup.readthedocs.org/en/stable/usage.html#borg-mount]<br />
| {{Yes}}[http://borgbackup.readthedocs.org/en/stable/faq.html#if-a-backup-stops-mid-way-does-the-already-backed-up-data-stay-there]<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{G|third party}}<br />
| BSD<br />
| *BSD, macOS<br />
| {{Yes}} (Attic fork)<br />
| Deduplication based on variable length chunks; support both local and SSH-based remote backup destination<br />
|-<br />
| [http://viric.name/cgi-bin/btar btar]<br />
| {{AUR|btar}}{{Broken package link|{{aur-mirror|btar}}}}<br />
| C<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv3<br />
| <br />
| {{Yes}}<br />
| Redundancy, indexed extraction, multicore compression, input and output serialisation, tolerance to partial archive errors. <br />
|-<br />
| [https://bup.github.io/ bup]<br />
| {{Pkg|bup}} {{AUR|bup-git}}<br />
| C, Python, git<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{G|Immature}}<br />
| {{Yes}}[https://bup.github.io/man/bup-fuse.html]<br />
| {{G|pick up where you left off [https://github.com/bup/bup/blob/master/README.md#reasons-bup-is-awesome]}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{G|third party}}<br />
| GPLv2<br />
| NetBSD, Windows, macOS<br />
| {{Yes}}<br />
| Same storage format as git<br />
|-<br />
| [https://github.com/emersion/bups bups]<br />
| {{AUR|bups}}<br />
| bup frontend<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{G|Immature}}<br />
| {{Yes}}<br />
| {{G|pick up where you left off [https://github.com/bup/bup/blob/master/README.md#reasons-bup-is-awesome]}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{G|GTK 3}}<br />
| MIT<br />
|<br />
| {{Yes}}<br />
|<br />
|-<br />
| [https://launchpad.net/deja-dup Déjà Dup]<br />
| [[Déjà Dup]]<br />
| duplicity front-end<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{G|GTK+}}<br />
| GPLv3<br />
| <br />
| {{Yes}}<br />
| Integrated into [[GNOME Files]].<br />
|-<br />
| [http://www.duplicati.com/ Duplicati]<br />
| {{AUR|duplicati-latest}}<br />
| C#<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{R|scheduled for 2.0 release}}<br />
| {{No}}<br />
| {{Y|Pausing only}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| LGPL<br />
| Windows<br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://www.nongnu.org/duplicity/ Duplicity]<br />
| [[Duplicity]]<br />
| librsync<br />
| {{G|gzip}}<br />
| {{G|gpg}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{G|Déjà Dup}}<br />
| GPL<br />
| <br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://www.duply.net/ Duply]<br />
| [[Duply]]<br />
| duplicity front-end<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv2<br />
| <br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://kde-apps.org/content/show.php/Kup+Backup+System?content=147465 Kup Backup System]<br />
| {{Pkg|kup}}<br />
| rsync, bup front-end<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{G|Immature}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Y|bup}}<br />
| {{G|Qt}}<br />
| GPLv2<br />
| <br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://liw.fi/obnam/ obnam]<br />
| {{AUR|obnam}}<br />
| Python<br />
| {{Yes}}<br />
| {{G|GnuPG}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{G|checkpoints every 100MB}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv3<br />
| <br />
| {{No}}<br />
| <br />
|-<br />
| [https://restic.github.io/ restic]<br />
| {{AUR|restic}} {{AUR|restic-git}}<br />
| Go<br />
| {{No}} [https://github.com/restic/restic/issues/21]<br />
| {{G|AES-256}} [https://github.com/restic/restic/blob/master/doc/Design.md]<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}[https://restic.readthedocs.io/en/stable/manual.html#mount-a-repository]<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| BSD<br />
| <br />
| {{Yes}}<br />
| <br />
|-<br />
| [http://zbackup.org/ ZBackup]<br />
| {{AUR|zbackup}}<br />
| C++<br />
| {{G|LZMA, LZO}}<br />
| {{G|AES}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{R|planned [https://github.com/zbackup/zbackup#improvements]}}<br />
| {{No}}<br />
| {{Y|Kinda through tar}}<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv2<br />
| <br />
| {{Yes}}<br />
| Repository consists of immutable files.<br />
|}<br />
<br />
==== File-based increments ====<br />
<br />
If a file is modified, these applications store its new version entirely at the next snapshot. Compared to [[#Chunk-based increments]] applications, these are less space-efficient, especially when large files receive small modifications; on the other hand, often the archived snapshots can be opened without the need to have the backup application installed.<br />
<br />
'''Specific legend:'''<br />
<br />
* '''Hard links''': whether unmodified files are stored as hard links to previous versions.<br />
<br />
{| class="wikitable sortable"<br />
! Name<br />
! Installation<br />
! Implementation<br />
! Compressed storage<br />
! Encrypted storage<br />
! Delta transfer<br />
! Encrypted transfer<br />
! FS metadata<br />
! Easy access<br />
! Resumable<br />
! Handles renames<br />
! Hard links<br />
! CLI<br />
! Other interfaces<br />
! Licence<br />
! Other platforms<br />
! Maintained<br />
! Specificity<br />
|-<br />
| [https://github.com/bit-team/backintime Back In Time]<br />
| [[Back In Time]]<br />
| Python, rsync, diff<br />
| {{No}}<br />
| {{No}}<br />
| {{G|rsync}}<br />
| {{G|rsync}}<br />
| {{G|rsync}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{No}}<br />
| {{G|Yes [http://backintime.le-web.org/documentation/]}}<br />
| {{Yes}}<br />
| {{G|Qt}}<br />
| GPLv2<br />
| <br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://dar.linux.free.fr/ DAR] (Disk ARchive)<br />
| {{AUR|dar}}<br />
| C++<br />
| {{G|special archive format}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{R|No [http://dar.linux.free.fr/doc/Features.html]}}<br />
| {{Yes}}<br />
| {{G|DarGUI}}<br />
| GPL<br />
| FreeBSD, NetBSD, Windows, macOS<br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://dargui.sourceforge.net/ DarGUI]<br />
| {{AUR|dargui}}<br />
| DAR front-end<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{R|No [http://dar.linux.free.fr/doc/Features.html]}}<br />
| {{No}}<br />
| {{G|GTK}}<br />
| GPL<br />
| Windows<br />
| style="text-align:center;" | ?<br />
|<br />
|-<br />
| [http://miek.nl/projects/hdup2/ hdup]{{Dead link|2016|07|11}}<br />
| {{Aur|hdup}}<br />
| C<br />
| {{G|bzip, gzip, lzop}}<br />
| {{G|gpg}}<br />
| style="text-align:center;" | ?<br />
| {{G|SSH}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{No}}<br />
| {{No}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv2<br />
|<br />
| {{No}}<br />
| Multiple backup targets.<br />
|-<br />
| [http://www.scottlu.com/Content/Link-Backup.html Link-Backup]<br />
| {{AUR|link-backup}}<br />
| Python<br />
| {{No}}<br />
| {{No}}<br />
| style="text-align:center;" | ?<br />
| {{G|SSH}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{R|No [http://www.scottlu.com/Content/Link-Backup.html]}}<br />
| {{Yes}}<br />
| {{No}}<br />
| MIT<br />
| <br />
| {{No}}<br />
| It copies itself to the server.<br />
|-<br />
| [https://github.com/miekg/rdup rdup]<br />
| {{AUR|rdup}}<br />
| C<br />
| {{G|tar.gz}}<br />
| {{G|gpg, blowfish and others}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv3<br />
| <br />
| {{No}}<br />
| Set of command-line tools.<br />
|-<br />
| [http://www.rsnapshot.org/ rsnapshot]<br />
| [[rsnapshot]]<br />
| rsync<br />
| {{No}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{G|Yes [http://rsnapshot.org/rsnapshot/docs/docbook/rest.html]}}<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv2<br />
| Win32<br />
| {{Yes}}<br />
| <br />
|-<br />
| [https://launchpad.net/sbackup sbackup]<br />
| {{AUR|sbackup}}<br />
| Python<br />
| {{G|gzip, bzip2}}<br />
| {{No}}<br />
| style="text-align:center;" | ?<br />
| {{G|SSH}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{No}}<br />
| {{No}}<br />
| {{No}}<br />
| {{No}}<br />
| {{G|GTK}}<br />
| GPLv3<br />
| <br />
| {{Yes}}<br />
|<br />
|-<br />
| [https://github.com/teejee2008/timeshift TimeShift]<br />
| {{AUR|timeshift}}<br />
| rsync<br />
| {{No}}<br />
| {{No}}<br />
| {{G|rsync}}<br />
| {{G|rsync}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{No}}<br />
| {{G|GTK}}<br />
| GPLv3<br />
| Designed for full-system backups to dedicated devices.<br />
| {{Yes}}<br />
|<br />
|}<br />
<br />
=== Network oriented ===<br />
<br />
These applications have been designed to centralize the backup of several machines connected to a network, through a server-client model. In general they are more complicated to deploy, compared to [[#Single machine]] solutions.<br />
<br />
'''Specific legend:'''<br />
<br />
* '''Control direction''': Pull: server logs into client. Push: client initiates backup session.<br />
* '''Increment type''': the strategy used to reduce used space by deduplicating data (i.e., besides compression).<br />
** '''file-based''': if a file is modified, the entire new version is stored at each snapshot.<br />
*** '''hard-links''': whether unmodified files are stored as hard links to previous versions.<br />
** '''chunk-based''': only the modified ''parts'' of files are stored at each snapshot.<br />
<br />
{| class="wikitable sortable"<br />
! Name<br />
! Installation<br />
! Implementation<br />
! Control direction<br />
! Compressed storage<br />
! Encrypted storage<br />
! Delta transfer<br />
! Encrypted transfer<br />
! FS metadata<br />
! Easy access<br />
! Resumable<br />
! Handles renames<br />
! Increment type<br />
! CLI<br />
! Other interfaces<br />
! Licence<br />
! Other platforms<br />
! Maintained<br />
! Specificity<br />
|-<br />
| [http://backuppc.sourceforge.net/index.html BackupPC]<br />
| [[BackupPC]]<br />
| Perl<br />
| Pull<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| file-based, hard links [http://backuppc.sourceforge.net/faq/BackupPC.html#Backup-basics]<br />
| {{No}}<br />
| {{G|Web}}<br />
| GPLv2<br />
| Any (no client needed)<br />
| {{Yes}}<br />
| Identical files across backups of the same or different clients are stored only once.<br />
|-<br />
| [http://www.bacula.org Bacula]<br />
| [https://aur.archlinux.org/packages/?K=bacula bacula*] in [[AUR]]<br />
| C++<br />
| Pull<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| file-based [http://burp.grke.org/why.html]<br />
| {{Yes}}<br />
| {{G|GUI, Web}}<br />
| AGPLv3<br />
| Windows, macOS<br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://burp.grke.org burp]<br />
| {{AUR|burp-backup}}<br />
| librsync<br />
| Push<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| chunk-based [http://burp.grke.org/why.html]<br />
| {{Yes}}<br />
| {{G|[https://git.ziirish.me/ziirish/burp-ui burp-ui]}}<br />
| AGPLv3<br />
| Windows<br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://safekeep.sourceforge.net/ SafeKeep]<br />
| {{AUR|safekeep}}<br />
| rdiff-backup<br />
| Pull<br />
| {{No}}<br />
| {{No}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| chunk-based [http://safekeep.sourceforge.net/safekeep.html]<br />
| {{Yes}}<br />
| {{Yes}}<br />
| GPL<br />
| <br />
| {{No}}<br />
| Integrates with [[LVM]] and databases to create consistent backups. Bandwidth throttling.<br />
|-<br />
| [http://www.snebu.com Snebu]<br />
| {{AUR|snebu}}{{Broken package link|{{aur-mirror|snebu}}}}<br />
| C<br />
| Push or Pull<br />
| {{Yes}}<br />
| {{No}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| file-based [http://www.snebu.com/#_concepts]<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv3<br />
| <br />
| style="text-align:center;" | ?<br />
| Supports arbitrary retention schedules.<br />
|-<br />
| [http://www.initzero.it/portal/soluzioni/software-open-source/synbak-universal-backup-system_2623.html Synbak]<br />
| {{Pkg|synbak}}<br />
| Multitool wrapper<br />
| ?<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| ?<br />
| {{No}}<br />
| {{G|Web}}<br />
| GPLv3<br />
| <br />
| {{Yes}}<br />
| Unifies several backup methods.<br />
|-<br />
| [https://www.urbackup.org UrBackup]<br />
| [https://aur.archlinux.org/packages/?K=urbackup urbackup*] in [[AUR]]<br />
| C++<br />
| Pull<br />
| {{No}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Y|Internet transfers only}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| file-based,hard-links and symlinks[http://blog.urbackup.org/156/symbolically-linking-directories-during-incremental-file-backups]/chunk-based CoW-Snapshots[http://blog.urbackup.org/83/file-backup-storage-with-btrfs-snapshots]<br />
| {{Yes}} (client)<br />
| {{G|GUI, Web}}<br />
| AGPLv3+<br />
| Windows, macOS<br />
| {{Yes}}<br />
| Identical files across backups of the same or different clients are stored only once. Integrates with LVM, dattobd and btrfs for file system snapshots.<br />
|}<br />
<br />
== Cloud storage ==<br />
<br />
=== Third-party services ===<br />
<br />
{{Merge|List of applications#File sharing|Remove the extra bullet points: the Wikipedia comparison table, and the respective webpages and Wikipedia articles do a better job at describing them.}}<br />
<br />
See also [[Wikipedia:Comparison of online backup services]] and [[List of applications#Cloud synchronization clients]].<br />
<br />
{{Tip|{{aur|cryptomator}} is an open-source, multi-platform program designed to add client-side transparent encryption on cloud-shared files.}}<br />
<br />
* {{App|Amazon S3|Amazon Simple Storage Service (Amazon S3), provides developers and IT teams with secure, durable, highly-scalable object storage. Amazon S3 is easy to use, with a simple web service interface to store and retrieve any amount of data from anywhere on the web. With Amazon S3, you pay only for the storage you actually use. There is no minimum fee and no setup cost.|http://aws.amazon.com/s3/|{{Pkg|s3cmd}}}}<br />
<br />
* {{App|[[CrashPlan]]|An online/offsite backup solution.<br />
** Unlimited online space for very reasonable pricing.<br />
** Automatic and incremental backups to multiple destinations.<br />
** Intuitive GUI.<br />
** Offers encryption and de-duplication.<br />
** Software is free for local use.<br />
** Restore prevents simultaneous backing up<br />
|http://www.crashplan.com/|{{AUR|crashplan}}}}<br />
<br />
* {{App|[[Dropbox]]|A popular file-sharing service.<br />
** A daemon monitors a specified directory, and uploads incremental changes to dropbox.com. <br />
** Changes automatically show up on your other computers. <br />
** Includes file sharing and a public directory. <br />
** You can recover deleted files. <br />
** Community written add-ons. <br />
** Free accounts have 2GB storage.<br />
|http://www.dropbox.com|{{AUR|dropbox}} {{AUR|nautilus-dropbox}}}}<br />
<br />
* {{App|[[Wikipedia:Google Drive|Google Drive]]|A file storage and synchronization service provided by Google.<br />
** Provides cloud storage, file sharing and collaborative editing.<br />
** Multiple clients are available.<br />
|https://drive.google.com|{{AUR|google-drive-ocamlfuse}} (free), {{AUR|drive}} (free), {{AUR|grive}} (free), {{AUR|gdrivefs}} (free), [[insync]] (non-free)}}, {{AUR|gdrive}} (free), {{AUR|drivesync-git}} (free)<br />
<br />
* {{App|[[Wikipedia:IDrive_Inc.|iDrive]]|Universal Online Backup.<br />
** Multiple Device Backup.<br />
** Online File Sync. <br />
** Real-Time Backup. <br />
** Backup and Access from Mobile Devices. <br />
** Remote Manage. <br />
** No GUI Front end for Linux, command line based. A wrapper script is available to make it easier to use.<br />
|https://www.idrive.com/|}}<br />
<br />
* {{App|[[Wikipedia:Jungle Disk|Jungle Disk]]|An online backup tool that stores its data in Amazon S3 or Rackspace Cloud Files.<br />
** A GNOME Files extension.<br />
** Only paid plans available.<br />
|http://www.jungledisk.com/|}}<br />
<br />
* {{App|[[Wikipedia:Mega (website)|MEGA]]|Successor to the MegaUpload file-sharing service.<br />
** Free accounts are 50GB with paid plans available for more space.<br />
** Offers encryption and de-duplication.<br />
** Usually accessed through its web interface but other tools exist.<br />
|https://mega.co.nz|{{AUR|megatools}}, {{AUR|megasync}}, {{AUR|megafuse-git}}}}<br />
<br />
* {{App|Nutstore|A cloud service that lets you sync and share files anywhere.<br />
** Multiple file folders sync.<br />
** Service for Chinese users.<br />
|http://jianguoyun.com/|{{AUR|nutstore}}}}<br />
<br />
* {{App|OneDrive|Microsoft cloud service.<br />
|https://onedrive.com|{{AUR|onedrive-git}}}}<br />
<br />
* {{App|rsync.net|Cloud storage for offsite backups.<br />
** ZFS filesystem, accessible with any SSH/SFTP/SCP tool, running on a UNIX system.<br />
** Simple rsync synchronization with daily automatic ZFS snapshots.<br />
|http://www.rsync.net/|[[rsync]]/[[SSH]], {{Pkg|borg}}}}<br />
<br />
* {{App|[[Wikipedia:SpiderOak|SpiderOak]]|An online backup tool for Windows, Mac and Linux users to back up, share, sync, access and store their data.<br />
** Free account holds 2GB as a 60-day trial.<br />
** Includes file sharing and a public directory.<br />
** Incremental backup and sync are both supported.<br />
|https://spideroak.com/|{{AUR|spideroak-one}}}}<br />
<br />
* {{App|[[Wikipedia:Storage Made Easy|Storage Made Easy]]|Provides unified access to numerous cloud storage services, as well as its own storage.<br />
** Free and paid version available.<br />
** Free account holds 5GB and allows access to up to three other cloud storage providers.<br />
** Supports local directory via fuse, as well as web access.<br />
** Supports many cloud storage services, such as Box, Dropbox, Google Drive, Onedrive, and others.<br />
|http://storagemadeeasy.com/|}}<br />
<br />
* {{App|[[Wikipedia:Tarsnap|Tarsnap]]|A secure online backup service for Linux, BSD, macOS and Windows (through Cygwin).<br />
** Compressed encrypted backups to Amazon S3 Servers.<br />
** Automate via [[cron]].<br />
** Incremental backups.<br />
** Backup any files or directories.<br />
** Command line only client.<br />
** Pay only for usage (bandwidth and storage). <br />
|http://www.tarsnap.com|{{Pkg|tarsnap}}}}<br />
<br />
* {{App|[[Yandex Disk]]|Free cloud storage service created by Yandex.ru that gives you access to your photos, videos and documents from any internet-enabled device.|https://disk.yandex.ru/|{{AUR|yandex-disk}}}}<br />
<br />
==== Multi-service clients ====<br />
<br />
* {{App|[[Déjà Dup]]|A simple GTK+ backup program. It hides the complexity of doing backups the 'right way' (encrypted, off-site, and regular) and uses duplicity as the backend.<br />
** Automatic, timed backup configurable in GUI.<br />
** Restore wizard.<br />
** Integrated into the GNOME Files file manager.<br />
** Inherits several features of duplicity.<br />
|https://launchpad.net/deja-dup|{{Pkg|deja-dup}}}}<br />
<br />
* {{App|Duplicati|Backup client that securely stores encrypted, incremental, compressed backups on cloud storage services and remote file servers. It works with Amazon S3, Windows Live SkyDrive, Google Drive (Google Docs), Rackspace Cloud Files or WebDAV, SSH, FTP (and many more). Duplicati is open source and free.|http://www.duplicati.com/|{{AUR|duplicati-latest}}}}<br />
<br />
* {{App|[[Duplicity]]|A simple command-line utility which allows encrypted compressed incremental backup to nearly any storage.<br />
** Supports gpg encryption and signing.<br />
** Supports gzip compression.<br />
** Supports full or incremental backups, incremental backup stores only difference between new and old file.<br />
** Supports pushing over [http://duplicity.nongnu.org/duplicity.1.html#sect7 many protocols].<br />
|http://www.nongnu.org/duplicity/|{{Pkg|duplicity}}}}<br />
<br />
* {{App|[[Duply]]|Front-end for duplicity which simplifies running it by:<br />
** keeping recurring settings in profiles per backup job;<br />
** automated import/export of keys between profile and keyring;<br />
** enabling batch operations eg. backup_verify_purge;<br />
** executing pre/post scripts;<br />
** precondition checking for flawless duplicity operation.<br />
|http://www.duply.net/|{{AUR|duply}}}}<br />
<br />
* {{App|rclone|Rclone is a command line program to sync files and directories to and from Google Drive, Amazon S3, Openstack Swift / Rackspace cloud files / Memset Memstore, Dropbox, Google Cloud Storage and The local filesystem.|http://rclone.org/|{{Pkg|rclone}}}}<br />
<br />
* {{App|Syncany|Cloud storage and filesharing application with a focus on security and abstraction of storage.|https://www.syncany.org/|{{AUR|syncany}}}}<br />
<br />
=== Custom infrastructure ===<br />
<br />
See [[List of applications/Internet#Cloud storage servers]]<br />
<br />
== Version control systems ==<br />
<br />
{{Merge|List_of_applications#Work_environment|Also drop the extra bullets, the Wikipedia comparison table is much better than this.}}<br />
<br />
These are traditionally used for keeping track of software development; but if you want to have a simple way to manage your config files in one directory, it might be a good solution.<br />
<br />
See also [[Wikipedia:Comparison of revision control software]].<br />
<br />
* {{App|[[Bazaar]]|A distributed version control system that helps you track project history over time and to collaborate easily with others.<br />
** Similar commands to Subversion.<br />
** Supports working with or without a central server.<br />
** Support for working with some other revision control systems<br />
** Complete Unicode support.<br />
|https://bazaar.canonical.com/en/|{{Pkg|bzr}}}}<br />
<br />
* {{App|Darcs|A distributed revision control system that was designed to replace traditional, centralized source control systems such as CVS and Subversion.<br />
** Offline mode.<br />
** Easy branching and merging.<br />
** Written in Haskell.<br />
** Not very fast.<br />
|http://darcs.net/|{{Pkg|darcs}}}}<br />
<br />
* {{App|[[Git]]|A distributed revision control and source code management system with an emphasis on speed.<br />
** Very easy creation, merging, and deletion of branches.<br />
** Nearly all operations are performed locally, giving it a huge speed advantage on centralized systems.<br />
** Has a "staging area" or "index", this is an intermediate area where commits can be formatted and reviewed before completing the commit.<br />
** Does not handle binary files very well.<br />
|https://git-scm.com/|{{Pkg|git}}}}<br />
<br />
* {{App|[[Mercurial]]|A distributed version control system written in Python and similar in many ways to Git.<br />
** Platform independent.<br />
** Support for [http://mercurial.selenic.com/wiki/UsingExtensions extensions].<br />
** A set of commands consistent with Subversion.<br />
** Supports tags.<br />
|https://www.mercurial-scm.org/|{{Pkg|mercurial}}}}<br />
<br />
* {{App|[[Subversion]]|A full-featured centralized version control system originally designed to be a better CVS.<br />
** Renamed/copied/moved/removed files retain full revision history.<br />
** Native support for binary files, with space-efficient binary-diff storage.<br />
** Costs proportional to change size, not to data size.<br />
** Allows arbitrary metadata ("properties") to be attached to any file or directory. <br />
|https://subversion.apache.org/|{{Pkg|subversion}}}}<br />
<br />
== See also ==<br />
<br />
* [[Wikipedia:List of backup software]]<br />
* [[Wikipedia:Comparison of backup software]]<br />
* [https://github.com/restic/others Exhaustive list of backup solutions for Linux]<br />
* [http://www.halfgaar.net/backing-up-unix Backing up Linux and other Unix(-like) systems]<br />
* [http://www.askapache.com/security/mirror-using-rsync-ssh.html Mirroring an Entire Site using Rsync over SSH]<br />
* [http://www.si-journal.org/index.php/JSI/article/view/205 Performance comparison of five remote incremental backup tools: Rsync, Rdiff-backup, Duplicity, Areca and Link-Backup]<br />
* [http://blog.pointsoftware.ch/index.php/howto-local-and-remote-snapshot-backup-using-rsync-with-hard-links/ rsync-snapshot.sh] — Local and remote snapshot backup using rsync with hard links</div>Wzyboyhttps://wiki.archlinux.org/index.php?title=Synchronization_and_backup_programs&diff=512879Synchronization and backup programs2018-03-06T15:50:17Z<p>Wzyboy: /* Chunk-based increments */ borg implemention and comment</p>
<hr />
<div>[[Category:Data compression and archiving]]<br />
[[Category:System recovery]]<br />
[[de:Backups]]<br />
[[ja:バックアッププログラム]]<br />
[[ru:Backup programs]]<br />
{{Related articles start}}<br />
{{Related|System backup}}<br />
{{Related|Disk cloning}}<br />
{{Related|List of applications#File sharing}}<br />
{{Related|System maintenance#Backup}}<br />
{{Related|Dotfiles#Version control}}<br />
{{Related|File recovery}}<br />
{{Related articles end}}<br />
<br />
This page lists and compares applications that synchronize data between two or more locations, and those that build on top of such functionality to make incremental copies of important data for backup purposes. Because of their relationship, the two groups share several traits that justify describing them in the same article.<br />
<br />
== Backup overview ==<br />
<br />
Having backups of important data is a necessary measure to take, since human and machine processing errors are very likely to generate corruption as time passes, and also the physical media where the data is stored is inevitably destined to fail. In order to choose the best program for one's own needs, the following aspects should be considered:<br />
<br />
* The type of backup medium that is going to store the data, e.g. CD, DVD, remote server, external hard drive, etc.<br />
* The planned frequency of backups, e.g. daily, weekly, monthly, etc.<br />
* The features expected from the backup solution, e.g. compression, encryption, handles renames, etc.<br />
* The planned method to restore backups if needed.<br />
<br />
== Data synchronization ==<br />
<br />
These applications simply keep directories synchronized between multiple locations/machines, in a "mirror" fashion. Nonetheless, most of them still allow storing and reverting to old revisions of modified or deleted files.<br />
<br />
See also [[Wikipedia:Comparison of file synchronization software]].<br />
<br />
'''Legend:'''<br />
<br />
* '''Name''': the application name, linking to the ArchWiki article or the official website.<br />
* '''Installation''': a link to the package.<br />
* '''Implementation''': the programming language, library, or utility that the application is based on.<br />
* '''Delta transfer''': only the modified ''parts'' of files are transferred.<br />
* '''Encrypted transfer''': data is encrypted by default when transferred over the network.<br />
* '''FS metadata''': file system permissions and attributes are synchronized.<br />
* '''Resumable''': the synchronization can be resumed if interrupted.<br />
* '''Handles renames''': moved/renamed files are detected and not stored or transferred twice. It typically means that a checksum of files or its chunks is computed.<br />
* '''Version control''': the old version of files are backed up ('''reverse incremental backup''').<br />
* '''Change propagation''': specifies in how many directions changes can be propagated.<br />
** ''unidirectional'' means one-way synchronization of two locations,<br />
** ''bidirectional'' means two-way synchronization of two locations and<br />
** ''multidirectional'' means full synchronization of more than two locations.<br />
* '''Conflict resolution''': the application handles file conflicts, either automatically or interactively, i.e. it does not silently discard conflicting files. This attribute does not apply to applications that only propagate changes in one direction.<br />
* '''FS monitoring''': the application listens to file system events to trigger the synchronization.<br />
* '''CLI''': the application is command-line driven, i.e. it is scriptable.<br />
* '''Other interfaces''': the application has the specified user interfaces, e.g. GUI, TUI, or web-based.<br />
* '''License''': the license of the server and client applications.<br />
* '''Other platforms''': supported operating systems other than Linux.<br />
* '''Specificity''': brief notes about special features that notably set the application apart from the others.<br />
<br />
{| class="wikitable sortable"<br />
! Name<br />
! Installation<br />
! Implementation<br />
! Delta transfer<br />
! Encrypted transfer<br />
! FS metadata<br />
! Resumable<br />
! Handles renames<br />
! Version control<br />
! Change propagation<br />
! Conflict resolution<br />
! FS monitoring<br />
! CLI<br />
! Other interfaces<br />
! License<br />
! Other platforms<br />
! Maintained<br />
! Specificity<br />
|-<br />
| [[Resilio Sync]]<br />
| {{aur|rslsync}}<br />
| ? (closed source)<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| '''multi'''directional<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{G|Web}}<br />
| Proprietary freemium<br />
| FreeBSD, Windows, macOS, Android, iOS, Windows Phone, Amazon Kindle Fire<br />
| {{Yes}}<br />
| P2P sync<br />
|-<br />
| [https://www.freefilesync.org/ FreeFileSync]<br />
| {{AUR|freefilesync}}<br />
| C++<br />
| style="text-align:center;" | ?<br />
| {{G|SFTP [http://www.freefilesync.org/faq.php#features]}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{G|Yes [http://www.freefilesync.org/faq.php#features]}}<br />
| {{G|1=Yes [http://www.freefilesync.org/manual.php?topic=versioning]}}<br />
|'''uni'''directional / '''multi'''directional<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| GPL<br />
| Windows, macOS<br />
| {{Yes}}<br />
|<br />
|-<br />
| [https://git-annex.branchable.com/ git-annex]<br />
| {{Pkg|git-annex}}<br />
| Haskell, git<br />
| {{G|rsync [http://git-annex.branchable.com/transferring_data/]}}<br />
| {{G|rsync [http://git-annex.branchable.com/transferring_data/]}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| '''multi'''directional; with git remotes [http://git-annex.branchable.com/sync/]<br />
| {{G|renames conflicting files [http://git-annex.branchable.com/automatic_conflict_resolution/]}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{G|[http://git-annex.branchable.com/assistant/ git-annex assistant]}}<br />
| GPLv3<br />
| macOS, Android<br />
| {{Yes}}<br />
| Manage files with git<br />
|-<br />
| [http://www.netpower.fr/osync osync.sh]<br />
| {{AUR|osync}}<br />
| Bash, based on rsync<br />
| {{G|rsync}}<br />
| {{G|rsync}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| '''bi'''directional<br />
| {{G|keeps multiple versions of a file [http://www.netpower.fr/sites/default/files/soft/html-doc/osync_v1.2.html#toc-Subsubsection-1.3.1]}}<br />
| {{G|optional [https://github.com/deajan/osync#daemon-mode]}}<br />
| {{Yes}}<br />
| {{No}}<br />
| BSD<br />
| <br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://www.nongnu.org/rdiff-backup/ rdiff-backup]<br />
| {{Pkg|rdiff-backup}}<br />
| Python 2, librsync<br />
| {{G|rsync}}<br />
| {{G|rsync}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
|colspan="2"| '''uni'''directional<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| GPL<br />
| Win32<br />
| style="text-align:center;" | ?<br />
|<br />
|-<br />
| [[rsync]]<br />
| {{pkg|rsync}}<br />
| C<br />
| {{Yes}}<br />
| {{G|SSH or native protocol}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{G|<br />
* {{ic|--link-dest}} with hard links [http://www.ibm.com/developerworks/aix/library/au-spunix_rsync/index.html#backup]<br />
* {{ic|--backup}}<br />
}}<br />
|colspan="2"| '''uni'''directional<br />
| {{No}}<br />
| {{Yes}}<br />
| {{G|[[Rsync#Front-ends]]}}<br />
| GPLv3<br />
| Win32<br />
| {{Yes}}<br />
| Standard tool present on all Linux distributions.<br />
|-<br />
| [https://sparkleshare.org/ SparkleShare]<br />
| {{Pkg|sparkleshare}}<br />
| C#, git<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| GPLv3<br />
| Windows, macOS<br />
| {{Yes}}<br />
|<br />
|-<br />
| [[Syncthing]]<br />
| {{pkg|syncthing}}<br />
| Go<br />
| {{G|Yes [http://docs.syncthing.net/users/faq.html#is-synchronization-fast]}}<br />
| {{G|Yes [http://docs.syncthing.net/users/security.html]}}<br />
| {{Y|partial [http://docs.syncthing.net/users/faq.html#what-things-are-synced]}}<br />
| {{G|Yes }}<br />
| style="text-align:center;" | ?<br />
| {{G|Yes [http://docs.syncthing.net/users/versioning.html]}}, previous versions moved to archive folder<br />
| '''multi'''directional<br />
| {{G|renames one file [https://docs.syncthing.net/users/faq.html#what-if-there-is-a-conflict]}}<br />
| {{G|Yes}}<br />
| {{Yes}}<br />
| {{G|Web, GTK}}<br />
| MPL v2<br />
| BSD, Windows, macOS, Android, Kindle Paperwhite<br />
| {{Yes}}<br />
| P2P sync<br />
|-<br />
| [http://synkron.sourceforge.net/ Synkron]<br />
| {{AUR|synkron}}<br />
| C++<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| '''multi'''directional<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{G|Qt}}<br />
| GPLv2<br />
| Windows, macOS<br />
| {{R|[https://sourceforge.net/projects/synkron/ No]}}<br />
|<br />
|-<br />
| [[taskd]]<br />
| {{aur|taskd}}<br />
| C++, Python<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| '''multi'''directional<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| MIT<br />
| Android<br />
| {{Yes}}<br />
|<br />
|-<br />
| [[Unison]]<br />
| {{pkg|unison}}<br />
| OCaml<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Y|partial [http://www.cis.upenn.edu/~bcpierce/unison/download/releases/stable/unison-manual.html#perms]}}<br />
| {{G|optional [http://www.cis.upenn.edu/~bcpierce/unison/download/releases/stable/unison-manual.html#speeding]}}<br />
| {{No}}<br />
| {{G|Yes [http://www.cis.upenn.edu/~bcpierce/unison/download/releases/stable/unison-manual.html#backups]}}<br />
| '''bi'''directional<br />
| {{G|interactive}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{G|GTK2}}<br />
| GPL<br />
| FreeBSD, Windows, macOS, Android<br />
| {{G|Yes [http://www.cis.upenn.edu/~bcpierce/unison/status.html]}}<br />
|<br />
|}<br />
<br />
== Incremental backups ==<br />
<br />
Applications that can do incremental backups remember and take into account what data has been backed up during the last run (so-called "diffs") and eliminate the need to have duplicates of unchanged data. Restoring the data to a certain point in time would require locating the last full backup and all the incremental backups from then to the moment when it is supposed to be restored. This sort of backup is useful for those who do it very often.<br />
<br />
See also [[Dotfiles#Version control]].<br />
<br />
'''Legend:'''<br />
<br />
* '''Name''': the application name, linking to the official website.<br />
* '''Installation''': a link to the main ArchWiki article, if existing, or directly to the package pages.<br />
* '''Implementation''': the programming language, library, or utility that the application is based on.<br />
* '''Compressed storage''': compression is used for storage.<br />
* '''Encrypted storage''': encryption is used for storage.<br />
* '''Delta transfer''': only the modified ''parts'' of files are transferred.<br />
* '''Encrypted transfer''': data is encrypted by default when transferred over a network.<br />
* '''FS metadata''': file system permissions and attributes are backed up.<br />
* '''Easy access''': the backup is stored plainly in the file system, or is mountable as such.<br />
* '''Resumable''': the backup can be resumed without restarting it if interrupted.<br />
* '''Handles renames''': moved/renamed files are detected and not stored or transferred twice; it typically means that a checksum is computed for files or chunks thereof.<br />
* '''CLI''': the application is command-line driven, i.e. it is scriptable.<br />
* '''Other interfaces''': the application has the specified user interfaces, e.g. GUI, TUI, or web-based.<br />
* '''Licence''': the licence of the server and client applications.<br />
* '''Other platforms''': supported operating systems other than Linux.<br />
* '''Specificity''': brief notes about special features that notably set the application apart from the others.<br />
<br />
=== Single machine ===<br />
<br />
These applications are aimed at backing up data from the machine they are installed on, although the backup destination can be located on an external machine or storage media.<br />
<br />
==== Chunk-based increments ====<br />
<br />
If a file is modified, these applications store only its changed ''parts'' at the next snapshot. Compared to [[#File-based increments]] applications, these are more space-efficient, especially when large files receive small modifications; on the other hand, the archived snapshots have to be opened with the backup application that created them, since the files have to be reconstructed from the stored binary diffs.<br />
<br />
{| class="wikitable sortable"<br />
! Name<br />
! Installation<br />
! Implementation<br />
! Compressed storage<br />
! Encrypted storage<br />
! Delta transfer<br />
! Encrypted transfer<br />
! FS metadata<br />
! Easy access<br />
! Resumable<br />
! Handles renames<br />
! CLI<br />
! Other interfaces<br />
! Licence<br />
! Other platforms<br />
! Maintained<br />
! Specificity<br />
|-<br />
| [http://areca.sourceforge.net/ Areca Backup]<br />
| {{AUR|areca}}<br />
| Java<br />
| {{G|Zip, Zip64}}<br />
| {{G|AES128, AES256}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Y|Pausing only}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| GPLv2<br />
| Windows<br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://borgbackup.readthedocs.org/en/stable/ BorgBackup]<br />
| {{Pkg|borg}}<br />
| Python, C (Cython)<br />
| {{G|lz4, zlib, lzma, zstd}}<br />
| {{G|AES256}}<br />
| {{Yes}}<br />
| {{G|SSH}}<br />
| {{Yes}}[http://borgbackup.readthedocs.org/en/stable/faq.html#which-file-types-attributes-etc-are-preserved]<br />
| {{Yes}}[http://borgbackup.readthedocs.org/en/stable/usage.html#borg-mount]<br />
| {{Yes}}[http://borgbackup.readthedocs.org/en/stable/faq.html#if-a-backup-stops-mid-way-does-the-already-backed-up-data-stay-there]<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{G|third party}}<br />
| BSD<br />
| *BSD, macOS<br />
| {{Yes}} (Attic fork)<br />
| Deduplication based on variable length chunks<br />
|-<br />
| [http://viric.name/cgi-bin/btar btar]<br />
| {{AUR|btar}}{{Broken package link|{{aur-mirror|btar}}}}<br />
| C<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv3<br />
| <br />
| {{Yes}}<br />
| Redundancy, indexed extraction, multicore compression, input and output serialisation, tolerance to partial archive errors. <br />
|-<br />
| [https://bup.github.io/ bup]<br />
| {{Pkg|bup}} {{AUR|bup-git}}<br />
| C, Python, git<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{G|Immature}}<br />
| {{Yes}}[https://bup.github.io/man/bup-fuse.html]<br />
| {{G|pick up where you left off [https://github.com/bup/bup/blob/master/README.md#reasons-bup-is-awesome]}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{G|third party}}<br />
| GPLv2<br />
| NetBSD, Windows, macOS<br />
| {{Yes}}<br />
| Same storage format as git<br />
|-<br />
| [https://github.com/emersion/bups bups]<br />
| {{AUR|bups}}<br />
| bup frontend<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{G|Immature}}<br />
| {{Yes}}<br />
| {{G|pick up where you left off [https://github.com/bup/bup/blob/master/README.md#reasons-bup-is-awesome]}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{G|GTK 3}}<br />
| MIT<br />
|<br />
| {{Yes}}<br />
|<br />
|-<br />
| [https://launchpad.net/deja-dup Déjà Dup]<br />
| [[Déjà Dup]]<br />
| duplicity front-end<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{G|GTK+}}<br />
| GPLv3<br />
| <br />
| {{Yes}}<br />
| Integrated into [[GNOME Files]].<br />
|-<br />
| [http://www.duplicati.com/ Duplicati]<br />
| {{AUR|duplicati-latest}}<br />
| C#<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{R|scheduled for 2.0 release}}<br />
| {{No}}<br />
| {{Y|Pausing only}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| LGPL<br />
| Windows<br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://www.nongnu.org/duplicity/ Duplicity]<br />
| [[Duplicity]]<br />
| librsync<br />
| {{G|gzip}}<br />
| {{G|gpg}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{G|Déjà Dup}}<br />
| GPL<br />
| <br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://www.duply.net/ Duply]<br />
| [[Duply]]<br />
| duplicity front-end<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv2<br />
| <br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://kde-apps.org/content/show.php/Kup+Backup+System?content=147465 Kup Backup System]<br />
| {{Pkg|kup}}<br />
| rsync, bup front-end<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{G|Immature}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Y|bup}}<br />
| {{G|Qt}}<br />
| GPLv2<br />
| <br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://liw.fi/obnam/ obnam]<br />
| {{AUR|obnam}}<br />
| Python<br />
| {{Yes}}<br />
| {{G|GnuPG}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{G|checkpoints every 100MB}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv3<br />
| <br />
| {{No}}<br />
| <br />
|-<br />
| [https://restic.github.io/ restic]<br />
| {{AUR|restic}} {{AUR|restic-git}}<br />
| Go<br />
| {{No}} [https://github.com/restic/restic/issues/21]<br />
| {{G|AES-256}} [https://github.com/restic/restic/blob/master/doc/Design.md]<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}[https://restic.readthedocs.io/en/stable/manual.html#mount-a-repository]<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| BSD<br />
| <br />
| {{Yes}}<br />
| <br />
|-<br />
| [http://zbackup.org/ ZBackup]<br />
| {{AUR|zbackup}}<br />
| C++<br />
| {{G|LZMA, LZO}}<br />
| {{G|AES}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{R|planned [https://github.com/zbackup/zbackup#improvements]}}<br />
| {{No}}<br />
| {{Y|Kinda through tar}}<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv2<br />
| <br />
| {{Yes}}<br />
| Repository consists of immutable files.<br />
|}<br />
<br />
==== File-based increments ====<br />
<br />
If a file is modified, these applications store its new version entirely at the next snapshot. Compared to [[#Chunk-based increments]] applications, these are less space-efficient, especially when large files receive small modifications; on the other hand, often the archived snapshots can be opened without the need to have the backup application installed.<br />
<br />
'''Specific legend:'''<br />
<br />
* '''Hard links''': whether unmodified files are stored as hard links to previous versions.<br />
<br />
{| class="wikitable sortable"<br />
! Name<br />
! Installation<br />
! Implementation<br />
! Compressed storage<br />
! Encrypted storage<br />
! Delta transfer<br />
! Encrypted transfer<br />
! FS metadata<br />
! Easy access<br />
! Resumable<br />
! Handles renames<br />
! Hard links<br />
! CLI<br />
! Other interfaces<br />
! Licence<br />
! Other platforms<br />
! Maintained<br />
! Specificity<br />
|-<br />
| [https://github.com/bit-team/backintime Back In Time]<br />
| [[Back In Time]]<br />
| Python, rsync, diff<br />
| {{No}}<br />
| {{No}}<br />
| {{G|rsync}}<br />
| {{G|rsync}}<br />
| {{G|rsync}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{No}}<br />
| {{G|Yes [http://backintime.le-web.org/documentation/]}}<br />
| {{Yes}}<br />
| {{G|Qt}}<br />
| GPLv2<br />
| <br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://dar.linux.free.fr/ DAR] (Disk ARchive)<br />
| {{AUR|dar}}<br />
| C++<br />
| {{G|special archive format}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{R|No [http://dar.linux.free.fr/doc/Features.html]}}<br />
| {{Yes}}<br />
| {{G|DarGUI}}<br />
| GPL<br />
| FreeBSD, NetBSD, Windows, macOS<br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://dargui.sourceforge.net/ DarGUI]<br />
| {{AUR|dargui}}<br />
| DAR front-end<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{R|No [http://dar.linux.free.fr/doc/Features.html]}}<br />
| {{No}}<br />
| {{G|GTK}}<br />
| GPL<br />
| Windows<br />
| style="text-align:center;" | ?<br />
|<br />
|-<br />
| [http://miek.nl/projects/hdup2/ hdup]{{Dead link|2016|07|11}}<br />
| {{Aur|hdup}}<br />
| C<br />
| {{G|bzip, gzip, lzop}}<br />
| {{G|gpg}}<br />
| style="text-align:center;" | ?<br />
| {{G|SSH}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{No}}<br />
| {{No}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv2<br />
|<br />
| {{No}}<br />
| Multiple backup targets.<br />
|-<br />
| [http://www.scottlu.com/Content/Link-Backup.html Link-Backup]<br />
| {{AUR|link-backup}}<br />
| Python<br />
| {{No}}<br />
| {{No}}<br />
| style="text-align:center;" | ?<br />
| {{G|SSH}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{R|No [http://www.scottlu.com/Content/Link-Backup.html]}}<br />
| {{Yes}}<br />
| {{No}}<br />
| MIT<br />
| <br />
| {{No}}<br />
| It copies itself to the server.<br />
|-<br />
| [https://github.com/miekg/rdup rdup]<br />
| {{AUR|rdup}}<br />
| C<br />
| {{G|tar.gz}}<br />
| {{G|gpg, blowfish and others}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv3<br />
| <br />
| {{No}}<br />
| Set of command-line tools.<br />
|-<br />
| [http://www.rsnapshot.org/ rsnapshot]<br />
| [[rsnapshot]]<br />
| rsync<br />
| {{No}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{G|Yes [http://rsnapshot.org/rsnapshot/docs/docbook/rest.html]}}<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv2<br />
| Win32<br />
| {{Yes}}<br />
| <br />
|-<br />
| [https://launchpad.net/sbackup sbackup]<br />
| {{AUR|sbackup}}<br />
| Python<br />
| {{G|gzip, bzip2}}<br />
| {{No}}<br />
| style="text-align:center;" | ?<br />
| {{G|SSH}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{No}}<br />
| {{No}}<br />
| {{No}}<br />
| {{No}}<br />
| {{G|GTK}}<br />
| GPLv3<br />
| <br />
| {{Yes}}<br />
|<br />
|-<br />
| [https://github.com/teejee2008/timeshift TimeShift]<br />
| {{AUR|timeshift}}<br />
| rsync<br />
| {{No}}<br />
| {{No}}<br />
| {{G|rsync}}<br />
| {{G|rsync}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{No}}<br />
| {{G|GTK}}<br />
| GPLv3<br />
| Designed for full-system backups to dedicated devices.<br />
| {{Yes}}<br />
|<br />
|}<br />
<br />
=== Network oriented ===<br />
<br />
These applications have been designed to centralize the backup of several machines connected to a network, through a server-client model. In general they are more complicated to deploy, compared to [[#Single machine]] solutions.<br />
<br />
'''Specific legend:'''<br />
<br />
* '''Control direction''': Pull: server logs into client. Push: client initiates backup session.<br />
* '''Increment type''': the strategy used to reduce used space by deduplicating data (i.e., besides compression).<br />
** '''file-based''': if a file is modified, the entire new version is stored at each snapshot.<br />
*** '''hard-links''': whether unmodified files are stored as hard links to previous versions.<br />
** '''chunk-based''': only the modified ''parts'' of files are stored at each snapshot.<br />
<br />
{| class="wikitable sortable"<br />
! Name<br />
! Installation<br />
! Implementation<br />
! Control direction<br />
! Compressed storage<br />
! Encrypted storage<br />
! Delta transfer<br />
! Encrypted transfer<br />
! FS metadata<br />
! Easy access<br />
! Resumable<br />
! Handles renames<br />
! Increment type<br />
! CLI<br />
! Other interfaces<br />
! Licence<br />
! Other platforms<br />
! Maintained<br />
! Specificity<br />
|-<br />
| [http://backuppc.sourceforge.net/index.html BackupPC]<br />
| [[BackupPC]]<br />
| Perl<br />
| Pull<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| file-based, hard links [http://backuppc.sourceforge.net/faq/BackupPC.html#Backup-basics]<br />
| {{No}}<br />
| {{G|Web}}<br />
| GPLv2<br />
| Any (no client needed)<br />
| {{Yes}}<br />
| Identical files across backups of the same or different clients are stored only once.<br />
|-<br />
| [http://www.bacula.org Bacula]<br />
| [https://aur.archlinux.org/packages/?K=bacula bacula*] in [[AUR]]<br />
| C++<br />
| Pull<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| file-based [http://burp.grke.org/why.html]<br />
| {{Yes}}<br />
| {{G|GUI, Web}}<br />
| AGPLv3<br />
| Windows, macOS<br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://burp.grke.org burp]<br />
| {{AUR|burp-backup}}<br />
| librsync<br />
| Push<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| chunk-based [http://burp.grke.org/why.html]<br />
| {{Yes}}<br />
| {{G|[https://git.ziirish.me/ziirish/burp-ui burp-ui]}}<br />
| AGPLv3<br />
| Windows<br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://safekeep.sourceforge.net/ SafeKeep]<br />
| {{AUR|safekeep}}<br />
| rdiff-backup<br />
| Pull<br />
| {{No}}<br />
| {{No}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| chunk-based [http://safekeep.sourceforge.net/safekeep.html]<br />
| {{Yes}}<br />
| {{Yes}}<br />
| GPL<br />
| <br />
| {{No}}<br />
| Integrates with [[LVM]] and databases to create consistent backups. Bandwidth throttling.<br />
|-<br />
| [http://www.snebu.com Snebu]<br />
| {{AUR|snebu}}{{Broken package link|{{aur-mirror|snebu}}}}<br />
| C<br />
| Push or Pull<br />
| {{Yes}}<br />
| {{No}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| file-based [http://www.snebu.com/#_concepts]<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv3<br />
| <br />
| style="text-align:center;" | ?<br />
| Supports arbitrary retention schedules.<br />
|-<br />
| [http://www.initzero.it/portal/soluzioni/software-open-source/synbak-universal-backup-system_2623.html Synbak]<br />
| {{Pkg|synbak}}<br />
| Multitool wrapper<br />
| ?<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| ?<br />
| {{No}}<br />
| {{G|Web}}<br />
| GPLv3<br />
| <br />
| {{Yes}}<br />
| Unifies several backup methods.<br />
|-<br />
| [https://www.urbackup.org UrBackup]<br />
| [https://aur.archlinux.org/packages/?K=urbackup urbackup*] in [[AUR]]<br />
| C++<br />
| Pull<br />
| {{No}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Y|Internet transfers only}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| file-based,hard-links and symlinks[http://blog.urbackup.org/156/symbolically-linking-directories-during-incremental-file-backups]/chunk-based CoW-Snapshots[http://blog.urbackup.org/83/file-backup-storage-with-btrfs-snapshots]<br />
| {{Yes}} (client)<br />
| {{G|GUI, Web}}<br />
| AGPLv3+<br />
| Windows, macOS<br />
| {{Yes}}<br />
| Identical files across backups of the same or different clients are stored only once. Integrates with LVM, dattobd and btrfs for file system snapshots.<br />
|}<br />
<br />
== Cloud storage ==<br />
<br />
=== Third-party services ===<br />
<br />
{{Merge|List of applications#File sharing|Remove the extra bullet points: the Wikipedia comparison table, and the respective webpages and Wikipedia articles do a better job at describing them.}}<br />
<br />
See also [[Wikipedia:Comparison of online backup services]] and [[List of applications#Cloud synchronization clients]].<br />
<br />
{{Tip|{{aur|cryptomator}} is an open-source, multi-platform program designed to add client-side transparent encryption on cloud-shared files.}}<br />
<br />
* {{App|Amazon S3|Amazon Simple Storage Service (Amazon S3), provides developers and IT teams with secure, durable, highly-scalable object storage. Amazon S3 is easy to use, with a simple web service interface to store and retrieve any amount of data from anywhere on the web. With Amazon S3, you pay only for the storage you actually use. There is no minimum fee and no setup cost.|http://aws.amazon.com/s3/|{{Pkg|s3cmd}}}}<br />
<br />
* {{App|[[CrashPlan]]|An online/offsite backup solution.<br />
** Unlimited online space for very reasonable pricing.<br />
** Automatic and incremental backups to multiple destinations.<br />
** Intuitive GUI.<br />
** Offers encryption and de-duplication.<br />
** Software is free for local use.<br />
** Restore prevents simultaneous backing up<br />
|http://www.crashplan.com/|{{AUR|crashplan}}}}<br />
<br />
* {{App|[[Dropbox]]|A popular file-sharing service.<br />
** A daemon monitors a specified directory, and uploads incremental changes to dropbox.com. <br />
** Changes automatically show up on your other computers. <br />
** Includes file sharing and a public directory. <br />
** You can recover deleted files. <br />
** Community written add-ons. <br />
** Free accounts have 2GB storage.<br />
|http://www.dropbox.com|{{AUR|dropbox}} {{AUR|nautilus-dropbox}}}}<br />
<br />
* {{App|[[Wikipedia:Google Drive|Google Drive]]|A file storage and synchronization service provided by Google.<br />
** Provides cloud storage, file sharing and collaborative editing.<br />
** Multiple clients are available.<br />
|https://drive.google.com|{{AUR|google-drive-ocamlfuse}} (free), {{AUR|drive}} (free), {{AUR|grive}} (free), {{AUR|gdrivefs}} (free), [[insync]] (non-free)}}, {{AUR|gdrive}} (free), {{AUR|drivesync-git}} (free)<br />
<br />
* {{App|[[Wikipedia:IDrive_Inc.|iDrive]]|Universal Online Backup.<br />
** Multiple Device Backup.<br />
** Online File Sync. <br />
** Real-Time Backup. <br />
** Backup and Access from Mobile Devices. <br />
** Remote Manage. <br />
** No GUI Front end for Linux, command line based. A wrapper script is available to make it easier to use.<br />
|https://www.idrive.com/|}}<br />
<br />
* {{App|[[Wikipedia:Jungle Disk|Jungle Disk]]|An online backup tool that stores its data in Amazon S3 or Rackspace Cloud Files.<br />
** A GNOME Files extension.<br />
** Only paid plans available.<br />
|http://www.jungledisk.com/|}}<br />
<br />
* {{App|[[Wikipedia:Mega (website)|MEGA]]|Successor to the MegaUpload file-sharing service.<br />
** Free accounts are 50GB with paid plans available for more space.<br />
** Offers encryption and de-duplication.<br />
** Usually accessed through its web interface but other tools exist.<br />
|https://mega.co.nz|{{AUR|megatools}}, {{AUR|megasync}}, {{AUR|megafuse-git}}}}<br />
<br />
* {{App|Nutstore|A cloud service that lets you sync and share files anywhere.<br />
** Multiple file folders sync.<br />
** Service for Chinese users.<br />
|http://jianguoyun.com/|{{AUR|nutstore}}}}<br />
<br />
* {{App|OneDrive|Microsoft cloud service.<br />
|https://onedrive.com|{{AUR|onedrive-git}}}}<br />
<br />
* {{App|rsync.net|Cloud storage for offsite backups.<br />
** ZFS filesystem, accessible with any SSH/SFTP/SCP tool, running on a UNIX system.<br />
** Simple rsync synchronization with daily automatic ZFS snapshots.<br />
|http://www.rsync.net/|[[rsync]]/[[SSH]], {{Pkg|borg}}}}<br />
<br />
* {{App|[[Wikipedia:SpiderOak|SpiderOak]]|An online backup tool for Windows, Mac and Linux users to back up, share, sync, access and store their data.<br />
** Free account holds 2GB as a 60-day trial.<br />
** Includes file sharing and a public directory.<br />
** Incremental backup and sync are both supported.<br />
|https://spideroak.com/|{{AUR|spideroak-one}}}}<br />
<br />
* {{App|[[Wikipedia:Storage Made Easy|Storage Made Easy]]|Provides unified access to numerous cloud storage services, as well as its own storage.<br />
** Free and paid version available.<br />
** Free account holds 5GB and allows access to up to three other cloud storage providers.<br />
** Supports local directory via fuse, as well as web access.<br />
** Supports many cloud storage services, such as Box, Dropbox, Google Drive, Onedrive, and others.<br />
|http://storagemadeeasy.com/|}}<br />
<br />
* {{App|[[Wikipedia:Tarsnap|Tarsnap]]|A secure online backup service for Linux, BSD, macOS and Windows (through Cygwin).<br />
** Compressed encrypted backups to Amazon S3 Servers.<br />
** Automate via [[cron]].<br />
** Incremental backups.<br />
** Backup any files or directories.<br />
** Command line only client.<br />
** Pay only for usage (bandwidth and storage). <br />
|http://www.tarsnap.com|{{Pkg|tarsnap}}}}<br />
<br />
* {{App|[[Yandex Disk]]|Free cloud storage service created by Yandex.ru that gives you access to your photos, videos and documents from any internet-enabled device.|https://disk.yandex.ru/|{{AUR|yandex-disk}}}}<br />
<br />
==== Multi-service clients ====<br />
<br />
* {{App|[[Déjà Dup]]|A simple GTK+ backup program. It hides the complexity of doing backups the 'right way' (encrypted, off-site, and regular) and uses duplicity as the backend.<br />
** Automatic, timed backup configurable in GUI.<br />
** Restore wizard.<br />
** Integrated into the GNOME Files file manager.<br />
** Inherits several features of duplicity.<br />
|https://launchpad.net/deja-dup|{{Pkg|deja-dup}}}}<br />
<br />
* {{App|Duplicati|Backup client that securely stores encrypted, incremental, compressed backups on cloud storage services and remote file servers. It works with Amazon S3, Windows Live SkyDrive, Google Drive (Google Docs), Rackspace Cloud Files or WebDAV, SSH, FTP (and many more). Duplicati is open source and free.|http://www.duplicati.com/|{{AUR|duplicati-latest}}}}<br />
<br />
* {{App|[[Duplicity]]|A simple command-line utility which allows encrypted compressed incremental backup to nearly any storage.<br />
** Supports gpg encryption and signing.<br />
** Supports gzip compression.<br />
** Supports full or incremental backups, incremental backup stores only difference between new and old file.<br />
** Supports pushing over [http://duplicity.nongnu.org/duplicity.1.html#sect7 many protocols].<br />
|http://www.nongnu.org/duplicity/|{{Pkg|duplicity}}}}<br />
<br />
* {{App|[[Duply]]|Front-end for duplicity which simplifies running it by:<br />
** keeping recurring settings in profiles per backup job;<br />
** automated import/export of keys between profile and keyring;<br />
** enabling batch operations eg. backup_verify_purge;<br />
** executing pre/post scripts;<br />
** precondition checking for flawless duplicity operation.<br />
|http://www.duply.net/|{{AUR|duply}}}}<br />
<br />
* {{App|rclone|Rclone is a command line program to sync files and directories to and from Google Drive, Amazon S3, Openstack Swift / Rackspace cloud files / Memset Memstore, Dropbox, Google Cloud Storage and The local filesystem.|http://rclone.org/|{{Pkg|rclone}}}}<br />
<br />
* {{App|Syncany|Cloud storage and filesharing application with a focus on security and abstraction of storage.|https://www.syncany.org/|{{AUR|syncany}}}}<br />
<br />
=== Custom infrastructure ===<br />
<br />
See [[List of applications/Internet#Cloud storage servers]]<br />
<br />
== Version control systems ==<br />
<br />
{{Merge|List_of_applications#Work_environment|Also drop the extra bullets, the Wikipedia comparison table is much better than this.}}<br />
<br />
These are traditionally used for keeping track of software development; but if you want to have a simple way to manage your config files in one directory, it might be a good solution.<br />
<br />
See also [[Wikipedia:Comparison of revision control software]].<br />
<br />
* {{App|[[Bazaar]]|A distributed version control system that helps you track project history over time and to collaborate easily with others.<br />
** Similar commands to Subversion.<br />
** Supports working with or without a central server.<br />
** Support for working with some other revision control systems<br />
** Complete Unicode support.<br />
|https://bazaar.canonical.com/en/|{{Pkg|bzr}}}}<br />
<br />
* {{App|Darcs|A distributed revision control system that was designed to replace traditional, centralized source control systems such as CVS and Subversion.<br />
** Offline mode.<br />
** Easy branching and merging.<br />
** Written in Haskell.<br />
** Not very fast.<br />
|http://darcs.net/|{{Pkg|darcs}}}}<br />
<br />
* {{App|[[Git]]|A distributed revision control and source code management system with an emphasis on speed.<br />
** Very easy creation, merging, and deletion of branches.<br />
** Nearly all operations are performed locally, giving it a huge speed advantage on centralized systems.<br />
** Has a "staging area" or "index", this is an intermediate area where commits can be formatted and reviewed before completing the commit.<br />
** Does not handle binary files very well.<br />
|https://git-scm.com/|{{Pkg|git}}}}<br />
<br />
* {{App|[[Mercurial]]|A distributed version control system written in Python and similar in many ways to Git.<br />
** Platform independent.<br />
** Support for [http://mercurial.selenic.com/wiki/UsingExtensions extensions].<br />
** A set of commands consistent with Subversion.<br />
** Supports tags.<br />
|https://www.mercurial-scm.org/|{{Pkg|mercurial}}}}<br />
<br />
* {{App|[[Subversion]]|A full-featured centralized version control system originally designed to be a better CVS.<br />
** Renamed/copied/moved/removed files retain full revision history.<br />
** Native support for binary files, with space-efficient binary-diff storage.<br />
** Costs proportional to change size, not to data size.<br />
** Allows arbitrary metadata ("properties") to be attached to any file or directory. <br />
|https://subversion.apache.org/|{{Pkg|subversion}}}}<br />
<br />
== See also ==<br />
<br />
* [[Wikipedia:List of backup software]]<br />
* [[Wikipedia:Comparison of backup software]]<br />
* [https://github.com/restic/others Exhaustive list of backup solutions for Linux]<br />
* [http://www.halfgaar.net/backing-up-unix Backing up Linux and other Unix(-like) systems]<br />
* [http://www.askapache.com/security/mirror-using-rsync-ssh.html Mirroring an Entire Site using Rsync over SSH]<br />
* [http://www.si-journal.org/index.php/JSI/article/view/205 Performance comparison of five remote incremental backup tools: Rsync, Rdiff-backup, Duplicity, Areca and Link-Backup]<br />
* [http://blog.pointsoftware.ch/index.php/howto-local-and-remote-snapshot-backup-using-rsync-with-hard-links/ rsync-snapshot.sh] — Local and remote snapshot backup using rsync with hard links</div>Wzyboyhttps://wiki.archlinux.org/index.php?title=Plex&diff=509974Plex2018-02-06T18:28:40Z<p>Wzyboy: /* Resource Management */ systemd.resource-control(5): This setting is deprecated. Use MemoryMax= instead.</p>
<hr />
<div>[[Category:Streaming]]<br />
[[ja:Plex]]<br />
[https://www.plex.tv/ Plex] is a media player system and software suite consisting of many player applications for 10-foot user interfaces and an associated media server that organizes personal media stored on local devices. Integrated Plex Channels provide users with access to a growing number of online content providers such as YouTube, Vimeo, TEDTalks, and CNN among others. Plex also provides integration for cloud services including Dropbox, Box, Google Drive, or Copy.<br />
<br />
Plex for Linux is split into a closed-source server Plex Media Server, and an open-source client Plex Home Theater, a fork of the popular [[Kodi]] project.<br />
<br />
== Plex Media Server (PMS) ==<br />
<br />
=== Installation ===<br />
<br />
Install the {{AUR|plex-media-server}} package, or the {{AUR|plex-media-server-plexpass}} package if you have a Plex Pass.<br />
<br />
=== Setup ===<br />
<br />
[[Enable]] and start {{ic|plexmediaserver.service}}.<br />
<br />
To begin configuring PMS, browse to {{ic|http://localhost:32400/web/}}.<br />
<br />
To configure PMS remotely, you must first create an SSH tunnel (setup can only be done from <code>localhost</code>)<br />
<br />
<code>ssh ip.address.of.server -L 8888:localhost:32400</code><br />
<br />
and then browse to {{ic|http://localhost:8888/web/}}.<br />
<br />
=== Plugins ===<br />
<br />
PMS can be expanded with additional plugins. For example, PMS can be used as an IPTV client with the [https://github.com/Cigaras/IPTV.bundle IPTV plugin].<br />
<br />
Plugins can be installed inside {{ic|/var/lib/plex/Plex Media Server/Plug-ins}}.<br />
<br />
=== Plex Live TV and DVR ===<br />
<br />
Plex live TV requires a plexpass.<br />
<br />
To enable live TV viewing and DVR support with plex, you must have one of the supported tuners listed on the [https://support.plex.tv/hc/en-us/articles/225877427-Supported-DVR-Tuners-and-Antennas support page] and {{AUR|plex-media-server-plexpass}} installed. PMS will automatically recognize any connected tuners.<br />
<br />
The plex user needs to be part of the video group in order to access local tuners. This can be done by running {{ic|usermod -a -G video plex}}<br />
<br />
=== Security ===<br />
<br />
It is recommended to store your media files outside of your home directory, as making it accessible to PMS would mean lowering its security. Having a separate {{ic|/media}} or {{ic|/mnt/media}} partition is a good setup for use with PMS.<br />
<br />
You can further increase security via systemd, by [[edit]]ing {{ic|plexmediaserver.service}} as follows: <br />
<br />
{{hc|/etc/systemd/system/plexmediaserver.service.d/restrict.conf|2=<br />
[Service]<br />
ReadOnlyDirectories=/<br />
ReadWriteDirectories=/var/lib/plex /tmp}}<br />
<br />
{{Note|Those mechanisms are currently limited, see [[DeveloperWiki:Security#ReadOnly/ReadWrite]]{{Broken section link}}. For instance, ReadOnlyDirectories do not apply to any submount, you have to list them as well.}}<br />
<br />
=== Resource Management ===<br />
<br />
Originally, PMS used ulimit to limit its allocated resources, however this is not compatible with running as a regular user. Instead, you can now set a maximum amount of memory via, again, systemd. For example, you can add:<br />
<br />
MemoryMax=4G<br />
<br />
to the file mentioned above.<br />
<br />
=== Network ===<br />
<br />
{{Note|PMS supports both IPv4 and IPv6. This section only assumes the use of IPv4.}}<br />
<br />
PMS and its DLNA server require several ports to be open:<br />
<br />
*Plex Media Server: TCP 32400<br />
*Plex DLNA Server: TCP 32469, UDP 1900<br />
*Network Discovery: UDP 32410, 32412, 32413, 32414<br />
*Bonjour/Avahi Network Discovery (legacy): UDP 5353<br />
<br />
A short example with iptables:<br />
<br />
# iptables -A INPUT -p tcp -m multiport --dports 32400,32469 -j ACCEPT<br />
# iptables -A INPUT -p udp -m multiport --dports 1900,32410,32412,32413,32414 -j ACCEPT<br />
<br />
In order to connect to Plex through on a standard http port, this command can be used (for port 8080):<br />
<br />
#iptables -t nat -A PREROUTING -p tcp --dport 8080 -j REDIRECT --to-port 32400<br />
<br />
Then you can connect directly to http://yourplexaddress:8080 on this port<br />
<br />
===Library Updates===<br />
Plex Media Server has a setting "Update my library automatically" which can detect new media files as they're downloaded to your library. But as your library grows, these updates might stop working reliably. To fix, you need to increase the number of files non-root users are allowed to subscribe to via inotify. Create the file {{ic|/etc/sysctl.d/40-max-user-watches.conf}}<br />
<br />
{{hc|/etc/sysctl.d/40-max-user-watches.conf|2=<br />
fs.inotify.max_user_watches=524288<br />
}}<br />
<br />
and run {{ic|sudo sysctl --system}} to apply without rebooting. Now plex should see any new files.<br />
<br />
=== Troubleshooting ===<br />
<br />
{{Expansion|1=Look if journalctl can be made equivalent with {{ic|1=SYSTEMD_LOG_LEVEL=debug}}, currently appears unreliable, see [[User talk:Alucryd#Plex]]}}<br />
<br />
Logs are located in:<br />
<br />
/var/lib/plex/Plex Media Server/Logs<br />
<br />
In case there are no logs or they are not helpful, you might want to launch PMS manually to get some terminal output:<br />
<br />
sudo -u plex /usr/bin/bash<br />
source /etc/conf.d/plexmediaserver<br />
export LD_LIBRARY_PATH=/opt/plexmediaserver<br />
/opt/plexmediaserver/Plex\ Media\ Server<br />
<br />
== Plex Home Theater (PHT) ==<br />
<br />
Previously known as Plex Media Center, Plex Home Theater is the software component used for a long time as the front-end media player for Plex's back-end server component Plex Media Server. This component came from a fork of XBMC Media Center software on May 21, 2008.<br />
<br />
Official support for Plex Home Theater (from Plex, Inc.) has been discontinued in favour of Plex Media Player (based on MPV). However, Plex Home Theater has been forked and is still under active development by the Open Source community under the name [https://github.com/RasPlex/OpenPHT OpenPHT]<br />
<br />
=== Installation ===<br />
<br />
[[Install]] the {{AUR|openpht}} package.<br />
<br />
Plex Home Theater can be launched by running {{ic|plexhometheater.sh}} from your terminal.<br />
<br />
== Plex Media Player (PMP) ==<br />
<br />
Plex Media Player is the current release of Plex's media client. It has officially replaced [[#Plex Home Theater .28PHT.29|#Plex Home Theater (PHT)]] (which is still receiving bug fixes) and builds upon previous functionality, such as using mpv. Plex has made PMP [https://www.plex.tv/blog/plex-media-player-now-ambidextrous-free-kodi-said/ available] to all users and it has also become compatible with Kodi. Keep in mind, PMP is not open-source (unlike PHT).<br />
<br />
=== Installation ===<br />
<br />
[[Install]] the {{AUR|plex-media-player}} package.<br />
<br />
== Kodi and PleXBMC ==<br />
<br />
With the PleXBMC add-on, Kodi can be used as a replacement for PHT.<br />
<br />
=== Installation ===<br />
<br />
Install the {{Pkg|kodi}} package, then follow the instructions over [http://kodi.wiki/view/Add-on:PleXBMC here].</div>Wzyboyhttps://wiki.archlinux.org/index.php?title=Btrfs&diff=426337Btrfs2016-03-18T10:41:55Z<p>Wzyboy: /* Scrub */ Fix typo</p>
<hr />
<div>[[Category:File systems]]<br />
[[ja:Btrfs]]<br />
[[zh-CN:Btrfs]]<br />
{{Related articles start}}<br />
{{Related|File systems}}<br />
{{Related|Btrfs - Tips and tricks}}<br />
{{Related|Mkinitcpio-btrfs}}<br />
{{Related|Snapper}}<br />
{{Related articles end}}<br />
<br />
From [[Wikipedia:Btrfs]]<br />
<br />
:''Btrfs (B-tree file system, pronounced as "butter F S", "better F S", "b-tree F S", or simply by spelling it out) is a file system based on the copy-on-write (COW) principle, initially designed at Oracle Corporation for use in Linux. The development of Btrfs began in 2007, and by August 2014, the file system's on-disk format has been marked as stable.''<br />
<br />
From [https://btrfs.wiki.kernel.org/index.php/Main_Page Btrfs Wiki]<br />
<br />
:''Btrfs is a new copy on write (CoW) filesystem for Linux aimed at implementing advanced features while focusing on fault tolerance, repair and easy administration. Jointly developed at Oracle, Red Hat, Fujitsu, Intel, SUSE, STRATO and many others, Btrfs is licensed under the GPL and open for contribution from anyone.''<br />
<br />
{{Warning|<br />
* Btrfs has some features that are considered experimental. See the Btrfs Wiki's [https://btrfs.wiki.kernel.org/index.php/Main_Page#Stability_status Stability status,] [https://btrfs.wiki.kernel.org/index.php/FAQ#Is_btrfs_stable.3F Is Btrfs stable,] and [https://btrfs.wiki.kernel.org/index.php/Getting_started Getting started] for more detailed information.<br />
* Beware of the [[#Limitations|limitations]].<br />
}}<br />
<br />
== Preparation ==<br />
<br />
The official kernels {{Pkg|linux}} and {{Pkg|linux-lts}} include support for Btrfs. Additionally [[GRUB]], [[mkinitcpio]], and [[Syslinux]] have support for Btrfs and require no additional configuration.<br />
<br />
User space utilities are available by [[installing]] the {{Pkg|btrfs-progs}} package.<br />
<br />
== Partitioning ==<br />
<br />
{{Accuracy|[[Grub#Install_to_partition_or_partitionless_disk]] warns against using it on a partitionless disk.}}<br />
<br />
Btrfs can occupy an entire data storage device, replacing the [[MBR]] or [[GPT]] partitioning schemes; however, this is not required to simply [[#Creating_a_new_file_system|create a Btrfs filesystem]] on an existing [[partition]] that was created using another method. If using Btrfs for partitioning, one can use [[#Sub-volumes|subvolumes]] to simulate partitions.<br />
There are some limitations to this approach in single disk setups:<br />
<br />
* Cannot use different [[file systems]] for different [[fstab|mount points]].<br />
* Cannot use [[Swap|swap area]] as Btrfs does not support [[Swap#Swap_file|swap files]] and there is no place to create [[Swap#Swap_partition|swap partition]]. This also limits the use of hibernation/resume, which needs a swap area to store the hibernation image.<br />
* Cannot use [[UEFI]] to boot.<br />
<br />
To overwrite the existing partition table with Btrfs, run the following command:<br />
<br />
# mkfs.btrfs /dev/sd''X''<br />
<br />
For example, use {{ic|/dev/sda}} rather than {{ic|/dev/sda1}}. The latter would format an existing partition instead of replacing the entire partitioning scheme.<br />
<br />
Install the [[boot loader]] like you would for a data storage device with a [[Master Boot Record]]. For example, in the case of [[GRUB#Install_to_440-byte_MBR_boot_code_region|GRUB]]:<br />
<br />
# grub-install --recheck /dev/sd''X''<br />
<br />
{{Warning|Using the {{ic|btrfs subvolume set-default}} command to change the default sub-volume from anything other than the top level (ID 0) may break Grub. See [[#Setting a default sub-volume]] to reset.}}<br />
<br />
== File system creation ==<br />
<br />
A Btrfs file system can either be newly created or have one converted.<br />
<br />
=== Creating a new file system ===<br />
<br />
==== File system on a single device ====<br />
<br />
To format a partition do:<br />
<br />
# mkfs.btrfs -L ''mylabel'' /dev/''partition''<br />
<br />
The Btrfs default blocksize is 16KB. To use a larger blocksize for data/metadata, specify a value for the {{ic|nodesize}} via the {{ic|-n}} switch as shown in this example using 16KB blocks:<br />
<br />
# mkfs.btrfs -L ''mylabel'' -n 16k /dev/''partition''<br />
<br />
==== Multi-device file system ====<br />
<br />
Multiple devices can be entered to create a RAID. Supported RAID levels include RAID 0, RAID 1, RAID 10, RAID 5 and RAID 6. The RAID levels can be configured separately for data and metadata using the {{ic|-d}} and {{ic|-m}} options respectively. By default the metadata is mirrored and data is striped. See [https://btrfs.wiki.kernel.org/index.php/Using_Btrfs_with_Multiple_Devices Using Btrfs with Multiple Devices] for more information about how to create a Btrfs RAID volume.<br />
<br />
# mkfs.btrfs [''options''] /dev/''part1'' /dev/''part2'' ...<br />
<br />
{{Note|Mounting such a filesystem may result in all but one of the according ''.device''-jobs getting stuck and systemd never finishing startup due to a [https://github.com/systemd/systemd/issues/1921 bug] in handling this type of filesystem.}}<br />
<br />
See [[#RAID|RAID]] for advice on maintenance specific to multi-device Btrfs file systems.<br />
<br />
=== Converting a file system from Ext3/4 ===<br />
<br />
{{Warning| As of mid-to-late 2015, there are many reports on the btrfs mailing list about incomplete/corrupt/broken conversions. The situation is improving as patches are being submitted, but proceed very carefully. Make sure you have ''working'' backups of any data you cannot afford to lose. See [https://btrfs.wiki.kernel.org/index.php/Conversion_from_Ext3 Conversion from Ext3] on the btrfs wiki.}}<br />
<br />
Boot from an install CD, then convert by doing:<br />
<br />
# btrfs-convert /dev/''partition''<br />
<br />
Mount the partion and test the conversion by checking the files. Be sure to change the {{ic|/etc/fstab}} to reflect the change ('''type''' to {{ic|btrfs}} and '''fs_passno''' [the last field] to {{ic|0}} as Btrfs does not do a file system check on boot). Also note that the UUID of the partition will have changed, so update fstab accordingly when using UUIDs. {{ic|chroot}} into the system and rebuild the GRUB menu list (see [[Install from existing Linux]] and [[GRUB]] articles). If converting a root filesystem, while still chrooted run {{ic|mkinitcpio -p linux}} to regenerate the initramfs or the system will not successfully boot. If you get stuck in grub with 'unknown filesystem' try reinstalling grub with {{ic|grub-install /dev/''partition''}} and regenerate the config as well {{ic|grub-mkconfig -o /boot/grub/grub.cfg}}.<br />
<br />
After confirming that there are no problems, complete the conversion by deleting the backup {{ic|ext2_saved}} sub-volume. Note that you cannot revert back to ext3/4 without it.<br />
<br />
# btrfs subvolume delete /ext2_saved<br />
<br />
Finally [[#Balance|balance]] the file system to reclaim the space.<br />
<br />
== Configuring the file system ==<br />
<br />
=== Mount options ===<br />
<br />
{{Warning|Specific mount options can disable safety features and increase the risk of complete file system corruption.}}<br />
<br />
See [https://btrfs.wiki.kernel.org/index.php/Mount_options Btrfs Wiki Mount options] and [https://btrfs.wiki.kernel.org/index.php/Gotchas Btrfs Wiki Gotchas] for more information.<br />
<br />
In addition to configurations that can be made during or after file system creation, the various mount options for Btrfs can drastically change its performance characteristics.<br />
<br />
As this is a file system that is still in active development, changes and regressions should be expected. See links in the [[#See also]] section for some benchmarks.<br />
<br />
==== Examples ====<br />
<br />
* '''Linux 3.15'''<br />
** Btrfs on a SSD for system installation and an emphasis on maximizing performance (also read [[#SSD TRIM]])<br />
*:{{bc|1=noatime,discard,ssd,compress=lzo,space_cache}}<br />
** Btrfs on a HDD for archival purposes with an emphasis on maximizing space.<br />
*: {{bc|1=noatime,autodefrag,compress-force=lzo,space_cache}}<br />
<br />
=== Copy-On-Write (CoW) ===<br />
<br />
By default, Btrfs performs copy-on-write for all files, at all times: If you write a file that did not exist before, then the data is written to empty space, and some of the metadata blocks that make up the filesystem are copied-on-write. In a traditional filesystem, if you then go back and overwrite a piece of that file, then the piece you are writing is put directly over the data it is replacing. In a CoW filesystem, the new data is written to a piece of free space on the disk, and only then is the file's metadata changed to refer to the new data. The old data that was replaced can then be freed up if nothing points to it any more.<br />
<br />
Copy-on-write comes with some advantages, but can negatively affect performance with large files that have small random writes because it will fragment them (even if no "copy" is ever performed!). It is recommended to disable copy-on-write for database files and virtual machine images. <br />
<br />
One can disable copy-on-write for the entire block device by mounting it with {{ic|nodatacow}} option. However, this will disable copy-on-write for the entire file system.<br />
<br />
{{Note|{{ic|nodatacow}} will only affect newly created files. Copy-on-write may still happen for existing files.}}<br />
<br />
To disable copy-on-write for single files/directories do:<br />
<br />
$ chattr +C ''/dir/file''<br />
<br />
This will disable copy-on-write for those operation in which there is only one reference to the file. If there is more than one reference (e.g. through {{ic|1=cp --reflink=always}} or because of a filesystem snapshot), copy-on-write still occurs.<br />
<br />
{{Note|From chattr man page: For Btrfs, the 'C' flag should be set on new or empty files. If it is set on a file which already has data blocks, it is undefined when the blocks assigned to the file will be fully stable. If the 'C' flag is set on a directory, it will have no effect on the directory, but new files created in that directory will have the {{ic|No_COW}} attribute.}}<br />
<br />
{{Tip|In accordance with the note above, you can use the following trick to disable copy-on-write on existing files in a directory:<br />
$ mv ''/path/to/dir'' ''/path/to/dir''_old<br />
$ mkdir ''/path/to/dir''<br />
$ chattr +C ''/path/to/dir''<br />
$ cp -a ''/path/to/dir''_old/* ''/path/to/dir''<br />
$ rm -rf ''/path/to/dir''_old<br />
Make sure that the data are not used during this process. Also note that {{ic|mv}} or {{ic|cp --reflink}} as described below will not work.<br />
}}<br />
<br />
Likewise, to save space by forcing copy-on-write when copying files use:<br />
<br />
$ cp --reflink ''source'' ''dest'' <br />
<br />
As {{ic|''dest''}} file is changed, only those blocks that are changed from source will be written to the disk. One might consider aliasing ''cp'' to {{ic|1=cp --reflink=auto}}.<br />
<br />
=== Compression ===<br />
<br />
Btrfs supports transparent compression, meaning every file on the partition is automatically compressed. This not only reduces the size of files, but also [http://www.phoronix.com/scan.php?page=article&item=btrfs_compress_2635&num=1 improves performance], in particular if using the [http://www.phoronix.com/scan.php?page=article&item=btrfs_lzo_2638&num=1 lzo algorithm], in some specific use cases (e.g. single thread with heavy file IO), while obviously harming performance on other cases (e.g. multithreaded and/or cpu intensive tasks with large file IO).<br />
<br />
Compression is enabled using the {{ic|1=compress=zlib}} or {{ic|1=compress=lzo}} mount options. Only files created or modified after the mount option is added will be compressed. However, it can be applied quite easily to existing files (e.g. after a conversion from ext3/4) using the {{ic|btrfs filesystem defragment -c''alg''}} command, where {{ic|''alg''}} is either {{ic|zlib}} or {{ic|lzo}}. In order to re-compress the whole file system with {{pkg|lzo}}, run the following command:<br />
<br />
# btrfs filesystem defragment -r -v -clzo /<br />
<br />
{{Tip|Compression can also be enabled per-file without using the {{ic|compress}} mount option; simply apply {{ic|chattr +c}} to the file. When applied to directories, it will cause new files to be automatically compressed as they come.}}<br />
<br />
When installing Arch to an empty Btrfs partition, use the {{ic|compress}} option when [[Beginners' guide#Format the file systems and enable swap|mounting the filesystem]]: {{ic|1=mount -o compress=lzo /dev/sd''xY'' /mnt/}}. During [[Beginners' guide#Configuration|configuration]], add {{ic|1=compress=lzo}} to the mount options of the root file system in [[fstab]].<br />
<br />
=== Subvolumes ===<br />
<br />
''A btrfs subvolume is not a block device (and cannot be treated as one) instead, a btrfs subvolume can be thought of as a POSIX file namespace. This namespace can be accessed via the top-level subvolume of the filesystem, or it can be mounted in its own right.''[https://btrfs.wiki.kernel.org/index.php/SysadminGuide#Subvolumes]<br />
<br />
Each Btrfs file system has a top-level subvolume with ID 5. It can be mounted itself as "/" (by default), or another subvolume can be [[#Mounting_subvolumes|mounted]].<br />
<br />
See the following links for more details:<br />
* [https://btrfs.wiki.kernel.org/index.php/SysadminGuide#Subvolumes Btrfs Wiki SysadminGuide#Subvolumes]<br />
* [https://btrfs.wiki.kernel.org/index.php/Getting_started#Basic_Filesystem_Commands Btrfs Wiki Getting started#Basic Filesystem Commands]<br />
* [https://btrfs.wiki.kernel.org/index.php/Trees Btrfs Wiki Trees] <br />
<br />
==== Creating a subvolume ====<br />
<br />
To create a subvolume:<br />
<br />
# btrfs subvolume create ''/path/to/subvolume''<br />
<br />
==== Listing subvolumes ====<br />
<br />
To see a list of current subvolumes:<br />
<br />
# btrfs subvolume list -p .<br />
<br />
==== Deleting a subvolume ====<br />
<br />
To delete a subvolume:<br />
<br />
# btrfs subvolume delete ''/path/to/subvolume''<br />
<br />
Attempting to remove the directory ''/path/to/subvolume'' without using the above command will not delete the subvolume.<br />
<br />
==== Mounting subvolumes ====<br />
<br />
Subvolumes can be mounted like file system partitions using the {{ic|1=subvol=''/path/to/subvolume''}} or {{ic|1=subvolid=''objectid''}} mount flags. For example, you could have a subvolume named 'subvol_root' and mount it as '/'. One can mimic traditional file system partitions by creating various subvolumes under the top level of the file system and then mounting them at the appropriate mount points. Thus one can easily restore a file system (or part of it) to a previous state easily using [[#Snapshots]].<br />
<br />
{{Tip|1= Changing subvolume layouts is made simpler by not using the toplevel subvolume (ID=5) as "/" (which is done by default). Instead, consider creating a subvolume to house your actual data and mounting it as "/".}}<br />
<br />
See [[Snapper#Suggested_Filesystem_Layout]], [https://btrfs.wiki.kernel.org/index.php/SysadminGuide#Managing_Snapshots Btrfs SysadminGuide#Managing Snapshots], and [https://btrfs.wiki.kernel.org/index.php/SysadminGuide#Layout Btrfs SysadminGuide#Layout] for example file system layouts using subvolumes.<br />
<br />
==== Changing the default sub-volume ====<br />
<br />
{{Warning|Changing the default subvolume with {{ic|btrfs subvolume set-default}} will make the top level of the filesystem inaccessible, except by use of the {{ic|1=subvolid=5}} mount option. Reference: [https://btrfs.wiki.kernel.org/index.php/SysadminGuide Btrfs Wiki Sysadmin Guide].}}<br />
<br />
The default sub-volume is mounted if no {{ic|1=subvol=}} mount option is provided.<br />
<br />
# btrfs subvolume set-default ''subvolume-id'' /.<br />
<br />
'''Example:'''<br />
<br />
{{hc|# btrfs subvolume list .|<br />
ID 258 gen 9512 top level 5 path root_subvolume<br />
ID 259 gen 9512 top level 258 path home<br />
ID 260 gen 9512 top level 258 path var<br />
ID 261 gen 9512 top level 258 path usr<br />
}}<br />
<br />
# btrfs subvolume set-default 258 .<br />
<br />
'''Reset:'''<br />
<br />
# btrfs subvolume set-default 5 .<br />
<br />
=== Commit interval settings ===<br />
<br />
The resolution at which data are written to the filesystem is dictated by Btrfs itself and by system-wide settings. Btrfs defaults to a 30 seconds checkpoint interval in which new data are committed to the filesystem. This is tuneable using mount options (see below)<br />
<br />
System-wide settings also affect commit intervals. They include the files under {{ic|/proc/sys/vm/*}} and are out-of-scope of this wiki article. The kernel documentation for them resides in {{ic|Documentation/sysctl/vm.txt}}.<br />
<br />
=== Checkpoint interval ===<br />
<br />
Starting with Linux 3.12, users are able to change the checkpoint interval from the default 30 s to any value by appending the {{ic|commit}} mount option in {{ic|/etc/fstab}} for the btrfs partition.<br />
<br />
LABEL=arch64 / btrfs defaults,noatime,ssd,compress=lzo,commit=120 0 0<br />
<br />
=== SSD TRIM ===<br />
A Btrfs filesystem will automatically free unused blocks from an SSD drive supporting the TRIM command.<br />
<br />
More information about enabling and using TRIM can be found in [[Solid State Drives#TRIM]].<br />
<br />
== Usage ==<br />
<br />
=== Displaying used/free space ===<br />
<br />
General linux userspace tools such as {{ic|/usr/bin/df}} will inaccurately report free space on a Btrfs partition since it does not take into account space allocated for and used by the metadata. It is recommended to use {{ic|/usr/bin/btrfs}} to query a Btrfs partition. Below is an illustration of this effect, first querying using {{ic|df -h}}, and then using {{ic|btrfs filesystem df}}:<br />
<br />
{{hc|$ df -h /|<br />
Filesystem Size Used Avail Use% Mounted on<br />
/dev/sda3 119G 3.0G 116G 3% /<br />
}}<br />
<br />
{{hc|$ btrfs filesystem df /|2=<br />
Data: total=3.01GB, used=2.73GB<br />
System: total=4.00MB, used=16.00KB<br />
Metadata: total=1.01GB, used=181.83MB<br />
}}<br />
<br />
Notice that {{ic|df -h}} reports 3.0GB used but {{ic|btrfs filesystem df}} reports 2.73GB for the data. This is due to the way Btrfs allocates space into the pool. The true disk usage is the sum of all three 'used' values which is inferior to 3.0GB as reported by {{ic|df -h}}.<br />
<br />
{{Note|1=If you see an entry of type {{ic|unknown}} in the output of {{ic|btrfs filesystem df}} at kernel >= 3.15, this is a display bug. As of [http://thread.gmane.org/gmane.comp.file-systems.btrfs/34419 this patch], the entry means GlobalReserve, which is kind of a buffer for changes not yet flushed. This entry is displayed as {{ic|unknown, single}} in RAID setups and is not possible to re-balance.}}<br />
<br />
Another useful command to show a less verbose readout of used space is {{ic|btrfs filesystem show}}:<br />
<br />
# btrfs filesystem show /dev/sda3<br />
<br />
The newest command to get information on free/used space of a is {{ic|btrfs filesystem usage}}:<br />
<br />
# btrfs filesystem usage<br />
<br />
{{Note|1=The {{ic|btrfs filesystem usage}} command does not currently work correctly with {{ic|RAID5/RAID6}} RAID levels.}}<br />
<br />
=== Defragmentation ===<br />
<br />
Btrfs supports online defragmentation. To defragment the metadata of the root folder:<br />
<br />
# btrfs filesystem defragment /<br />
<br />
This ''will not'' defragment the entire file system. For more information read [https://btrfs.wiki.kernel.org/index.php/Problem_FAQ#Defragmenting_a_directory_doesn.27t_work this page] on the Btrfs wiki.<br />
<br />
To defragment the entire file system verbosely:<br />
<br />
# btrfs filesystem defragment -r -v /<br />
<br />
=== Scrub ===<br />
The [https://btrfs.wiki.kernel.org/index.php/Glossary Btrfs Wiki Glossary] says that Btrfs scrub is ''an online filesystem checking tool. Reads all the data and metadata on the filesystem, and uses checksums and the duplicate copies from RAID storage to identify and repair any corrupt data.''<br />
<br />
# btrfs scrub start /<br />
# btrfs scrub status /<br />
<br />
{{Warning|The running scrub process will prevent the system from suspending, see [http://comments.gmane.org/gmane.comp.file-systems.btrfs/33106 this thread] for details.}}<br />
<br />
The {{Pkg|btrfs-progs}} package brings the {{ic|btrfs-scrub@.timer}} unit for monthly scrubbing the specified mountpoint. [[Enable]] the timer with an encoded path, e.g. {{ic|btrfs-scrub@-.timer}} for {{ic|/}} and {{ic|btrfs-scrub@home.timer}} for {{ic|/home}}.<br />
<br />
You can also run the scrub manually by [[starting]] {{ic|btrfs-scrub@.service}} (with the same encoded path). The advantage of this over {{ic|# btrfs scrub}} is that the results of the scrub will be logged in the [[systemd journal]].<br />
<br />
=== Balance ===<br />
<br />
''A balance passes all data in the filesystem through the allocator again. It is primarily intended to rebalance the data in the filesystem across the devices when a device is added or removed. A balance will regenerate missing copies for the redundant RAID levels, if a device has failed.'' [https://btrfs.wiki.kernel.org/index.php/Glossary] See [https://btrfs.wiki.kernel.org/index.php/FAQ#What_does_.22balance.22_do.3F Upstream FAQ page].<br />
<br />
# btrfs balance start /<br />
# btrfs balance status /<br />
<br />
=== RAID ===<br />
<br />
Btrfs works in block-pairs for raid0, raid1, and raid10. This means:<br />
<br />
raid0 - block-pair striped across 2 devices<br />
<br />
raid1 - block-pair written to 2 devices<br />
<br />
The RAID level can be changed while the disks are online using the {{ic|btrfs balance}} command:<br />
<br />
# btrfs balance start -mconvert=RAIDLEVEL -dconvert=RAIDLEVEL /path/to/mount<br />
<br />
For 2 disk sets, this matches raid levels as defined in md-raid (mdadm). For 3+ disk-sets, the result is entirely different than md-raid. <br />
<br />
For example:<br />
* Three 1TB disks in an md based raid1 yields a {{ic|/dev/md0}} with 1TB free space and the ability to safely lose 2 disks without losing data.<br />
* Three 1TB disks in a Btrfs volume with data=raid1 will allow the storage of approximately 1.5TB of data before reporting full. Only 1 disk can safely be lost without losing data.<br />
<br />
Btrfs uses a round-robin scheme to decide how block-pairs are spread among disks. As of Linux 3.0, a quasi-round-robin scheme is used which prefers larger disks when distributing block pairs. This allows raid0 and raid1 to take advantage of most (and sometimes all) space in a disk set made of multiple disks. For example, a set consisting of a 1TB disk and 2 500GB disks with data=raid1 will place a copy of every block on the 1TB disk and alternate (round-robin) placing blocks on each of the 500GB disks. Full space utilization will be made. A set made from a 1TB disk, a 750GB disk, and a 500GB disk will work the same, but the filesystem will report full with 250GB unusable on the 750GB disk. To always take advantage of the full space (even in the last example), use data=single. (data=single is akin to JBOD defined by some raid controllers) See [https://btrfs.wiki.kernel.org/index.php/FAQ#How_much_space_do_I_get_with_unequal_devices_in_RAID-1_mode.3F the Btrfs FAQ] for more info.<br />
<br />
=== Snapshots ===<br />
<br />
''A snapshot is simply a subvolume that shares its data (and metadata) with some other subvolume, using btrfs's COW capabilities.'' See [https://btrfs.wiki.kernel.org/index.php/SysadminGuide#Snapshots Btrfs Wiki SysadminGuide#Snapshots] for details.<br />
<br />
To create a snapshot:<br />
<br />
# btrfs subvolume snapshot ''source'' [''dest''/]''name''<br />
<br />
To create a readonly snapshot add the {{ic|-r}} flag. To create writable version of a readonly snapshot, simply create a snapshot of it.<br />
<br />
{{Note|Snapshots are not recursive. Every sub-volume inside sub-volume will be an empty directory inside the snapshot.}}<br />
<br />
=== Send/receive ===<br />
<br />
A subvolume can be sent to stdout or a file using the {{ic|send}} command. This is usually most useful when piped to a Btrfs {{ic|receive}} command. For example, to send a snapshot named {{ic|/root_backup}} (perhaps of a snapshot you made of {{ic|/}} earlier) to {{ic|/backup}} you would do the following:<br />
<br />
# btrfs send /root_backup | btrfs receive /backup<br />
<br />
The snapshot that is sent ''must'' be readonly. The above command is useful for copying a subvolume to an external device (''e.g.'', a USB disk mounted at {{ic|/backup}} above).<br />
<br />
You can also send only the difference between two snapshots. For example, let's say you've already sent a copy of {{ic|root_backup}} above and have made a new readonly snapshot on your system named {{ic|root_backup_new}}. To send only the incremental difference to {{ic|/backup}} do:<br />
<br />
# btrfs send -p /root_backup /root_backup_new | btrfs send /backup<br />
<br />
Now a new subvolume named {{ic|root_backup_new}} will be present in {{ic|/backup}}.<br />
<br />
See [https://btrfs.wiki.kernel.org/index.php/Incremental_Backup Btrfs Wiki's Incremental Backup page] on how to use this for an incremental backup and for tools that automate the process.<br />
<br />
== Limitations ==<br />
<br />
A few limitations should be known before trying.<br />
<br />
=== Encryption ===<br />
<br />
Btrfs has no built-in encryption support, but this may come in future. Users can encrypt the partition before running {{ic|mkfs.btrfs}}. See [[dm-crypt]]. <br />
<br />
Existing Btrfs file systems can use something like [[EncFS]] or [[TrueCrypt]], though perhaps without some of Btrfs' features.<br />
<br />
=== Swap file ===<br />
<br />
Btrfs does not yet support [[Swap#Swap_file|swap files]]. This is due to swap files requiring a function that Btrfs doesn't have for possibility of file system corruption [https://btrfs.wiki.kernel.org/index.php/FAQ#Does_btrfs_support_swap_files.3F]. Patches for swapfile support are already available [https://lkml.org/lkml/2014/12/9/718] and may be included in an upcoming kernel release. As an alternative a swap file can be mounted on a loop device with poorer performance but will not be able to hibernate. Install the package {{Pkg|systemd-swap}} from the [[official repositories]] to automate this.<br />
<br />
=== Linux-rt kernel ===<br />
<br />
As of version 3.14.12_rt9, the [[Kernel#-rt|linux-rt]] kernel does not boot with the Btrfs file system. This is due to the slow development of the ''rt'' patchset.<br />
<br />
== Tips and tricks ==<br />
<br />
See [[Btrfs - Tips and tricks]].<br />
<br />
== Troubleshooting ==<br />
<br />
See the [https://btrfs.wiki.kernel.org/index.php/Problem_FAQ Btrfs Problem FAQ] for general troubleshooting.<br />
<br />
=== GRUB ===<br />
<br />
==== Partition offset ====<br />
<br />
{{Note|1=The offset problem may happen when you try to embed {{ic|core.img}} into a partitioned disk. It means that [https://wiki.archlinux.org/index.php?title=Talk:Btrfs&diff=319474&oldid=292530 it is OK] to embed grub's {{ic|corg.img}} into a Btrfs pool on a partitionless disk (e.g. {{ic|/dev/sd''X''}}) directly.}}<br />
<br />
[[GRUB]] can boot Btrfs partitions however the module may be larger than other [[file systems]]. And the {{ic|core.img}} file made by {{ic|grub-install}} may not fit in the first 63 sectors (31.5KiB) of the drive between the MBR and the first partition. Up-to-date partitioning tools such as {{ic|fdisk}} and {{ic|gdisk}} avoid this issue by offsetting the first partition by roughly 1MiB or 2MiB.<br />
<br />
==== Missing root ====<br />
<br />
Users experiencing the following: {{ic|1=error no such device: root}} when booting from a RAID style setup then edit /usr/share/grub/grub-mkconfig_lib and remove both quotes from the line {{ic|1=echo " search --no-floppy --fs-uuid --set=root ${hints} ${fs_uuid}"}}. Regenerate the config for grub and the system should boot without an error.<br />
<br />
=== BTRFS: open_ctree failed ===<br />
<br />
As of November 2014 there seems to be a bug in [[systemd]] or [[mkinitcpio]] causing the following error on systems with multi-device Btrfs filesystem using the {{ic|btrfs}} hook in {{ic|mkinitcpio.conf}}:<br />
<br />
{{bc|<nowiki><br />
BTRFS: open_ctree failed<br />
mount: wrong fs type, bad option, bad superblock on /dev/sdb2, missing codepage or helper program, or other error<br />
<br />
In some cases useful info is found in syslog - try dmesg|tail or so.<br />
<br />
You are now being dropped into an emergency shell.<br />
</nowiki>}}<br />
<br />
A workaround is to remove {{ic|btrfs}} from the {{ic|HOOKS}} array in {{ic|/etc/mkinitcpio.conf}} and instead add {{ic|btrfs}} to the {{ic|MODULES}} array. Then regenerate the initramfs with {{ic|mkinitcpio -p linux}} (adjust the preset if needed) and reboot.<br />
<br />
See the [https://bbs.archlinux.org/viewtopic.php?id=189845 original forums thread] and {{Bug|42884}} for further information and discussion.<br />
<br />
You will get the same error if you try to mount a raid array without one of the devices. In that case you must add the {{ic|degraded}} mount option to {{ic|/etc/fstab}}. If your root resides on the array, you must also add {{ic|1=rootflags=degraded}} to your [[kernel parameters]].<br />
<br />
=== btrfs check ===<br />
{{Warning|Since Btrfs is under heavy development, especially the {{ic|btrfs check}} command, it is highly recommended to create a '''backup''' and consult the following Btfrs documentation before executing {{ic|btrfs check}} with the {{ic|--repair}} switch.}}<br />
<br />
The ''[https://btrfs.wiki.kernel.org/index.php/Manpage/btrfs-check btrfs check]'' command can be used to check or repair an unmounted Btrfs filesystem. However, this repair tool is still immature and not able to repair certain filesystem errors even those that do not render the filesystem unmountable.<br />
<br />
See [https://btrfs.wiki.kernel.org/index.php/Btrfsck Btrfsck] for more information.<br />
<br />
== See also ==<br />
<br />
* '''Official site'''<br />
** [https://btrfs.wiki.kernel.org/ Btrfs Wiki]<br />
** [https://btrfs.wiki.kernel.org/index.php/Glossary Btrfs Wiki Glossary]<br />
* '''Official FAQs'''<br />
** [https://btrfs.wiki.kernel.org/index.php/FAQ Btrfs Wiki FAQ]<br />
** [https://btrfs.wiki.kernel.org/index.php/Problem_FAQ Btrfs Wiki Problem FAQ]<br />
* '''Btrfs pull requests'''<br />
** [http://lkml.indiana.edu/hypermail/linux/kernel/1401.3/03045.html 3.14]<br />
** [http://lkml.indiana.edu/hypermail/linux/kernel/1311.1/03526.html 3.13]<br />
** [http://lkml.indiana.edu/hypermail/linux/kernel/1309.1/02981.html 3.12]<br />
** [http://lkml.indiana.edu/hypermail/linux/kernel/1305.1/01064.html 3.11]<br />
* '''Performance related'''<br />
** [http://superuser.com/questions/432188/should-i-put-my-multi-device-btrfs-filesystem-on-disk-partitions-or-raw-devices Btrfs on raw disks?]<br />
** [http://comments.gmane.org/gmane.comp.file-systems.btrfs/19440 Varying leafsize and nodesize in Btrfs]<br />
** [http://comments.gmane.org/gmane.comp.file-systems.btrfs/15646 Btrfs support for efficient SSD operation (data blocks alignment)]<br />
** [https://btrfs.wiki.kernel.org/index.php/FAQ#Is_Btrfs_optimized_for_SSD.3F Is Btrfs optimized for SSDs?]<br />
** '''Phoronix mount option benchmarking'''<br />
*** [http://www.phoronix.com/scan.php?page=article&item=linux_314_btrfs Linux 3.14]<br />
*** [http://www.phoronix.com/scan.php?page=article&item=linux_btrfs_311&num=1 Linux 3.11]<br />
*** [http://www.phoronix.com/scan.php?page=news_item&px=MTM0OTU Linux 3.9]<br />
*** [http://www.phoronix.com/scan.php?page=article&item=btrfs_linux37_mounts&num=1 Linux 3.7]<br />
*** [http://www.phoronix.com/scan.php?page=article&item=linux_btrfs_options&num=1 Linux 3.2]<br />
** [http://blog.erdemagaoglu.com/post/4605524309/lzo-vs-snappy-vs-lzf-vs-zlib-a-comparison-of Lzo vs. zLib]<br />
* '''Miscellaneous'''<br />
** [http://www.funtoo.org/wiki/BTRFS_Fun Funtoo Wiki Btrfs Fun]<br />
** [http://www.phoronix.com/scan.php?page=news_item&px=MTA0ODU Avi Miller presenting Btrfs] at SCALE 10x, January 2012.<br />
** [http://www.phoronix.com/scan.php?page=news_item&px=MTA4Mzc Summary of Chris Mason's talk] from LFCS 2012<br />
** [http://git.kernel.org/?p&#61;linux/kernel/git/torvalds/linux-2.6.git;a&#61;commit;h&#61;35054394c4b3cecd52577c2662c84da1f3e73525 Btrfs: stop providing a bmap operation to avoid swapfile corruptions] 2009-01-21<br />
** [http://marc.merlins.org/perso/btrfs/post_2014-03-22_Btrfs-Tips_-Doing-Fast-Incremental-Backups-With-Btrfs-Send-and-Receive.html Doing Fast Incremental Backups With Btrfs Send and Receive]</div>Wzyboyhttps://wiki.archlinux.org/index.php?title=List_of_applications/Other&diff=426330List of applications/Other2016-03-18T10:27:32Z<p>Wzyboy: /* Finance */ Add Beancount the Ledger-like double-entry accounting tool.</p>
<hr />
<div><noinclude><br />
[[Category:Applications]]<br />
[[es:List of applications/Other]]<br />
[[it:List of applications/Other]]<br />
[[ja:アプリケーション一覧/その他]]<br />
[[ru:List of applications/Other]]<br />
[[zh-cn:List of applications/Other]]<br />
[[zh-tw:List of applications/Other]]<br />
{{List of applications navigation}}<br />
</noinclude><br />
== Others ==<br />
<br />
=== Work environment ===<br />
<br />
The default installation of Arch provides Bash as shell interpreter and does not contain any Desktop Environment, therefore forces users to choose one themselves. Most Arch boxes run some X11 Window Manager and/or Desktop Environment, but of course there are still people who prefer doing everyday tasks in bare console.<br />
<br />
==== Bootsplash ====<br />
<br />
See also [[Wikipedia:Bootsplash]].<br />
<br />
*{{App|[[Fbsplash]]|Gentoo implementation as bootsplash program|http://wiki.gentoo.org/wiki/Fbsplash|{{AUR|fbsplash}}}}<br />
*{{App|[[Plymouth]]|The new graphical boot process for Fedora, replacing the aging Red Hat Graphical Boot|http://www.freedesktop.org/wiki/Software/Plymouth/|{{AUR|plymouth}}}}<br />
*{{App|[[Splashy]]|A graphical boot process designed to replace the aging Bootsplash program|https://alioth.debian.org/projects/splashy/|{{AUR|splashy-full}}}}<br />
<br />
==== Command shells ====<br />
<br />
See the main article: [[Command-line shell]].<br />
<br />
See also [[Wikipedia:Comparison of command shells]].<br />
<br />
==== Terminal multiplexers ====<br />
<br />
* {{App|abduco|Tool for session attach and detach support which allows a process to run independently from its controlling terminal.|http://www.brain-dump.org/projects/abduco/|{{aur|abduco}}}}<br />
* {{App|dtach|Program that emulates the detach feature of [[screen]].|http://dtach.sourceforge.net/|{{Pkg|dtach}}}}<br />
* {{App|[[GNU Screen]]|Full-screen window manager that multiplexes a physical terminal.|https://gnu.org/s/screen/|{{Pkg|screen}}}}<br />
* {{App|[[tmux]]|BSD licensed terminal multiplexer.|http://tmux.github.io/|{{Pkg|tmux}}}}<br />
* {{App|[[Wikipedia:Byobu (software)|byobu]]|An GPLv3 licensed addon for tmux or screen. It requires a terminal multiplexer installed.|http://byobu.co/|{{AUR|byobu}}}}<br />
<br />
==== Desktop environments ====<br />
<br />
See the main article: [[Desktop environment#List of desktop environments]].<br />
<br />
See also [[Wikipedia:Comparison of X Window System desktop environments]].<br />
<br />
==== Window managers ====<br />
<br />
===== Console =====<br />
<br />
See also [[#Terminal multiplexers]], which offer some of the functions of window managers for the console.<br />
<br />
* {{App|dvtm|[[dwm]]-style window manager in the console.|http://brain-dump.org/projects/dvtm/|{{Pkg|dvtm}}}}<br />
* {{App|twin|Text-mode window manager.|http://sourceforge.net/projects/twin/|{{Pkg|twin}}}}<br />
<br />
===== Graphical =====<br />
<br />
See the main article: [[Window manager#List of window managers]].<br />
<br />
See also [[Wikipedia:Comparison of X window managers]].<br />
<br />
==== Window tilers ====<br />
<br />
* {{App|[[PyTyle|PyTyle3]]|An automatic tiler that is compatible with Openbox Multihead with faster action and lower memory footprint.|https://github.com/BurntSushi/pytyle3|{{AUR|pytyle3-git}}{{Broken package link|{{aur-mirror|pytyle3-git}}}}}}<br />
* {{App|PyWO|Allows you to easily organize windows on the desktop using keyboard shortcuts.|https://code.google.com/p/pywo/}}<br />
* {{App|QuickTile|Lightweight standalone alternative to Compiz Grid plugin.|http://ssokolow.com/quicktile/|{{AUR|quicktile-git}}}}<br />
* {{App|stiler|A simple python script to convert any wm to tiling wm.|3=https://bbs.archlinux.org/viewtopic.php?id=64100|4={{AUR|stiler-grid-git}}{{Broken package link|{{aur-mirror|stiler-grid-git}}}} {{AUR|stiler}}{{Broken package link|{{aur-mirror|stiler}}}}}}<br />
* {{App|[[Tile-windows]]|Tool for tiling windows horizontally or vertically.|http://www.sourcefiles.org/Utilities/Miscellaneous/tile_0.7.4.tar.gz.shtml|{{AUR|tile-windows}}{{Broken package link|{{aur-mirror|tile-windows}}}}}}<br />
* {{App|whaw|Window manager independent window layout tool.|http://repetae.net/computer/whaw/|{{AUR|whaw}}{{Broken package link|{{aur-mirror|whaw}}}}}}<br />
* {{App|wumwum|The Window Manager manager. It can turn emwh compliant window managers into a tiling window manager while retaining all initial functionalities.|http://wumwum.sourceforge.net/|{{AUR|wumwum}}}}<br />
<br />
==== Virtual desktop pagers ====<br />
<br />
See also [[Wikipedia:Pager (GUI)]].<br />
<br />
* {{App|bbpager|Dockable pager for [[blackbox]] and other window managers.|3=http://bbtools.sourceforge.net/download.php?file=6|4={{Pkg|bbpager}}}}<br />
* {{App|fbpager|Virtual desktop pager for fluxbox.|http://www.fluxbox.org/fbpager|{{AUR|fbpager-git}}}}<br />
* {{App|IPager|A configurable pager with transparency, originally developed for Fluxbox.|http://useperl.ru/ipager/index.en.html|{{AUR|ipager}}}}<br />
* {{App|Neap|An non-intrusive and light pager that runs in the notification area of your panel.|http://code.google.com/p/neap/|{{AUR|neap}}{{Broken package link|{{aur-mirror|neap}}}}}}<br />
* {{App|Netwmpager|A NetWM/EWMH compatible pager.|http://sourceforge.net/projects/sf-xpaint/files/netwmpager/|{{AUR|netwmpager}}}}<br />
* {{App|obpager|Pager for [[Openbox]] writen in C++.|http://obpager.sourceforge.net/|{{AUR|obpager}}{{Broken package link|{{aur-mirror|obpager}}}}}}<br />
* {{App|Pager|A highly configurable pager compatible with Openbox Multihead.|https://github.com/BurntSushi/pager-multihead|{{AUR|pager-multihead-git}}{{Broken package link|{{aur-mirror|pager-multihead-git}}}}}}<br />
<br />
==== Support applications ====<br />
<br />
===== Login managers =====<br />
<br />
See the main article: [[Display manager#List of display managers]].<br />
<br />
===== Composite managers =====<br />
<br />
See the main article: [[Xorg#List of composite managers]].<br />
<br />
===== Taskbars / panels / docks =====<br />
<br />
* {{App|[[Avant Window Navigator]]|Lightweight dock which sits at the bottom of the screen.|http://launchpad.net/awn|{{AUR|avant-window-navigator}}}}<br />
* {{App|[[Bmpanel]]|Lightweight, NETWM compliant panel.|http://code.google.com/p/bmpanel2/|{{AUR|bmpanel}}}}<br />
* {{App|[[Cairo-Dock]]|Highly customizable dock and launcher application.|http://www.glx-dock.org/|{{Pkg|cairo-dock}}}}<br />
* {{App|Daisy|KDE Plasma widget which acts as a dock.|http://cdlszm.org/|{{AUR|kdeplasma-applets-daisy}}{{Broken package link|{{aur-mirror|kdeplasma-applets-daisy}}}}}}<br />
* {{App|Docker|Docking application which acts as a system tray.|http://icculus.org/openbox/2/docker/|{{AUR|docker-tray}}}}<br />
* {{App|[[Wikipedia:Docky|Docky]]|Full fledged dock application that makes opening common applications and managing windows easier and quicker.|http://wiki.go-docky.com/|{{Pkg|docky}}}}<br />
* {{App|[[fbpanel]]|Lightweight, NETWM compliant desktop panel.|http://fbpanel.sourceforge.net/|{{Pkg|fbpanel}}}}<br />
* {{App|[[Wikipedia:GNOME Panel|GNOME Panel]]|Panel included in the [[GNOME Flashback]] desktop.|https://wiki.gnome.org/Projects/GnomePanel|{{Pkg|gnome-panel}}}}<br />
* {{App|KoolDock|KDE3 docker with great effects that tries to resemble the OS X dock.|http://sourceforge.net/projects/kooldock|{{AUR|kooldock-svn}}{{Broken package link|{{aur-mirror|kooldock-svn}}}}}}<br />
* {{App|LXPanel|Lightweight X11 desktop panel and part of the LXDE desktop.|http://lxde.org/lxpanel|{{Pkg|lxpanel}}}}<br />
* {{App|MATE Panel|Panel included in the [[MATE]] desktop.|https://github.com/mate-desktop/mate-panel/|{{Pkg|mate-panel}}}}<br />
* {{App|PerlPanel|The ideal accompaniment to a light-weight Window Manager such as OpenBox, or a desktop-drawing program like iDesk.|http://savannah.nongnu.org/projects/perlpanel|{{pkg|perlpanel}}}}<br />
* {{app|plank|Elegant, simple, clean dock from [[pantheon]] desktop environment.|https://launchpad.net/plank|{{pkg|plank}}}}<br />
* {{App|[[PyPanel]]|Lightweight panel/taskbar written in Python and C.|http://pypanel.sourceforge.net/|{{Pkg|pypanel}}}}<br />
* {{App|qtpanel|Project to create useful and beautiful panel in Qt.|https://gitorious.org/qtpanel/qtpanel|{{AUR|qtpanel-git}}{{Broken package link|{{aur-mirror|qtpanel-git}}}}}}<br />
* {{App|[[Stalonetray]]|Stand-alone system tray.|http://stalonetray.sourceforge.net/|{{Pkg|stalonetray}}}}<br />
* {{App|[[Tint2]]|Simple panel/taskbar developed specifically for Openbox.|http://code.google.com/p/tint2/|{{Pkg|tint2}}}}<br />
* {{App|Trayer|Lightweight GTK+-based systray.|https://gna.org/projects/fvwm-crystal/|{{Pkg|trayer}}}}<br />
* {{App|wbar|Quick launch bar developed with speed in mind.|http://freecode.com/projects/wbar/|{{Pkg|wbar}}}}<br />
* {{App|Xfce Panel|Panel included in the [[Xfce]] desktop.|http://docs.xfce.org/xfce/xfce4-panel/start|{{Pkg|xfce4-panel}}}}<br />
<br />
===== Application launchers =====<br />
<br />
See also [[Wikipedia:Comparison of desktop application launchers]].<br />
<br />
* {{App|ADeskBar|Easy, simple and unobtrusive application launcher for Openbox.|http://adeskbar.tuxfamily.org/|{{AUR|adeskbar}}{{Broken package link|{{aur-mirror|adeskbar}}}}}}<br />
* {{App|Albert|An application launcher inspired by Alfred.|https://github.com/manuelschneid3r/albert|{{AUR|albert}}}}<br />
* {{App|Ayr|Manages menus of application launchers, either executables or desktop files. Also opens files and URLs with launchers, desktop files, or applications associated by name or mimetype. Uses dmenu to manage its menus.|http://appstogo.mcfadzean.org.uk/linux.html#ayr|{{aur|ayr}}}}<br />
* {{App|Bashrun2|Provides a different, barebones approach to a run dialog, using a specialized Bash session within a small xterm window.|http://henning-bekel.de/bashrun2/|{{AUR|bashrun2}}}}<br />
* {{App|[[dmenu]]|Fast and lightweight dynamic menu for X which is also useful as an application launcher.|http://tools.suckless.org/dmenu/|{{Pkg|dmenu}}}}<br />
* {{App|dmenu-extended|An extension to ''dmenu'' for quickly opening files and folders.|https://github.com/markjones112358/dmenu-extended|{{AUR|dmenu-extended}}}}<br />
* {{App|dmenu-launch|Simple ''dmenu''-based application launcher. Launches binaries and XDG shortcuts.|https://github.com/Wintervenom/Scripts/blob/master/file/launch/dmenu-launch|{{AUR|dmenu-launch}}}}<br />
* {{App|dswitcher|''dmenu''-based window switcher that works regardless of workspace or minimization.|https://github.com/Antithesisx/dswitcher|{{AUR|dswitcher-git}}}}<br />
* {{App|Fehlstart|Small GTK+-based application launcher.|https://gitorious.org/fehlstart|{{AUR|fehlstart-git}}}}<br />
* {{App|[[Gmrun]]|Lightweight GTK+-based application launcher, with the ability to run programs inside a terminal and other handy features.|http://sourceforge.net/projects/gmrun/|{{Pkg|gmrun}}}}<br />
* {{App|[[Wikipedia:GNOME Do|GNOME Do]]|Application launcher inspired by [[Wikipedia:Quicksilver_(software)|Quicksilver]] with many plugins, originally developed for the GNOME desktop.|http://do.cooperteam.net/|{{Pkg|gnome-do}}}}<br />
* {{App|j4-dmenu-desktop|Very fast dmenu application launcher.|https://github.com/enkore/j4-dmenu-desktop|{{AUR|j4-dmenu-desktop}}}}<br />
* {{App|Kupfer|Convenient command and access tool for the GNOME desktop that can launch applications, open documents and access different types of objects and act on them.|https://wiki.gnome.org/Apps/Kupfer|{{AUR|kupfer}}}}<br />
* {{App|[[Wikipedia:Launchy|Launchy]]|Very popular cross-platform application launcher with a plugin-based system used to provide extra functionality.|http://www.launchy.net/|{{Pkg|launchy}}}}<br />
<br />
* {{App|Lighthouse|A simple scriptable popup dialog to run on X.|https://github.com/emgram769/lighthouse|{{AUR|lighthouse-git}}}}<br />
* {{App|[[rofi]]|A popup window switcher roughly based on superswitcher, requiring only xlib and pango.|http://davedavenport.github.io/rofi/|{{Pkg|rofi}}}}<br />
* {{app|slingshot|An application launcher has a clear look, part of [[pantheon]] desktop environment.|https://launchpad.net/slingshot|{{Pkg|slingshot-launcher}}}}<br />
* {{App|Synapse|Synapse is a semantic launcher written in Vala that you can use to start applications as well as find and access relevant documents and files by making use of the Zeitgeist engine.|https://launchpad.net/synapse-project|{{Pkg|synapse}}}}<br />
* {{App|Whippet|A launcher and xdg-open replacement for control freaks. Opens files and URLs with applications associated by name and/or mimetype. Applications and associations may be customized using an SQLite database. Uses dmenu to manage its menus.|http://appstogo.mcfadzean.org.uk/linux.html#whippet|{{aur|whippet}}}}<br />
* {{App|xboomx|Light ''dmenu'' wrapper that reorders commands based on popularity, written in Python.|https://bitbucket.org/dehun/xboomx|{{AUR|xboomx}}{{Broken package link|{{aur-mirror|xboomx}}}}}}<br />
* {{App|xfce4-appfinder|An eazy-to-use application launcher from Xfce.|http://docs.xfce.org/xfce/xfce4-appfinder/start|{{pkg|xfce4-appfinder}}}}<br />
* {{App|Yeganesh|Light ''dmenu'' wrapper that reorders commands based on popularity, written in Haskell.|http://dmwit.com/yeganesh|{{AUR|yeganesh}}{{Broken package link|{{aur-mirror|yeganesh}}}}}}<br />
<br />
===== Logout dialogue =====<br />
A few simple shutdown managers are available:<br />
* {{App|exitx|A logout dialog for Openbox that uses [[Sudo]].|http://www.linuxsir.com/bbs/lastpostinthread350740.html|{{AUR|exitx}}{{Broken package link|{{aur-mirror|exitx}}}}}}<br />
* {{App|exitx-polkit|A GTK logout dialog for Openbox with PolicyKit support.|https://github.com/z0id/exitx-polkit|{{AUR|exitx-polkit-git}}{{Broken package link|{{aur-mirror|exitx-polkit-git}}}}}}<br />
* {{App|exitx-systemd|A GTK logout dialog for Openbox with systemd support.|https://github.com/z0id/exitx-systemd|{{AUR|exitx-systemd-git}}{{Broken package link|{{aur-mirror|exitx-systemd-git}}}}}}<br />
* {{App|oblogout|A graphical logout script for [[Openbox]] that may be used with other WMs.|https://launchpad.net/oblogout|{{pkg|oblogout}}}}<br />
* {{App|obshutdown|A great GTK/Cairo based shutdown manager for Openbox and other window managers.|https://github.com/panjandrum/obshutdown|{{AUR|obshutdown}}{{Broken package link|{{aur-mirror|obshutdown}}}}}}<br />
<br />
==== Accessibility ==== <br />
<br />
===== Screen reading =====<br />
<br />
* {{App|Orca|Screen reader for individuals who are blind or visually impaired|http://www.gnome.org/projects/orca|{{Pkg|orca}}}}<br />
<br />
* {{App|[[Simple Orca Plugin System]]|Plug-in extension for the Orca screen reader|https://stormdragon.tk/orca-plugins/index.php|{{AUR|simpleorcapluginsystem-git}}}}<br />
<br />
===== Speech recognition =====<br />
<br />
See the main article [[Speech recognition]] for applications.<br />
<br />
=== Finance ===<br />
<br />
See also [[Wikipedia:Comparison of accounting software]].<br />
<br />
* {{App|esniper|Simple, lightweight tool for [[Wikipedia:Auction_sniping|sniping]] eBay auctions.|http://esniper.sourceforge.net/|{{AUR|esniper}}}}<br />
* {{App|[[Wikipedia:GnuCash|GnuCash]]|Financial application that implements a double-entry book-keeping system with features for small business accounting.|http://www.gnucash.org/|{{Pkg|gnucash}}}}<br />
* {{App|[[Wikipedia:Grisbi|Grisbi]]|Personal finance system which manages third party, expenditure and receipt categories, as well as budgetary lines, financial years, and other information that makes it suitable for associations.|http://www.grisbi.org/|{{AUR|grisbi}}}}<br />
* {{App|[[Wikipedia:HomeBank|HomeBank]]|Easy to use finance manager that can analyse your personal finance in detail using powerful filtering tools and graphs.|http://homebank.free.fr/|{{Pkg|homebank}}}}<br />
* {{App|[[Wikipedia:KMyMoney|KMyMoney]]|Personal finance manager that operates in a similar way to [[Wikipedia:Microsoft Money|Microsoft Money]]. It supports different account types, categorisation of expenses and incomes, reconciliation of bank accounts and import/export to the “QIF” file format.|http://kmymoney2.sourceforge.net/index-home.html|{{Pkg|kmymoney}}}}<br />
* {{App|Ledger|Ledger is a powerful, double-entry accounting system that is accessed from the UNIX command-line.|http://ledger-cli.org/|{{AUR|ledger}}}}<br />
* {{App|Beancount|Beancount is a Ledger-like CLI double-entry accounting system. It is written in Python and has more features, like multi-currency support, than Ledger.|}}<br />
* {{App|Moneychanger|An intuitive QT/C++ system tray client for ''Open-Transactions''|https://github.com/Open-Transactions/Moneychanger|{{AUR|moneychanger-git}}}}<br />
* {{App|Manager Accounting|Manager is free accounting software for small business.|http://www.manager.io/|{{AUR|manager-accounting}}}}<br />
* {{App|Money Manager EX|An easy-to-use personal finance suite|http://www.moneymanagerex.org/|{{Pkg|moneymanagerex}}}}<br />
* {{App|Skrooge|Personal finances manager for the KDE desktop.|http://skrooge.org/|{{Pkg|skrooge}}}}<br />
* {{App|openerp|Open source erp system purely in python.|http://openerp.com/|{{AUR|openerp}}}}<br />
* {{App|Open-Transactions|A financial cryptography library used for issuing currencies, stock, paying dividends, creating asset accounts, sending/receiving digital cash, trading on markets and escrow.|https://github.com/Open-Transactions/Open-Transactions|{{AUR|open-transactions-git}}}}<br />
<br />
=== Flashcards ===<br />
<br />
* {{App|[[Anki]]|Anki is a program which makes remembering things easy.|http://ankisrs.net/|{{Pkg|anki}}}}<br />
* {{App|iGNUit|Memorization aid based on the Leitner flashcard system.|http://homepages.ihug.co.nz/~trmusson/programs.html#ignuit|{{AUR|ignuit}}}}<br />
* {{App|[[Mnemosyne]]|Free flash-card tool which optimizes your learning process.|http://mnemosyne-proj.org/|{{AUR|mnemosyne}}}}<br />
<br />
=== Time management ===<br />
<br />
==== Console ====<br />
<br />
* {{App|Calcurse|Text-based ncurses calendar and scheduling system.|http://calcurse.org/|{{Pkg|calcurse}}}}<br />
* {{App|Doneyet|Ncurses-based hierarchical To-do list manager written in C++.|https://github.com/gtaubman/doneyet|{{AUR|doneyet}}{{Broken package link|{{aur-mirror|doneyet}}}}}}<br />
* {{App|Pal|Very lightweight calendar with both interactive and non-interactive interfaces.|http://palcal.sourceforge.net/|{{AUR|pal}}}}<br />
* {{App|[[Remind]]|Highly sophisticated text-based calendaring and notification system.|http://roaringpenguin.com/products/remind|{{Pkg|remind}}}}<br />
* {{App|[[Wikipedia:Taskwarrior|Taskwarrior]]|Command-line To-do list application with support for lua customization and more.|http://taskwarrior.org/|{{Pkg|task}}}}<br />
* {{App|Todo.txt|Small command-line To-do manager.|http://ginatrapani.github.com/todo.txt-cli/|{{AUR|todotxt}}}}<br />
* {{App|TuDu|Ncurses-based hierarchical To-do list manager with vim-like keybindings.|http://code.meskio.net/tudu/|{{AUR|tudu}}}}<br />
* {{App|When|Simple personal calendar program.|http://lightandmatter.com/when/when.html|{{Pkg|when}}}}<br />
* {{App|Wyrd|Text-based front-end to Remind, a calendar and alarm program used on UNIX and Linux computers.|http://pessimization.com/software/wyrd/|{{Pkg|wyrd}}}}<br />
* {{App|mail2rem|Small script for importing *.ics calendars from Maildir to Remind calendar.|https://github.com/esovetkin/mail2rem|{{AUR|mail2rem-git}}}}<br />
* {{App|DevTodo|Is a small command line application for maintaining lists of tasks.|http://swapoff.org/devtodo1.html|{{AUR|devtodo}}}}<br />
<br />
==== Graphical ====<br />
<br />
* {{App|Calendar|Calendar application for GNOME.|https://wiki.gnome.org/Apps/Calendar|{{Pkg|gnome-calendar}}}}<br />
* {{App|Day Planner|Program designed to help you easily plan and manage your time. It can manage appointments, birthdays and more.|http://www.day-planner.org/|{{AUR|dayplanner}}}}<br />
* {{App|etm (Event and Task Manager)|Simple application with a "Getting Things Done!" approach to handling events, tasks, activities, reminders and projects.|http://duke.edu/~dgraham/ETM/|{{AUR|etm}}}}<br />
* {{App|Glista|Simple GTK+ To-do list manager with notes support.|http://arr.gr/glista/|{{AUR|glista}}{{Broken package link|{{aur-mirror|glista}}}}}}<br />
* {{App|GTG (Getting Things GNOME!)|Personal tasks and To-do list items organizer for the GNOME desktop.|http://gtgnome.net/|{{AUR|gtg}}{{Broken package link|{{aur-mirror|gtg}}}}}}<br />
* {{App|Hamster|Time tracking application that helps you to keep track on how much time you have spent during the day on activities you choose to track.|http://projecthamster.wordpress.com/|{{Pkg|hamster-time-tracker}}}}<br />
* {{App|[[Wikipedia:Kontact#Organizer|KOrganizer]]|Calendar and scheduling program, part of {{Grp|kdepim}}.|http://www.kde.org/applications/office/korganizer/|{{Pkg|korganizer}}}}<br />
* {{App|[[Wikipedia:Lightning (software)|Lightning]]|Extension to Mozilla Thunderbird that provides calendar and task support.|http://www.mozilla.org/projects/calendar/lightning/|{{AUR|lightning}}{{Broken package link|{{aur-mirror|lightning}}}}}}<br />
* {{App|Orage|GTK+ calendar and task manager often seen integrated with Xfce.|http://www.xfce.org/projects|{{Pkg|orage}}}}<br />
* {{App|Osmo|GTK+ personal organizer, which includes calendar, tasks manager and address book modules.|http://clayo.org/osmo/|{{Pkg|osmo}}}}<br />
* {{App|Outspline|Extensible outliner with advanced time management features, supporting events with complex recurrence schemes.|https://kynikos.github.io/outspline/|{{AUR|outspline}}}}<br />
* {{App|QTodoTxt|A cross-platform UI client for {{ic|todo.txt}} files (see [http://todotxt.com/ project's page])|https://github.com/mNantern/QTodoTxt|{{AUR|qtodotxt}} {{AUR|qtodotxt-git}}}}<br />
* {{App|Rachota|Portable time tracker for personal projects.|http://rachota.sourceforge.net/|{{AUR|rachota}}{{Broken package link|{{aur-mirror|rachota}}}}}}<br />
* {{App|Task Coach|Simple open source To-do manager to manage personal tasks and To-do lists.|http://taskcoach.org|{{AUR|taskcoach}}}}<br />
* {{App|[[Wikipedia:Tasque (software)|Tasque]]|Easy quick task management app written in C Sharp.|https://wiki.gnome.org/Apps/Tasque|{{Pkg|tasque}}}}<br />
* {{App|Tider|Lightweight time tracking application (GTK+)|http://pusto.org/en/tider/|{{AUR|tider-git}}}}<br />
* {{App|TkRemind|Sophisticated calendar and alarm program.|http://www.roaringpenguin.com/products/remind|{{Pkg|remind}}}}<br />
* {{App|wxRemind|Python text and graphical frontend to Remind.|http://duke.edu/~dgraham/wxRemind/|{{AUR|wxremind}}{{Broken package link|{{aur-mirror|wxremind}}}}}}<br />
<br />
=== Emulators ===<br />
An emulator is a program which serves to replicate the functions of another platform or system so as to allow applications and games to be run in environments they were not programmed for.<br />
<br />
{{Note|1=For possibly more up to date selection of emulators, try checking the [https://aur.archlinux.org/packages.php?O=0&K=&do_Search=Go&detail=1&L=0&C=5&SeB=nd&SB=n&SO=a&PP=25 AUR 'emulators' category]}}<br />
<br />
{{Warning|Owning a high-level emulator is not illegal, but distribution of any type of copyrighted ROMs and unauthorized emulation (without written permission of the copyright holder allowing the user to do so) are '''illegal'''. Consequently, Arch Linux does not distribute this copyrighted content, including game ROMs and ripped console BIOSs. You are fully responsible for whatever usage of the emulators obtained from the [[official repositories]] or the [[Arch User Repository]] you make, as well as any legal repercussion that result. Arch Linux bears no responsibility at all.}}<br />
<br />
==== Consoles ====<br />
<br />
See also [[Wikipedia:List of video game console emulators]].<br />
<br />
* {{App|Citra|Nintendo 3DS emulator.|http://citra-emu.org/|{{AUR|citra-git}}}}<br />
* {{App|DeSmuME|Nintendo DS emulator.|http://desmume.org/|{{Pkg|desmume}}}}<br />
* {{App|[[Dolphin emulator|Dolphin]]|Very capable GameCube and Wii emulator.|http://dolphin-emu.org/|{{Pkg|dolphin-emu}}}}<br />
* {{App|epsxe|Emulator for the PlayStation video game console for x86-based PC hardware.|http://www.epsxe.com/|{{AUR|epsxe}}}}<br />
* {{App|fakenes|NES (Nintendo Famicom) emulator.|http://fakenes.sourceforge.net/|{{AUR|fakenes}}{{Broken package link|{{aur-mirror|fakenes}}}}}}<br />
* {{App|FCEUX|NTSC and PAL 8 bit Nintendo/Famicom emulator that is an evolution of the original FCE Ultra emulator. It is accurate, compatible and actively maintained.|http://fceux.com/|{{Pkg|fceux}}}}<br />
<br />
* {{App|Gens2|Emulator for Sega Genesis, Sega CD and 32X that is written in assembly language and no longer actively developed.<br />
:* activate OpenGL, set video resolution per custom to 1024x600 for streched full-screen or 800x600 for non-streched;<br />
:* use "Normal" renderer, I couldn't find a visible advantage with the other ones.<br />
|http://www.gens.me/|{{Pkg|gens}}}}<br />
<br />
* {{App|Gens-GS|Gens2, rewritten in C++, combining features from various Gens forks.|http://segaretro.org/Gens/GS|{{Pkg|gens-gs}}}}<br />
* {{App|gngeo|Command-line NeoGeo emulator.|http://gngeo.googlecode.com|{{AUR|gngeo}}}}<br />
* {{App|higan|Multisystem emulator focusing on accuracy, supporting SNES, NES, GB, GBC, GBA.|http://code.google.com/p/higan/|{{Pkg|higan}}}}<br />
* {{App|mednafen|Command line driven multi system emulator.|http://mednafen.sourceforge.net/|{{Pkg|mednafen}}}}<br />
* {{App|Mupen64Plus|Highly compatible Nintendo 64 emulator with plugin system.<br />
|http://code.google.com/p/mupen64plus/|{{Pkg|mupen64plus}} or a graphical front-end, such as {{AUR|m64py}} or {{AUR|cutemupen}}.}}<br />
* {{App|pSX|A not plugin-based PlayStation emulator with fairly high compatibility.|http://psxemulator.gazaxian.com/|{{AUR|psx}}}}<br />
* {{App|PCSXR|PlayStation emulator; Debian fork of the abandoned original PCSX|http://pcsxr.codeplex.com/|{{Pkg|pcsxr}}}}<br />
* {{App|PCSX2|PlayStation 2 emulator. It is still being maintained and developed. It requires BIOS files.|http://www.pcsx2.net/|{{Pkg|pcsx2}}}}<br />
* {{App|snes-9x|Portable, freeware Super Nintendo Entertainment System (SNES) emulator.|http://www.snes9x.com/|{{Pkg|snes9x}}}}<br />
* {{App|[[Visual Boy Advance]]|Game Boy emulator with Game Boy Advance, Game Boy Color, and Super Game Boy support.<br />
|http://vba.ngemu.com/|{{Pkg|vbam-gtk}}}}<br />
* {{App|ZSNES|Highly compatible Super Nintendo emulator.<br />
|http://www.zsnes.com/|{{Pkg|zsnes}}}}<br />
<br />
==== Other ====<br />
* {{App|DOSBox|Open-source DOS emulator which primarily focuses on running DOS Games.|http://www.dosbox.com/|{{Pkg|dosbox}}}}<br />
* {{App|DOSEmu|Open-source DOS emulator.|http://www.dosemu.org/|{{Pkg|dosemu}}}}<br />
* {{App|MAME|Multiple Arcade Machine Emulator.|http://mamedev.org/|{{Pkg|sdlmame}}}}<br />
* {{App|ResidualVM|Cross-platform 3D game interpreter which allows you to play LucasArts' Lua-based 3D adventures.|http://residualvm.org/|{{AUR|residualvm}}}}<br />
* {{App|[[RetroArch]]|Frontend to libretro (emulation library, using modified versions of existing emulators as plugins).|http://github.com/Themaister/RetroArch|{{AUR|retroarch-git}}}}<br />
* {{App|ScummVM|Virtual machine for old school adventures.|http://www.scummvm.org/|{{Pkg|scummvm}}}}<br />
* {{App|X Neko Project II|PC-9801 emulator.|http://www.asahi-net.or.jp/~aw9k-nnk/np2/|{{AUR|xnp2}}}}<br />
<br />
=== Amateur radio ===<br />
<br />
See the main article: [[Amateur radio#Software list]].<br />
<br />
See also [[Wikipedia:List of software-defined radios]].</div>Wzyboyhttps://wiki.archlinux.org/index.php?title=LVM&diff=426018LVM2016-03-16T10:56:37Z<p>Wzyboy: /* Create */</p>
<hr />
<div>[[Category:File systems]]<br />
[[cs:LVM]]<br />
[[de:LVM]]<br />
[[es:LVM]]<br />
[[fr:LVM]]<br />
[[it:LVM]]<br />
[[ja:LVM]]<br />
[[ru:LVM]]<br />
[[tr:LVM]]<br />
[[zh-CN:LVM]]<br />
{{Related articles start}}<br />
{{Related|Software RAID and LVM}}<br />
{{Related|dm-crypt/Encrypting an entire system#LVM on LUKS}}<br />
{{Related|dm-crypt/Encrypting an entire system#LUKS on LVM}}<br />
{{Related|Resizing LVM-on-LUKS}}<br />
{{Related articles end}}<br />
From [[Wikipedia:Logical Volume Manager (Linux)]]:<br />
:LVM is a [[Wikipedia:logical volume management|logical volume manager]] for the [[Wikipedia:Linux kernel|Linux kernel]]; it manages disk drives and similar mass-storage devices.<br />
<br />
=== LVM Building Blocks ===<br />
<br />
Logical Volume Management utilizes the kernel's [http://sources.redhat.com/dm/ device-mapper] feature to provide a system of partitions independent of underlying disk layout. With LVM you abstract your storage and have "virtual partitions", making [[#Resizing volumes|extending/shrinking]] easier (subject to potential filesystem limitations).<br />
<br />
Virtual partitions allow addition and removal without worry of whether you have enough contiguous space on a particular disk, getting caught up fdisking a disk in use (and wondering whether the kernel is using the old or new partition table), or, having to move other partitions out of the way. This is strictly an ease-of-management solution: LVM adds no security.<br />
<br />
Basic building blocks of LVM:<br />
<br />
* '''Physical volume (PV)''': Partition on hard disk (or even the disk itself or loopback file) on which you can have volume groups. It has a special header and is divided into physical extents. Think of physical volumes as big building blocks used to build your hard drive.<br />
* '''Volume group (VG)''': Group of physical volumes used as a storage volume (as one disk). They contain logical volumes. Think of volume groups as hard drives.<br />
* '''Logical volume (LV)''': A "virtual/logical partition" that resides in a volume group and is composed of physical extents. Think of logical volumes as normal partitions.<br />
* '''Physical extent (PE)''': The smallest size in the physical volume that can be assigned to a logical volume (default 4MiB). Think of physical extents as parts of disks that can be allocated to any partition.<br />
<br />
Example:<br />
'''Physical disks'''<br />
<br />
Disk1 (/dev/sda):<br />
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _<br />
|Partition1 50GB (Physical volume) |Partition2 80GB (Physical volume) |<br />
|/dev/sda1 |/dev/sda2 |<br />
|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |<br />
<br />
Disk2 (/dev/sdb):<br />
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _<br />
|Partition1 120GB (Physical volume) |<br />
|/dev/sdb1 |<br />
| _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ __ _ _|<br />
<br />
'''LVM logical volumes'''<br />
<br />
Volume Group1 (/dev/MyStorage/ = /dev/sda1 + /dev/sda2 + /dev/sdb1):<br />
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ <br />
|Logical volume1 15GB |Logical volume2 35GB |Logical volume3 200GB |<br />
|/dev/MyStorage/rootvol|/dev/MyStorage/homevol |/dev/MyStorage/mediavol |<br />
|_ _ _ _ _ _ _ _ _ _ _ |_ _ _ _ _ _ _ _ _ _ _ _ _ |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |<br />
<br />
=== Advantages ===<br />
<br />
LVM gives you more flexibility than just using normal hard drive partitions:<br />
* Use any number of disks as one big disk.<br />
* Have logical volumes stretched over several disks.<br />
* Create small logical volumes and resize them "dynamically" as they get filled up.<br />
* Resize logical volumes regardless of their order on disk. It does not depend on the position of the LV within VG, there is no need to ensure surrounding available space.<br />
* Resize/create/delete logical and physical volumes online. File systems on them still need to be resized, but some (such as ext4) support online resizing.<br />
* Online/live migration of LV being used by services to different disks without having to restart services.<br />
* Snapshots allow you to backup a frozen copy of the file system, while keeping service downtime to a minimum.<br />
* Support for various device-mapper targets, including transparent filesystem encryption and caching of frequently used data.<br />
<br />
=== Disadvantages ===<br />
* Additional steps in setting up the system, more complicated.<br />
<br />
== Installing Arch Linux on LVM ==<br />
<br />
You should create your LVM Volumes between the [[partitioning]] and [[File_systems#Create a filesystem|formatting]] steps of the [[Installation guide|installation procedure]]. Instead of directly formatting a partition to be your root file system, the file system will be created inside a logical volume (LV). <br />
<br />
Make sure the {{pkg|lvm2}} package is [[pacman|installed]].<br />
<br />
Quick overview: <br />
* Create partition(s) where your PV(s) will reside. Set the partition type to 'Linux LVM', which is 8e if you use MBR, 8e00 for GPT.<br />
* Create your physical volumes (PVs). If you have one disk it is best to just create one PV in one large partition. If you have multiple disks you can create partitions on each of them and create a PV on each partition.<br />
* Create your volume group (VG) and add all PVs to it.<br />
* Create logical volumes (LVs) inside that VG.<br />
* Continue with “Format the partitions” step of [[Beginners' guide]].<br />
* When you reach the “Create initial ramdisk environment” step in the Beginners Guide, add the {{ic|lvm}} hook to {{ic|/etc/mkinitcpio.conf}} (see below for details).<br />
<br />
{{Warning|{{ic|/boot}} cannot reside in LVM when using [[GRUB Legacy]], which does not support LVM. [[GRUB]] users do not have this limitation. If you need to use GRUB Legacy, you must create a separate {{ic|/boot}} partition and format it directly. }}<br />
<br />
=== Create partitions ===<br />
<br />
If LVM has to be set on the entire disk, there is no need to create any partitions.<br />
<br />
Otherwise, [[partition]] the device as required before configuring LVM.<br />
<br />
=== Create physical volumes ===<br />
To list all your devices capable of being used as a physical volume:<br />
# lvmdiskscan<br />
<br />
{{Warning|Make sure you target the correct device, or below commands will result in data loss!}}<br />
<br />
Create a physical volume on them:<br />
<br />
# pvcreate ''DEVICE''<br />
<br />
This command creates a header on each device so it can be used for LVM. As defined in [[#LVM Building Blocks]], ''DEVICE'' can be a disk (e.g. {{ic|/dev/sda}}), a partition (e.g. {{ic|/dev/sda2}}) or a loop back device. For example: <br />
<br />
# pvcreate /dev/sda2<br />
<br />
You can track created physical volumes with:<br />
# pvdisplay<br />
<br />
{{Note|If using a SSD without partitioning it first, use {{ic|pvcreate --dataalignment 1m /dev/sda}} (for erase block size < 1MiB), see e.g. [http://serverfault.com/questions/356534/ssd-erase-block-size-lvm-pv-on-raw-device-alignment here]}}<br />
<br />
=== Create volume group ===<br />
<br />
The next step is to create a volume group on this physical volume.<br />
<br />
First you need to create a volume group on one of the physical volumes:<br />
<br />
# vgcreate <''volume_group''> <''physical_volume''><br />
<br />
For example:<br />
<br />
# vgcreate VolGroup00 /dev/sda2<br />
<br />
Then add to it all other physical volumes you want to have in it:<br />
<br />
# vgextend <''volume_group''> <''physical_volume''><br />
# vgextend <''volume_group''> <''another_physical_volume''><br />
# ...<br />
<br />
For example:<br />
<br />
# vgextend VolGroup00 /dev/sdb1<br />
# vgextend VolGroup00 /dev/sdc<br />
<br />
You can track how your volume group grows with:<br />
<br />
# vgdisplay<br />
<br />
{{Note|You can create more than one volume group if you need to, but then you will not have all your storage presented as one disk.}}<br />
<br />
=== Create in one step ===<br />
<br />
LVM allows you to combine the creation of a volume group and the physical volumes in one easy step. For example, to create the group VolGroup00 with the three devices mentioned above, you can run:<br />
<br />
# vgcreate VolGroup00 /dev/sda2 /dev/sdb1 /dev/sdc<br />
<br />
This command will first set up the three partitions as physical volumes (if necessary) and then create the volume group with the three volumes. The command will warn you it detects an existing filesystem on any of the devices.<br />
<br />
=== Create logical volumes ===<br />
<br />
Now we need to create logical volumes on this volume group. You create a logical volume with the next command by giving the name of a new logical volume, its size, and the volume group it will live on:<br />
<br />
# lvcreate -L <''size''> <''volume_group''> -n <''logical_volume''><br />
<br />
For example:<br />
<br />
# lvcreate -L 10G VolGroup00 -n lvolhome<br />
<br />
This will create a logical volume that you can access later with {{ic|/dev/mapper/Volgroup00-lvolhome}} or {{ic|/dev/VolGroup00/lvolhome}}. Same as with the volume groups, you can use any name you want for your logical volume when creating it.<br />
<br />
You can also specify one or more physical volumes to restrict where LVM allocates the data. For example, you may wish to create a logical volume for the root filesystem on your small SSD, and your home volume on a slower mechanical drive. Simply add the physical volume devices to the command line, for example:<br />
<br />
# lvcreate -L 10G VolGroup00 -n lvolhome /dev/sdc1<br />
<br />
If you want to fill all the free space left on a volume group, use the next command:<br />
<br />
# lvcreate -l 100%FREE <''volume_group''> -n <''logical_volume''><br />
<br />
You can track created logical volumes with:<br />
<br />
# lvdisplay<br />
<br />
{{Note|You may need to load the ''device-mapper'' kernel module ('''modprobe dm_mod''') for the above commands to succeed.}}<br />
<br />
{{Tip|You can start out with relatively small logical volumes and expand them later if needed. For simplicity, leave some free space in the volume group so there is room for expansion.}}<br />
<br />
=== Create file systems and mount logical volumes ===<br />
<br />
Your logical volumes should now be located in {{ic|/dev/mapper/}} and {{ic|/dev/''YourVolumeGroupName''}}. If you cannot find them, use the next commands to bring up the module for creating device nodes and to make volume groups available:<br />
<br />
# modprobe dm_mod<br />
# vgscan<br />
# vgchange -ay<br />
<br />
Now you can create file systems on logical volumes and mount them as normal partitions (if you are installing Arch linux, refer to [[Beginners' guide#Mount the partitions|mounting the partitions]] for additional details):<br />
<br />
# mkfs.<''fstype''> /dev/mapper/<''volume_group''>-<''logical_volume''><br />
# mount /dev/mapper/<''volume_group''>-<''logical_volume''> /<''mountpoint''><br />
<br />
For example:<br />
<br />
# mkfs.ext4 /dev/mapper/VolGroup00-lvolhome<br />
# mount /dev/mapper/VolGroup00-lvolhome /home<br />
<br />
{{Warning|When choosing mountpoints, just select your newly created logical volumes (use: {{ic|/dev/mapper/Volgroup00-lvolhome}}). Do '''not''' select the actual partitions on which logical volumes were created (do not use: {{ic|/dev/sda2}}).}}<br />
<br />
=== Add lvm2 hook to mkinitcpio.conf for root on LVM ===<br />
<br />
In case your root filesystem is on LVM, you will need to make sure the {{Ic|udev}} and {{Ic|lvm2}} [[mkinitcpio]] hooks are enabled.<br />
<br />
{{Ic|udev}} is there by default. Edit the file and insert {{Ic|lvm2}} between {{Ic|block}} and {{Ic|filesystems}} like so:<br />
<br />
{{hc|1= /etc/mkinitcpio.conf|2= HOOKS="base udev ... block '''lvm2''' filesystems"}}<br />
<br />
Afterwards, you can continue in normal installation instructions with the [[Mkinitcpio#Image_creation_and_activation|create an initial ramdisk]] step.<br />
<br />
{{tip|The {{ic|lvm2}} hook is installed by {{pkg|lvm2}}, not {{pkg|mkinitcpio}}. If you are running ''mkinitcpio'' in an ''arch-chroot'' for a new installation, {{pkg|lvm2}} must be installed inside the ''arch-chroot'' for ''mkinitcpio'' to find the {{ic|lvm2}} hook. If {{pkg|lvm2}} only exists outside the ''arch-chroot'', ''mkinitcpio'' will output {{ic|Error: Hook 'lvm2' cannot be found}}.}}<br />
<br />
{{Warning|When using the {{ic|systemd}} mkinitcpio hook you should use the {{ic|sd-lvm2}} hook instead of the {{ic|lvm2}} hook. Otherwise your system might not boot. See [[Mkinitcpio#Common_hooks]]}}<br />
<br />
=== Special preparations for root on thinly-provisioned volume ===<br />
<br />
If your root device is on a thinly-provisioned LVM volume (as may be needed by [[snapper]] if you don't trust [[btrfs]]), then some more preparations are needed.<br />
<br />
First, {{Ic|mkinitcpio}} by default does not include modules and binaries needed for thin provisioning. Adjust the configuration file to compensate:<br />
<br />
{{hc|1= /etc/mkinitcpio.conf|2=<br />
MODULES="... '''dm-thin-pool''' ..."<br />
BINARIES="'''/usr/bin/thin_check /usr/bin/pdata_tools''' ..."}}<br />
<br />
LVM only calls {{Ic|thin_check}} while booting, but if the check fails, you will need other commands provided by {{Ic|pdata_tools}} for recovery.<br />
<br />
Second, with a large number of snapshots, {{Ic|thin_check}} runs for a long enough time so that waiting for the root device times out. To compensate, add the {{Ic|1=rootdelay=60}} kernel boot parameter to your boot loader configuration.<br />
<br />
=== Kernel options ===<br />
<br />
If the root file system resides in a logical volume, the {{ic|<nowiki>root=</nowiki>}} [[kernel parameter]] must be pointed to the mapped device, e.g {{ic|/dev/mapper/''vg-name''-''lv-name''}}.<br />
<br />
{{Accuracy|As of May 2015 {{ic|dolvm}} cannot be found in https://www.kernel.org/doc/Documentation/kernel-parameters.txt}}<br />
<br />
You may also need {{ic|dolvm}}.<br />
<br />
== Volume operations ==<br />
<br />
=== Advanced options ===<br />
<br />
If you need monitoring (needed for snapshots) you can enable lvmetad. <br />
For this set {{ic|1=use_lvmetad = 1}} in {{ic|/etc/lvm/lvm.conf}}.<br />
This is the default by now. <br />
<br />
You can restrict the volumes that are activated automatically by setting the {{Ic|auto_activation_volume_list}} in {{Ic|/etc/lvm/lvm.conf}}. If in doubt, leave this option commented out.<br />
<br />
=== Resizing volumes ===<br />
<br />
==== Physical volumes ====<br />
<br />
After extending or prior to reducing the size of a device that has a physical volume on it, you need to grow or shrink the PV using {{ic|pvresize}}.<br />
<br />
===== Growing =====<br />
<br />
To expand the PV on {{ic|/dev/sda1}} after enlarging the [[partition]], run:<br />
<br />
# pvresize /dev/sda1<br />
<br />
This will automatically detect the new size of the device and extend the PV to its maximum.<br />
<br />
{{Note|This command can be done while the volume is online.}}<br />
<br />
===== Shrinking =====<br />
<br />
To shrink a physical volume prior to reducing its underlying device, add the {{ic|--setphysicalvolumesize ''size''}} parameters to the command, ''e.g.'':<br />
<br />
# pvresize --setphysicalvolumesize 40G /dev/sda1<br />
<br />
The above command may leave you with this error:<br />
<br />
/dev/sda1: cannot resize to 25599 extents as later ones are allocated.<br />
0 physical volume(s) resized / 1 physical volume(s) not resized<br />
<br />
Indeed {{ic|pvresize}} will refuse to shrink a PV if it has allocated extents after where its new end would be. One needs to run [[#Move_physical_extents|pvmove]] beforehand to relocate these elsewhere in the volume group if there is sufficient free space.<br />
====== Move physical extents ======<br />
<br />
Before moving free extents to the end of the volume, one must run {{ic|# pvdisplay -v -m}} to see physical segments. In the below example, there is one physical volume on {{ic|/dev/sdd1}}, one volume group {{ic|vg1}} and one logical volume {{ic|backup}}.<br />
{{hc|# pvdisplay -v -m|<br />
Finding all volume groups.<br />
Using physical volume(s) on command line.<br />
--- Physical volume ---<br />
PV Name /dev/sdd1<br />
VG Name vg1<br />
PV Size 1.52 TiB / not usable 1.97 MiB<br />
Allocatable yes <br />
PE Size 4.00 MiB<br />
Total PE 399669<br />
Free PE 153600<br />
Allocated PE 246069<br />
PV UUID MR9J0X-zQB4-wi3k-EnaV-5ksf-hN1P-Jkm5mW<br />
<br />
--- Physical Segments ---<br />
Physical extent 0 to 153600:<br />
FREE<br />
Physical extent 153601 to 307199:<br />
Logical volume /dev/vg1/backup<br />
Logical extents 1 to 153599<br />
Physical extent 307200 to 307200:<br />
FREE<br />
Physical extent 307201 to 399668:<br />
Logical volume /dev/vg1/backup<br />
Logical extents 153601 to 246068}}<br />
<br />
One can observe FREE space are split across the volume. To shrink the physical volume, we must first move all used segments to the beginning.<br />
<br />
Here, the first free segment is from 0 to 153600 and leaves us with 153601 free extents. We can now move this segment number from the last physical extent to the first extent. The command will thus be:<br />
{{hc|# pvmove --alloc anywhere /dev/sdd1:307201-399668 /dev/sdd1:0-92466|<br />
/dev/sdd1: Moved: 0.1 %<br />
/dev/sdd1: Moved: 0.2 %<br />
...<br />
/dev/sdd1: Moved: 99.9 %<br />
/dev/sdd1: Moved: 100,0%}}<br />
<br />
{{Note|<br />
* this command tells to move 92468 (399668-307200) PE '''from''' the last segment '''to''' the first segment. This is possible as first segment enclosed FREE 153600 PE, which can contains the 92467 moved PE.<br />
* the {{ic|--alloc anywhere}} option is used as we move PE inside the same partition. In case of different partitions, the command would look something like this: {{ic|# pvmove /dev/sdb1:1000-1999 /dev/sdc1:0-999}}<br />
* the move can takes long (one/two hours) in case of large size. It can be a good idea to run this command in a [[Tmux]] or [[GNU Screen]] session. Any unwanted stop of the process can be fatal.<br />
* once the operation is complete, run [[Fsck]] to make sure your file system is valid.}}<br />
<br />
====== Resize physical volume ======<br />
<br />
Once all your free physical segments are on the last physical extent, run {{ic|# vgdisplay}} and see your free PE.<br />
<br />
Then you can now run again the command:<br />
<br />
# pvresize --setphysicalvolumesize ''size'' ''PhysicalVolume''<br />
<br />
See the result:<br />
<br />
{{hc|# pvs|<br />
PV VG Fmt Attr PSize PFree <br />
/dev/sdd1 vg1 lvm2 a-- 1t 500g<br />
}}<br />
<br />
====== Resize partition ======<br />
<br />
Last, you need to shrink the partition with your favorite [[Partitioning#Partitioning tools|partitioning tool]].<br />
<br />
==== Logical volumes ====<br />
<br />
{{Note|''lvresize'' provides more or less the same options as the specialized {{ic|lvextend}} and {{ic|lvreduce}} commands, while allowing to do both types of operation. Notwithstanding this, all those utilities offer a {{ic|-r, --resizefs}} option which allows to resize the file system together with the LV using {{ic|fsadm(8)}} (''ext2'', [[ext3]], [[ext4]], ''ReiserFS'' and [[XFS]] supported). Therefore it may be easier to simply use {{ic|lvresize}} for both operations and use {{ic|--resizefs}} to simplify things a bit, except if you have specific needs or want full control over the process.}}<br />
<br />
===== Growing or shrinking with lvresize =====<br />
<br />
{{Warning|While enlarging a file system can often be done on-line (''i.e.'' while it is mounted), even for the root partition, shrinking will nearly always require to first unmount the file system so as to prevent data loss. Make sure your FS supports what you are trying to do.}}<br />
<br />
Extend logical volume ''lv1'' within volume group ''vg1'' by 2GB ''without'' touching its file system:<br />
<br />
# lvresize -L +2G vg1/lv1<br />
<br />
Reduce {{ic|vg1/lv1}} of 500MB ''without'' resizing its file system (make sure it is [[#Resizing the file system separately|already shrunk]] in that case):<br />
<br />
# lvresize -L -500M vg1/lv1<br />
<br />
Set {{ic|vg1/lv1}} to 15GB and resize its file sytem ''all at once'':<br />
<br />
# lvresize -L 15G -r vg1/lv1<br />
<br />
{{Note|Only ''ext2'', [[ext3]], [[ext4]], ''ReiserFS'' and [[XFS]] [[file systems]] are supported. If different look for the [[File_systems#Arch_Linux_support|appropriate utility]].}}<br />
<br />
If you want to fill all the free space on a volume group, use the following command:<br />
<br />
# lvresize -l +100%FREE ''vg''/''lv''<br />
<br />
See {{ic|man lvresize}} for more detailed options.<br />
<br />
===== Resizing the file system separately =====<br />
<br />
If not using the {{ic|-r, --resizefs}} option to {{ic|lv{resize,extend,reduce<nowiki>}</nowiki>}} or using a file system unspported by {{ic|fsadm(8)}} ([[Btrfs]], [[ZFS]]...), you need to manually resize the FS before shrinking the LV or after expanding it.<br />
<br />
{{Warning|Not all file systems support resizing without loss of data and/or resizing online.}}<br />
<br />
For example with and ext2/ext3/ext4 file system:<br />
<br />
# resize2fs ''vg''/''lv''<br />
<br />
will expand the FS to the maximum size of the underlying LV, while<br />
<br />
# resize2fs -M ''vg''/''lv''<br />
<br />
will shrink it to its minimum size. To resize it to a specified size, use:<br />
<br />
# resize2fs ''vg''/''lv'' ''NewSize''<br />
<br />
=== Remove logical volume ===<br />
<br />
{{Warning|Before you remove a logical volume, make sure to move all data that you want to keep somewhere else; otherwise, it will be lost!}}<br />
<br />
First, find out the name of the logical volume you want to remove. You can get a list of all logical volumes with:<br />
<br />
# lvs<br />
<br />
Next, look up the mountpoint of the chosen logical volume:<br />
<br />
$ lsblk<br />
<br />
Then unmount the filesystem on the logical volume:<br />
<br />
# umount /<''mountpoint''><br />
<br />
Finally, remove the logical volume:<br />
<br />
# lvremove <''volume_group''>/<''logical_volume''><br />
<br />
For example:<br />
<br />
# lvremove VolGroup00/lvolhome<br />
<br />
Confirm by typing in {{ic|y}}.<br />
<br />
Update {{ic|/etc/fstab}} as necessary.<br />
<br />
You can verify the removal of the logical volume by typing {{ic|lvs}} as root again (see first step of this section).<br />
<br />
=== Add physical volume to a volume group ===<br />
<br />
You first create a new physical volume on the block device you wish to use, then extend your volume group<br />
<br />
{{bc|1=<br />
# pvcreate /dev/sdb1<br />
# vgextend VolGroup00 /dev/sdb1<br />
}}<br />
<br />
This of course will increase the total number of physical extents on your volume group, which can be allocated by logical volumes as you see fit.<br />
<br />
{{Note|It is considered good form to have a [[Partitioning|partition table]] on your storage medium below LVM. Use the appropriate type code: {{ic|8e}} for MBR, and {{ic|8e00}} for GPT partitions.}}<br />
<br />
=== Remove partition from a volume group ===<br />
<br />
If you created a logical volume on the partition, [[#Remove logical volume|remove]] it first.<br />
<br />
All of the data on that partition needs to be moved to another partition. Fortunately, LVM makes this easy:<br />
# pvmove /dev/sdb1<br />
If you want to have the data on a specific physical volume, specify that as the second argument to {{Ic|pvmove}}:<br />
# pvmove /dev/sdb1 /dev/sdf1<br />
Then the physical volume needs to be removed from the volume group:<br />
# vgreduce myVg /dev/sdb1<br />
Or remove all empty physical volumes:<br />
# vgreduce --all vg0<br />
<br />
And lastly, if you want to use the partition for something else, and want to avoid LVM thinking that the partition is a physical volume:<br />
# pvremove /dev/sdb1<br />
<br />
=== Deactivate volume group ===<br />
<br />
Just invoke <br />
# vgchange -a n my_volume_group<br />
<br />
This will deactivate the volume group and allow you to unmount the container it is stored in.<br />
<br />
=== Snapshots ===<br />
<br />
==== Introduction ====<br />
<br />
LVM allows you to take a snapshot of your system in a much more efficient way than a traditional backup. It does this efficiently by using a COW (copy-on-write) policy. The initial snapshot you take simply contains hard-links to the inodes of your actual data. So long as your data remains unchanged, the snapshot merely contains its inode pointers and not the data itself. Whenever you modify a file or directory that the snapshot points to, LVM automatically clones the data, the old copy referenced by the snapshot, and the new copy referenced by your active system. Thus, you can snapshot a system with 35GB of data using just 2GB of free space so long as you modify less than 2GB (on both the original and snapshot).<br />
<br />
==== Configuration ====<br />
<br />
You create snapshot logical volumes just like normal ones.<br />
<br />
# lvcreate --size 100M --snapshot --name snap01 /dev/mapper/vg0-pv<br />
With that volume, you may modify less than 100M of data, before the snapshot volume fills up.<br />
<br />
Reverting the modified 'pv' logical volume to the state when the 'snap01' snapshot was taken can be done with<br />
<br />
{{ic|# lvconvert --merge /dev/vg0/snap01}}<br />
<br />
In case the origin logical volume is active, merging will occur on the next reboot.(Merging can be done even from a LiveCD)<br />
<br />
The snapshot will no longer exist after merging.<br />
<br />
Also multiple snapshots can be taken and each one can be merged with the origin logical volume at will.<br />
<br />
The snapshot can be mounted and backed up with '''dd''' or '''tar'''. The size of the backup file done with '''dd''' will be the size of the files residing on the snapshot volume. <br />
To restore just create a snapshot, mount it, and write or extract the backup to it. And then merge it with the origin.<br />
<br />
It is important to have the ''dm_snapshot'' module listed in the MODULES variable of {{ic|/etc/mkinitcpio.conf}}, otherwise the system will not boot. If you do this on an already installed system, make sure to rebuild the image with<br />
# mkinitcpio -g /boot/initramfs-linux.img<br />
<br />
Todo: scripts to automate snapshots of root before updates, to rollback... updating {{ic|menu.lst}} to boot snapshots (separate article?)<br />
<br />
snapshots are primarily used to provide a frozen copy of a file system to make backups; a backup taking two hours provides a more consistent image of the file system than directly backing up the partition.<br />
<br />
See [[Create root filesystem snapshots with LVM]] for automating the creation of clean root file system snapshots during system startup for backup and rollback.<br />
<br />
[[Dm-crypt/Encrypting an entire system#LVM on LUKS]] and [[Dm-crypt/Encrypting an entire system#LUKS on LVM]].<br />
<br />
If you have LVM volumes not activated via the [[initramfs]], [[#Using units|enable]] the '''lvm-monitoring''' service, which is provided by the {{pkg|lvm2}} package.<br />
<br />
=== LVM Cache (lvmcache) ===<br />
<br />
From [http://man7.org/linux/man-pages/man7/lvmcache.7.html man]:<br />
: ''The cache logical volume type uses a small and fast LV to improve the performance of a large and slow LV. It does this by storing the frequently used blocks on the faster LV. LVM refers to the small fast LV as a cache pool LV. The large slow LV is called the origin LV. Due to requirements from dm-cache (the kernel driver), LVM further splits the cache pool LV into two devices - the cache data LV and cache metadata LV. The cache data LV is where copies of data blocks are kept from the origin LV to increase speed. The cache metadata LV holds the accounting information that specifies where data blocks are stored (e.g. on the origin LV or on the cache data LV). Users should be familiar with these LVs if they wish to create the best and most robust cached logical volumes. All of these associated LVs must be in the same VG.''<br />
<br />
==== Create ====<br />
The fast method is creating a PV (if necessary) on the fast disk and add it to the existing volume group:<br />
<br />
# vgextend dataVG /dev/sdx<br />
<br />
Create a cache pool with automatic meta data on sdb, and convert the existing logical volume (dataLV) to a cached volume, all in one step:<br />
<br />
# lvcreate --type cache -L 19.9G -n dataLV_cachepool dataVG/dataLV /dev/sdx<br />
<br />
==== Remove ====<br />
If you ever need to undo the one step creation operation above:<br />
<br />
# lvconvert --uncache dataVG/dataLV<br />
<br />
This commits any pending writes still in the cache back to the origin LV, then deletes the cache. Other options are available and described in [http://man7.org/linux/man-pages/man7/lvmcache.7.html man].<br />
<br />
==== Root device on a cached LV ====<br />
If your root device is on a cached LV, you must prepare {{Ic|mkinitcpio}} to include required modules:<br />
<br />
{{hc|1= /etc/mkinitcpio.conf|2=<br />
MODULES="... '''dm-cache dm_cache_mq dm_cache_smq''' ..."}}<br />
<br />
'''dm_cache_smq''' is only if you run a linux kernel superior or equal to 4.2<br />
<br />
If you fail to do so, you'll end up in a rescue shell early in the boot process.<br />
A way to boot again is to remove the cache as described above ({{Ic|lvconvert}} may not be available from the rescue shell, but is accessible from the {{Ic|lvm}} tool).<br />
Before leaving the rescue shell, activate the LV.<br />
<br />
== Graphical Configuration ==<br />
<br />
There is no "official" GUI tool for managing LVM volumes, but {{AUR|system-config-lvm}} covers most of the common operations, and provides simple visualizations of volume state. It can automatically resize many file systems when resizing logical volumes.<br />
<br />
{{Accuracy|Vague, unsupported claims}}<br />
<br />
system-config-lvm requires root access, so the .desktop launcher will not work, and you must launch it with sudo. It does not support thin provisioning pools, and will crash on start-up if you have any.<br />
<br />
== Troubleshooting ==<br />
<br />
=== Changes that could be required due to changes in the Arch-Linux defaults ===<br />
<br />
The {{ic|1=use_lvmetad = 1}} must be set in {{ic|/etc/lvm/lvm.conf}}. This is the default now - if you have a {{ic|lvm.conf.pacnew}} file, you must merge this change.<br />
<br />
=== LVM commands do not work ===<br />
<br />
* Load proper module:<br />
# modprobe dm_mod<br />
<br />
The {{ic|dm_mod}} module should be automatically loaded. In case it does not, you can try:<br />
{{Accuracy|Should module loading at boot be done using "/etc/modules-load.d" instead?}}<br />
<br />
{{hc|/etc/mkinitcpio.conf:|<nowiki>MODULES="dm_mod ..."</nowiki>}}<br />
<br />
You will need to [[Mkinitcpio#Image_creation_and_activation|rebuild]] the initramfs to commit any changes you made.<br />
<br />
* Try preceding commands with ''lvm'' like this:<br />
# lvm pvdisplay<br />
<br />
=== Logical Volumes do not show up ===<br />
<br />
If you are trying to mount existing logical volumes, but they do not show up in {{ic|lvscan}}, you can use the following commands to activate them:<br />
<br />
# vgscan<br />
# vgchange -ay<br />
<br />
=== LVM on removable media ===<br />
<br />
Symptoms:<br />
# vgscan<br />
Reading all physical volumes. This may take a while...<br />
/dev/backupdrive1/backup: read failed after 0 of 4096 at 319836585984: Input/output error<br />
/dev/backupdrive1/backup: read failed after 0 of 4096 at 319836643328: Input/output error<br />
/dev/backupdrive1/backup: read failed after 0 of 4096 at 0: Input/output error<br />
/dev/backupdrive1/backup: read failed after 0 of 4096 at 4096: Input/output error<br />
Found volume group "backupdrive1" using metadata type lvm2<br />
Found volume group "networkdrive" using metadata type lvm2<br />
<br />
Cause:<br />
:Removing an external LVM drive without deactivating the volume group(s) first. Before you disconnect, make sure to:<br />
# vgchange -an ''volume group name''<br />
<br />
Fix: assuming you already tried to activate the volume group with {{ic|# vgchange -ay ''vg''}}, and are receiving the Input/output errors:<br />
# vgchange -an ''volume group name''<br />
Unplug the external drive and wait a few minutes:<br />
# vgscan<br />
# vgchange -ay ''volume group name''<br />
<br />
=== Resizing a contiguous logical volume fails === <br />
<br />
If trying to extend a logical volume errors with:<br />
" Insufficient suitable contiguous allocatable extents for logical volume "<br />
<br />
The reason is that the logical volume was created with an explicit contiguous allocation policy (options {{ic|-C y}} or {{ic|--alloc contiguous}}) and no further adjacent contiguous extents are available (see also [http://www.hostatic.ro/2010/02/15/lvm-inherit-and-contiguous-policies/ reference]).<br />
<br />
To fix this, prior to extending the logical volume, change its allocation policy with {{ic|lvchange --alloc inherit <logical_volume>}}. If you need to keep the contiguous allocation policy, an alternative approach is to move the volume to a disk area with sufficient free extents (see [http://superuser.com/questions/435075/how-to-align-logical-volumes-on-contiguous-physical-extents]).<br />
<br />
=== Command "grub-mkconfig" reports "unknown filesystem" errors ===<br />
<br />
Make sure to remove snapshot volumes before generating grub.cfg.<br />
<br />
== See also ==<br />
<br />
* [http://sourceware.org/lvm2/ LVM2 Resource Page] on SourceWare.org<br />
* [http://tldp.org/HOWTO/LVM-HOWTO/ LVM HOWTO] article at The Linux Documentation project<br />
* [http://wiki.gentoo.org/wiki/LVM LVM] article at Gentoo wiki<br />
* [http://www.joshbryan.com/blog/2008/01/02/lvm2-mirrors-vs-md-raid-1/ LVM2 Mirrors vs. MD Raid 1] post by Josh Bryan<br />
* [http://www.tutonics.com/2012/11/ubuntu-lvm-guide-part-1.html Ubuntu LVM Guide Part 1][http://www.tutonics.com/2012/12/lvm-guide-part-2-snapshots.html Part 2 detals snapshots]</div>Wzyboyhttps://wiki.archlinux.org/index.php?title=List_of_applications/Multimedia&diff=408015List of applications/Multimedia2015-11-03T06:27:00Z<p>Wzyboy: /* Screencast */ Add FFcast</p>
<hr />
<div><noinclude><br />
[[Category:Applications]]<br />
[[Category:Multimedia]]<br />
[[es:List of applications/Multimedia]]<br />
[[it:List of applications/Multimedia]]<br />
[[ja:アプリケーション一覧/マルチメディア]]<br />
[[ru:List of applications/Multimedia]]<br />
[[zh-cn:List of applications/Multimedia]]<br />
[[zh-tw:List of applications/Multimedia]]<br />
{{List of applications navigation}}<br />
</noinclude><br />
== Multimedia ==<br />
<br />
=== Codecs ===<br />
<br />
See the main article: [[Codecs]].<br />
<br />
=== Image ===<br />
<br />
==== Image viewers ====<br />
<br />
See also [[Wikipedia:Comparison of image viewers]].<br />
<br />
===== Console =====<br />
<br />
* {{App|fbi|Image viewer for the linux framebuffer console.|https://www.kraxel.org/blog/linux/fbida/|{{Pkg|fbida}}}}<br />
* {{App|fbv|Very simple graphic file viewer for the framebuffer console.|http://s-tech.elsat.net.pl/fbv/|{{Pkg|fbv}}}}<br />
* {{App|fim|Highly customizable and scriptable framebuffer image viewer based on fbi.|http://www.autistici.org/dezperado/fim/|{{AUR|fim}}}}<br />
* {{App|jfbview|Framebuffer PDF and image viewer based on Imlib2. Features include Vim-like controls, rotation and zoom, zoom-to-fit, and fast multi-threaded rendering.|http://seasonofcode.com/pages/jfbview.html|{{AUR|jfbview}}{{Broken package link|{{aur-mirror|jfbview}}}}}}<br />
<br />
===== Graphical =====<br />
<br />
* {{App|[[Wikipedia:Eye_of_GNOME|Eye of GNOME]]|Image viewing and cataloging program, which is a part of the GNOME desktop environment.|https://wiki.gnome.org/Apps/EyeOfGnome|{{Pkg|eog}}}}<br />
* {{App|Eye of MATE|Simple graphics viewer for the MATE desktop.|https://github.com/mate-desktop/eom|{{Pkg|eom}}}}<br />
* {{App|[[feh]]|Fast, lightweight image viewer that uses imlib2.|http://feh.finalrewind.org|{{Pkg|feh}}}}<br />
* {{App|meh|meh is a small, simple, super fast image viewer using raw XLib.|http://www.johnhawthorn.com/meh/|{{AUR|meh-git}}}}<br />
* {{App|GalaPix|OpenGL-based image viewer for simultaneously viewing and zooming large collections of image files,|http://code.google.com/p/galapix/|{{AUR|galapix}}}}<br />
* {{App|[[Wikipedia:Geeqie|Geeqie]]|Image browser and viewer (fork of GQview) that adds additional functionality such as support for RAW files.|http://geeqie.sourceforge.net/|{{Pkg|geeqie}}}}<br />
* {{App|Gimmage|Gtkmm image viewer.|http://gimmage.berlios.de/|{{Pkg|gimmage}}}}<br />
* {{App|GPicView|Simple and fast image viewer for X, which is part of the [[LXDE]] desktop.|http://lxde.sourceforge.net/gpicview/|{{Pkg|gpicview}}}}<br />
* {{App|[[Wikipedia:GQview|GQview]]|Image browser that features single click access to view images and move around the directory tree|http://gqview.sourceforge.net/|{{AUR|gqview-devel}}}}<br />
* {{App|[[Wikipedia:GThumb|gThumb]]|Image viewer for the GNOME desktop.|https://wiki.gnome.org/Apps/gthumb|{{Pkg|gthumb}}}}<br />
* {{App|[[Wikipedia:Gwenview|Gwenview]]|Fast and easy to use image viewer for the KDE desktop.|http://gwenview.sourceforge.net/|{{Pkg|gwenview}}}}<br />
* {{App|Mirage|PyGTK image viewer featuring support for crop and resize, custom actions and a thumbnail panel.|http://mirageiv.berlios.de|{{Pkg|mirage}}}}<br />
* {{App|nomacs|Free (GPLv3) Qt image viewer for many operating systems. It is feature-rich but starts fast and can be configured to show additional widgets or only the image.|http://www.nomacs.org/|{{Pkg|nomacs}}}}<br />
* {{App|Phototonic|Fast and functional image viewer and organizer (Qt).| https://github.com/oferkv/phototonic|{{AUR|phototonic}}}}<br />
* {{App|PhotoQt|Fast and highly configurable image viewer with a simple and nice interface.|http://photoqt.org/|{{AUR|photoqt}}}}<br />
* {{App|[[Wikipedia:Picasa|Picasa]]|Image organizer and viewer from Google that has editing capabilities and integration with the photo-sharing website.|http://picasa.google.com/|{{AUR?|picasa}}}}<br />
* {{App|Quick Image Viewer|Very small and fast image viewer based on GTK+ and imlib2.|http://spiegl.de/qiv/|{{Pkg|qiv}}}}<br />
* {{App|Ristretto|Fast and lightweight image viewer for the Xfce desktop environment.|http://goodies.xfce.org/projects/applications/ristretto|{{Pkg|ristretto}}}}<br />
* {{App|Shotwell|A digital photo organizer designed for the GNOME desktop environment|https://wiki.gnome.org/Apps/Shotwell|{{Pkg|shotwell}}}}<br />
* {{App|[[Simple Viewer GL]]|Simple image viewer using OpenGL, it has few dependencies.|https://aur.archlinux.org/packages/simpleviewergl-git/|{{AUR|simpleviewergl-git}}{{Broken package link|{{aur-mirror|simpleviewergl-git}}}}}}<br />
* {{App|[[sxiv]]|Simple image viewer based on imlib2 that works well with tiling window managers.|https://github.com/muennich/sxiv|{{Pkg|sxiv}}}}<br />
* {{App|[[Wikipedia:Viewnior|Viewnior]]|Minimalistic GTK+ image viewer featuring support for flipping, rotating, animations and configurable mouse actions.|http://xsisqox.github.com/Viewnior/|{{Pkg|viewnior}}}}<br />
* {{App|Xloadimage|Classic X image viewer.|http://sioseis.ucsd.edu/xloadimage.html|{{Pkg|xloadimage}}}}<br />
* {{App|[[Wikipedia:XnView|XnView MP]]|Efficient image viewer, browser and converter.|http://www.xnview.com/en/index.html|{{AUR|xnviewmp}}}}<br />
* {{App|[[Wikipedia:Xv_(software)|xv]]|Shareware program written by John Bradley to display and modify digital images under the X Window System.|http://www.trilon.com/xv/|{{Pkg|xv}}}}<br />
<br />
==== Graphics and image manipulation ====<br />
<br />
===== Raster editors =====<br />
<br />
See also [[Wikipedia:Comparison of raster graphics editors]].<br />
<br />
* {{App|AfterShot Pro|Professional workflow and RAW conversion. Successor of Bibble Pro.|http://www.aftershotpro.com/en/products/aftershot-pro/|{{AUR|aftershotpro}}}}<br />
* {{App|AzPainter|A Painting software. |http://azpainter.sourceforge.jp/|{{AUR|azpainter}}}}<br />
* {{App|[[Wikipedia:Bibble (software)|Bibble Pro]]|Digital imaging program designed to assist photographers in post-production work and efficient optimization of images created in the Raw image format.|http://www.corel.com/corel/pages/index.jsp?pgid&#61;12800164|{{AUR|bibblepro}}{{Broken package link|{{aur-mirror|bibblepro}}}}}}<br />
* {{App|[[Wikipedia:darktable|darktable]]|Photography workflow and RAW development application.|http://www.darktable.org//|{{Pkg|darktable}}}}<br />
* {{App|dcraw|Converts many camera RAW formats.|http://www.cybercom.net/~dcoffin/dcraw/|{{Pkg|dcraw}}}}<br />
* {{App|[[Wikipedia:digiKam|digiKam]]|KDE-based image organizer with built-in editing features via a plugin architecture. digiKam asserts it is more full featured than similar applications with a larger set of image manipulation features including RAW image import and manipulation.|http://www.digikam.org/|{{Pkg|digikam}}}}<br />
* {{App|[[Wikipedia:GIMP|GIMP]]|Image editing suite in the vein of proprietary editors such as [[Wikipedia:Adobe Photoshop|Adobe Photoshop]]. GIMP ([[GNU]] Image Manipulation Program) has been started in the mid 1990s and has acquired a large number of [[CMYK support in The GIMP|plugins]] and additional tools.|http://www.gimp.org/|{{Pkg|gimp}}}}<br />
* {{App|[[Wikipedia:GNU Paint|Gpaint]]|[[Wikipedia:PC_Paintbrush|Paintbrush]] clone for GNOME.|http://www.gnu.org/software/gpaint/|{{AUR|gpaint}}}}<br />
* {{App|[[Wikipedia:GraphicsMagick|GraphicsMagick]]|Fork of ImageMagick designed to have API and command-line stability. It also supports multi-CPU for enhanced performance and thus is used by some large commercial sites (Flickr, etsy) for its performance.|http://www.graphicsmagick.org/|{{Pkg|graphicsmagick}}}}<br />
* {{App|[[Wikipedia:ImageMagick|ImageMagick]]|Command-line image manipulation program. It is known for its accurate format conversions with support for over 100 formats. Its API enables it to be scripted and it is usually used as a backend processor.|http://www.imagemagick.org/script/index.php|{{Pkg|imagemagick}}}}<br />
* {{App|[[Wikipedia:KolourPaint|KolourPaint]]|Free raster graphics editor for KDE, similar to Microsoft's Paint application before Windows 7, but with some additional features such as support for transparency. Part of {{Grp|kde-applications}} and {{Grp|kdegraphics}} groups.|http://kolourpaint.org|{{Pkg|kdegraphics-kolourpaint}}}}<br />
* {{App|[[Wikipedia:Krita|Krita]]|Digital painting and illustration software included based on the KDE platform and Calligra libraries. Part of {{Grp|calligra}} group.|http://krita.org/|{{Pkg|calligra-krita}}}}<br />
* {{App|Luminance HDR|Open source graphical user interface application that aims to provide a workflow for HDR imaging.|http://qtpfsgui.sourceforge.net/|{{Pkg|luminancehdr}}}}<br />
* {{App|mtPaint|Graphics editing program geared towards creating indexed palette images and pixel art.|http://mtpaint.sourceforge.net/|{{Pkg|mtpaint}}}}<br />
* {{App|[[Wikipedia:MyPaint|MyPaint]]|Free software graphics application for digital painters.|http://mypaint.intilinux.com|{{Pkg|mypaint}}}}<br />
* {{App|Nathive|"Usable image editor", based on GNOME libraries with a focus on usability and a smooth learning curve.|http://www.nathive.org/|{{AUR|nathive}}{{Broken package link|{{aur-mirror|nathive}}}}}}<br />
* {{App|[[Wikipedia:Pinta (software)|Pinta]]|Drawing and editing program modeled after [[Wikipedia:Paint.net|Paint.NET]]. Its goal is to provide a simplified alternative to GIMP for casual users.|http://pinta-project.com/|{{Pkg|pinta}}}}<br />
* {{App|[[Wikipedia:Shotwell_(software)|Shotwell]]|Image organizer with a small set of image manipulation features (rotate, crop, color adjust, and red eye removal). It can import photos directly from digital cameras and export them to social media sites (Facebook, Flickr, Picasa Web Albums, etc.).|http://yorba.org/shotwell/|{{Pkg|shotwell}}}}<br />
* {{App|[[Wikipedia:XPaint|XPaint]]|Color image editing tool which features most standard paint program options.|http://sourceforge.net/projects/sf-xpaint/|{{AUR|xpaint}}}}<br />
<br />
===== Vector graphics - illustration =====<br />
<br />
See also [[Wikipedia:Comparison of vector graphics editors]].<br />
<br />
* {{App|[[Wikipedia:Asymptote_(vector_graphics_language)|Asymptote]]|A descriptive vector graphics language (like PGF/TikZ and Metapost) with a C-like syntax and LaTeX support.|http://asymptote.sourceforge.net|{{Pkg|asymptote}}}}<br />
* {{App|[[Wikipedia:Dia_(software)|Dia]]|GTK+-based diagram creation program.|https://wiki.gnome.org/Apps/Dia|{{Pkg|dia}}}}<br />
* {{App|[[Wikipedia:Graphviz|Graphviz]]|Set of tools for drawing graphs in the descriptive DOT language.|http://www.graphviz.org|{{Pkg|graphviz}}}}<br />
* {{App|[[Wikipedia:Inkscape|Inkscape]]|Vector graphics editor, with capabilities similar to [[Wikipedia:Adobe Illustrator|Illustrator]], [[Wikipedia:CorelDRAW|CorelDraw]], or [[Wikipedia:Xara X|Xara X]], using the SVG (Scalable Vector Graphics) file format. Inkscape supports many advanced SVG features (markers, clones, alpha blending, etc.) and great care is taken in designing a streamlined interface. It is very easy to edit nodes, perform complex path operations, trace bitmaps and much more. It's developers also aim to maintain a thriving user and developer community by using open, community-oriented development.|http://inkscape.org/|{{Pkg|inkscape}}}}<br />
* {{App|[[Wikipedia:Karbon (software)|Karbon]]|Vector graphics editor, part of the Calligra Suite. Part of {{Grp|calligra}} group.|http://www.calligra-suite.org/karbon/|{{Pkg|calligra-karbon}}}}<br />
* {{App|[[Wikipedia:Pencil2D|Pencil Project]]|An open-source GUI prototyping and mockup tool.|http://pencil.evolus.vn/|{{AUR|pencil}}}}<br />
* {{App|[[Wikipedia:SK1_(program)|sK1]]|Replacement for Adobe Illustrator or CorelDraw, oriented for "prepress ready" PostScript & PDF output.|http://sk1project.org/|{{Pkg|sk1}}}}<br />
* {{App|[[Wikipedia:Xara_Xtreme_LX|Xara LX]]|Advanced vector graphics program, the open source version of the commercial Xara X.|http://www.xaraxtreme.org/|{{AUR|xaralx}}}}<br />
* {{App|[[Wikipedia:yEd|yEd]]|General-purpose diagramming program for flowcharts, network diagrams, UML diagrams, BPMN diagrams, mind maps, organization charts, and Entity Relationship diagrams.|http://www.yworks.com/en/products_yed_about.html|{{AUR|yed}}}}<br />
<br />
===== Vector graphics - CAD =====<br />
<br />
See also [[Wikipedia:List of computer-aided design editors]].<br />
<br />
* {{App|[[Wikipedia:BRL-CAD|BRL-CAD]]|Constructive solid geometry (CSG) solid modeling computer-aided design (CAD) system that includes an interactive geometry editor, ray tracing support for graphics rendering and geometric analysis, computer network distributed framebuffer support, scripting, image-processing and signal-processing tools.|http://brlcad.org/|{{AUR|brlcad}}}}<br />
* {{App|[[Wikipedia:DraftSight|DraftSight]]|Dassault Systemes' freeware 2D CAD application. DraftSight allows users to access DWG/DXF files, regardless of which CAD software was originally used to create them.|http://www.3ds.com/products-services/draftsight/overview/|{{AUR|draftsight}}}}<br />
* {{App|[[Wikipedia:FreeCAD|FreeCAD]]|CAD/CAE program, based on OpenCascade, Qt and Python with features such as macro recording, workbenches and the ability to run as server.|http://sourceforge.net/projects/free-cad/|{{Pkg|freecad}}}}<br />
* {{App|LeoCAD|CAD program for creating virtual LEGO models. It has an easy to use interface and currently includes over 6000 different pieces created by the LDraw community.|http://leocad.org|{{AUR|leocad}}}}<br />
* {{App|[[Wikipedia:LibreCAD|LibreCAD]]|Powerful 2D CAD application based on Qt. It has been forked from QCad Community Edition.|http://www.librecad.org/|{{Pkg|librecad}}}}<br />
* {{App|[[Wikipedia:OpenSCAD|OpenSCAD]]|Open source 2D/3D CAD using programmers approach.|http://www.openscad.org|{{Pkg|openscad}} {{AUR|openscad-git}}}}<br />
* {{App|[[Wikipedia:QCad|QCAD]]|Powerful 2D CAD application that began in 1999. QCaD includes DFX standard file format and supports HPGL format.|http://www.qcad.org/|{{Pkg|qcad}}}}<br />
* {{App|[[Wikipedia:VariCAD|VariCAD]]|3D/2D CAD and mechanical engineering application which provides support for parameters and geometric constraints, tools for shells, pipelines, sheet metal unbending and crash tests, assembly support, mechanical part and symbol libraries, calculations, bills of materials, and more.|http://www.varicad.com/en/home/|{{AUR|varicad}}{{Broken package link|{{aur-mirror|varicad}}}}}}<br />
<br />
===== 3D modeling/rendering =====<br />
<br />
See also [[Wikipedia:Comparison of 3D computer graphics software]].<br />
<br />
* {{App|[[Wikipedia:Art_of_Illusion|Art of Illusion]]|3D modeling and rendering studio written in Java.|http://www.artofillusion.org/|{{AUR|aoi}}}}<br />
* {{App|[[Wikipedia:Blender_(software)|Blender]]|fully integrated 3D graphics creation suite capable of 3D modeling, texturing, and animation, among other things.|http://www.blender.org/|{{Pkg|blender}}}}<br />
* {{App|[[Wikipedia:MakeHuman|MakeHuman™]]|Parametrical modeling program for creating human bodies.|http://www.makehuman.org/|{{AUR|makehuman}}}}<br />
* {{App|[[Wikipedia:POV-Ray|POV-Ray]]|Script-based raytracer for creating 3D graphics.|http://www.povray.org/|{{Pkg|povray}}}}<br />
* {{App|[[Wikipedia:Wings3d|Wings 3D]]|Advanced subdivision modeler that is both powerful and easy to use.|http://www.wings3d.com/|{{Pkg|wings3d}}}}<br />
<br />
==== Screen capture ====<br />
<br />
See also: [[Taking a screenshot]].<br />
<br />
=== Audio ===<br />
<br />
==== Audio systems ====<br />
<br />
See the main article: [[Sound system]].<br />
<br />
See also [[Wikipedia:Sound server]].<br />
<br />
* {{App|wineasio|Provides an ASIO to JACK driver for ''wine''. ASIO is the most common Windows low-latency driver, so is commonly used in audio workstation programs.|http://sourceforge.net/projects/wineasio/|{{AUR|wineasio}}}}<br />
<br />
==== Audio players ====<br />
<br />
See also [[Wikipedia:Comparison of audio player software]].<br />
<br />
===== Music player daemons and clients =====<br />
<br />
See also: [[Music_Player_Daemon#Clients|List of MPD clients]]<br />
<br />
* {{App|[[Music Player Daemon]]|Lightweight and scalable choice for music management.|http://www.musicpd.org/|{{Pkg|mpd}}}}<br />
* {{App|[[Wikipedia:XMMS2|XMMS2]]|Complete rewrite of the popular music player.|https://xmms2.org|{{Pkg|xmms2}}}}<br />
<br />
===== Command-line players =====<br />
<br />
* {{App|[[cmus]]|Very feature-rich ncurses-based music player.|http://cmus.github.io/|{{Pkg|cmus}}}}<br />
* {{App|Cplay|Curses front-end for various audio players (ogg123, mpg123, mpg321, splay, madplay, and mikmod, xmp, and sox).|http://directory.fsf.org/wiki/Cplay|{{AUR|cplay}}}}<br />
* {{App|Herrie|Minimalistic console-based music player with native AudioScrobbler support.|http://herrie.info/|{{AUR|herrie}}}}<br />
* {{App|[[Moc|MOC]]|Ncurses console audio player with support for the MP3, OGG, and WAV formats.|http://moc.daper.net/|{{Pkg|moc}}}}<br />
* {{App|MPFC|Gstreamer-based audio player with curses interface.|http://code.google.com/p/mpfc/|{{AUR|mpfc}}}}<br />
* {{App|[[Wikipedia:Mpg123|mpg123]]|Fast free MP3 console audio player for Linux, FreeBSD, Solaris, HP-UX and nearly all other UNIX systems (also decodes MP1 and MP2 files).|http://www.mpg123.org/|{{Pkg|mpg123}}}}<br />
* {{App|mps-youtube|Terminal based YouTube jukebox with playlist management. Plays audio/video through mplayer/mpv.|https://github.com/mps-youtube/mps-youtube|{{Pkg|mps-youtube}}}}<br />
* {{App|pancake|Cli pandora client built with urwid.|https://github.com/osum4est/pancake/}}<br />
* {{App|[[pianobar]]|Console-based frontend for Pandora.|http://6xq.net/projects/pianobar/|{{Pkg|pianobar}}}}<br />
* {{App|PyTone|Advanced music jukebox with a console interface.|http://www.luga.de/pytone/|{{AUR|pytone}}{{Broken package link|{{aur-mirror|pytone}}}}}}<br />
* {{App|shell-fm|Console-based player for the streams provided by [http://www.last.fm/ last.fm].|https://github.com/jkramer/shell-fm/|{{AUR|shell-fm}}{{Broken package link|{{aur-mirror|shell-fm}}}}}}<br />
* {{App|[[Wikipedia:VLC_media_player|VLC]]|Highly portable multimedia player with ncurses interface module, and multimedia framework capable of reading most audio and video formats as well as DVDs, Audio CDs, VCDs, and various streaming protocols.|https://www.videolan.org/vlc/|{{Pkg|vlc}}}}<br />
* {{App|whistle|a curses-based commandline audio player.|https://github.com/ap0calypse/whistle/|{{AUR|whistle-git}}}}<br />
<br />
===== GUI players =====<br />
<br />
* {{App|[[Amarok]]|Mature Qt-based player known for its plethora of features.|http://amarok.kde.org/|{{Pkg|amarok}}}}<br />
* {{App|[[Wikipedia:aTunes|aTunes]]|Audio player written in Java.|http://www.atunes.org/|{{AUR|atunes}}{{Broken package link|{{aur-mirror|atunes}}}}}}<br />
* {{App|[[Audacious]]|[[Wikipedia:Winamp|Winamp]] clone like Beep and old XMMS versions.|http://audacious-media-player.org/|{{Pkg|audacious}}}}<br />
* {{App|[[Wikipedia:Banshee (media player)|Banshee]]|[[Wikipedia:iTunes|iTunes]] clone, built with GTK+ and [[Mono]], feature-rich and more actively developed.|http://banshee.fm/|{{Pkg|banshee}}}}<br />
* {{App|[[Wikipedia:Clementine_(software)|Clementine]]|Amarok 1.4 clone, ported to Qt 4.|http://www.clementine-player.org/|{{Pkg|clementine}}}}<br />
* {{App|Cuberok|Music player and collection manager with a lightweight interface.|http://code.google.com/p/cuberok/|{{AUR|cuberok}}}}<br />
* {{App|DeaDBeeF|Light and fast music player with many features, no GNOME or KDE dependencies, supports console-only, as well as a GTK+ GUI, comes with many plugins, and has a metadata editor.|http://deadbeef.sourceforge.net/|{{Pkg|deadbeef}}}}<br />
* {{App|[[Exaile]]|GTK+ clone of Amarok.|http://www.exaile.org/|{{AUR|exaile}}}}<br />
* {{App|gmusicbrowser|Open-source jukebox for large collections of MP3/OGG/FLAC files.|http://gmusicbrowser.org/|{{AUR|gmusicbrowser}}}}<br />
* {{App|GNOME Music|Music is the new GNOME music playing application. It aims to combine an elegant and immersive browsing experience with simple and straightforward controls.|https://wiki.gnome.org/Apps/Music|{{Pkg|gnome-music}}}}<br />
* {{App|Goggles Music Manager|Music collection manager and player that automatically categorizes your music, supports gapless playback, features easy tag editing, and internet radio support. Uses the [[Wikipedia:Fox toolkit|Fox toolkit]].|http://gogglesmm.github.io/|{{Pkg|gogglesmm}}}}<br />
* {{App|Guayadeque|Full featured media player that can easily manage large collections and uses the GStreamer media framework.|http://guayadeque.org/|{{AUR|guayadeque}}}}<br />
* {{App|[[Wikipedia:JuK|JuK]]|JuK is an audio jukebox application, supporting collections of MP3, Ogg Vorbis, and FLAC audio files.|https://www.kde.org/applications/multimedia/juk/|{{Pkg|kdemultimedia-juk}}}}<br />
* {{App|Listen|Listen is a Music player and management for GNOME written in python.|https://launchpad.net/listen|{{AUR|listen}}}}<br />
* {{App|LXMusic|A minimalist xmms2-based music player.|http://wiki.lxde.org/en/LXMusic|{{Pkg|lxmusic}}}}<br />
* {{App|Miam-player|Cross-platform open source music player.|http://miam-player.org/|{{AUR|miam-player}}{{Broken package link|{{aur-mirror|miam-player}}}}}}<br />
* {{App|[[Wikipedia:Nightingale (software)|Nightingale]]|Open source clone of iTunes-based on [[Wikipedia:Songbird (software)|Songbird]], that uses Mozilla technologies and the GStreamer framework.|http://getnightingale.com/|{{AUR|nightingale}}{{Broken package link|{{aur-mirror|nightingale}}}}}}<br />
* {{App|Noise|Simple, fast, and good looking music player.|https://launchpad.net/noise|{{Pkg|noise}}{{Broken package link|replaced by {{Pkg|noise-player}}}}}}<br />
* {{App|Nuvola Player|Integrated Google Music, 8tracks and Hype Machine player.|http://nuvolaplayer.fenryxo.cz/|{{AUR|nuvolaplayer}}}}<br />
* {{App|Potamus|Lightweight, intuitive GTK+ audio player with an emphasis on high audio quality.|http://offog.org/code/potamus.html|{{AUR|potamus}}{{Broken package link|{{aur-mirror|potamus}}}}}}<br />
* {{App|Pragha|GTK+ music manager. (fork of the Consonance Music Manager)|https://pragha-music-player.github.io/|{{Pkg|pragha}}}}<br />
* {{App|Qmmp|Qt-based multimedia player with a user interface that is similar to Winamp or XMMS.|http://qmmp.ylsoftware.com/|{{Pkg|qmmp}}}}<br />
* {{App|[[Wikipedia:Quod Libet (software)|Quod Libet]]|Audio player written with PyGTK and GStreamer with support for regular expressions in playlists.|http://code.google.com/p/quodlibet/|{{Pkg|quodlibet}}}}<br />
* {{App|[[Wikipedia:Rhythmbox|Rhythmbox]]|GTK+ clone of iTunes, used by default in GNOME.|https://wiki.gnome.org/Apps/Rhythmbox|{{Pkg|rhythmbox}}}}<br />
* {{App|[[Spotify]]|Proprietary music streaming service. It supports local playback and streaming from Spotify's vast library (requires a free account).|http://www.spotify.com/|{{AUR|spotify}}}}<br />
* {{App|[[SpotCommander]]|A remote control for Spotify, optimized for mobile devices. It works on any device with a modern browser, and it's free and open source.|http://olejon.github.io/spotcommander/|{{AUR|spotcommander}}}}<br />
* {{App|Tomahawk|Music player application written in C++/Qt. It decouples the name of the song from the source it was shared from - and fulfills the request using all of your available sources.|http://www.tomahawk-player.org/|{{AUR|tomahawk}}}}<br />
* {{App|[[Wikipedia:VLC_media_player|VLC]]|Highly portable multimedia player and multimedia framework capable of reading most audio and video formats as well as DVDs, Audio CDs, VCDs, and various streaming protocols.|https://www.videolan.org/vlc/|{{Pkg|vlc}}}}<br />
* {{App|[[wikipedia:XMMS|XMMS]]|Skinnable GTK+ standalone media player similar to Winamp.|http://legacy.xmms2.org/|{{AUR|xmms}}}}<br />
<br />
==== Volume managers ====<br />
<br />
* {{App|GVolWheel|An audio mixer which lets you control the volume through a tray icon.|http://sourceforge.net/projects/gvolwheel/|{{AUR|gvolwheel}}}}<br />
* {{App|GVTray|A master volume mixer for the system tray.|http://code.google.com/p/gtk-tray-utils/|{{AUR|gvtray}}{{Broken package link|{{aur-mirror|gvtray}}}}}}<br />
*{{App|pa-applet|PulseAudio system tray applet with volume bar.|https://github.com/fernandotcl/pa-applet|{{Aur|pa-applet-git}}}}<br />
* {{App|PNMixer|A fork of Obmixer. It has many new features such as ALSA channel selection, connect/disconnect detection, shortcuts, etc.|https://github.com/nicklan/pnmixer/wiki|{{AUR|pnmixer}}}}<br />
*{{App|Volnoti|Volnoti is a lightweight volume notification daemon for GNU/Linux and other POSIX operating systems.|https://github.com/davidbrazdil/volnoti|{{Aur|volnoti}}}}<br />
* {{App|Volti|A GTK application for controlling audio volume from system tray with an internal mixer and support for multimedia keys that uses only ALSA.|http://code.google.com/p/volti/|{{AUR|volti}}}}<br />
* {{App|VolumeIcon|Another volume control for your system tray with channel selection, themes and an external mixer.|http://softwarebakery.com/maato/volumeicon.html|{{Pkg|volumeicon}}}}<br />
* {{App|VolWheel|A little application which lets you control the sound volume easily through a tray icon you can scroll on.|http://oliwer.net/b/volwheel.html|{{Pkg|volwheel}}}}<br />
<br />
==== CD ripping ====<br />
<br />
See [[Optical disc drive#CD]].<br />
<br />
==== Visualization ====<br />
<br />
* {{App|[[Wikipedia:MilkDrop|ProjectM]]|Music visualizer which uses 3D accelerated iterative image-based rendering.|http://projectm.sourceforge.net/|{{Pkg|projectm}}}}<br />
* {{App|[[Wikipedia:VSXu|VSXu]]|Free to use program that lets you create and perform real-time audio visual presets.|http://www.vsxu.com/|{{AUR|vsxu}}}}<br />
<br />
==== Audio tag editors ====<br />
<br />
* {{App|Audio Tag Tool|Tool to edit tags in MP3 and Ogg Vorbis files.|http://tagtool.sourceforge.net/|{{AUR|tagtool}}}}<br />
* {{App|Cowbell|Elegant music organizer that supports many audio formats including MP3, Ogg/FLAC, and MusePack.|http://more-cowbell.org/|{{AUR|cowbell}}{{Broken package link|{{aur-mirror|cowbell}}}}}}<br />
* {{App|[[Wikipedia:EasyTag|EasyTag]]|Utility for viewing, editing and writing ID3 tags of your MP3 files.|http://easytag.sourceforge.net/|{{Pkg|easytag}}}}<br />
* {{App|[[Wikipedia:Ex Falso (software)|Ex Falso]]|Cross-platform free and open source audio tag editor and library organizer.|http://code.google.com/p/quodlibet/|{{AUR|exfalso}}}}<br />
* {{App|ID3 Mass Tagger|Command-line utility to edit ID3 1.x and 2.x tags.|http://squell.github.io/id3/|{{Pkg|id3}}}}<br />
* {{App|Kid3|MP3, Ogg/Vorbis, FLAC, MPC, MP4/AAC, MP2, Speex, TrueAudio, WavPack, WMA, WAV and AIFF files tag editor.|http://kid3.sourceforge.net/|{{Pkg|kid3}}}}<br />
* {{App|MP3Info|MP3 technical info viewer and ID3 1.x tag editor.|http://ibiblio.org/mp3info/|{{Pkg|mp3info}}}}<br />
* {{App|[[Wikipedia:MusicBrainz Picard|MusicBrainz Picard]]|Cross-platform audio tag editor written in Python (the official MusicBrainz tagger).|http://musicbrainz.org/doc/MusicBrainz_Picard|{{Pkg|picard}}}}<br />
* {{App|[[Wikipedia:Puddletag|Puddletag]]|Replacement for the famous MP3tag for Windows.|http://puddletag.sourceforge.net/|{{Pkg|puddletag}}}}<br />
* {{App|taffy|Simple command-line tag editor for many audio formats.|http://github.com/jangler/taffy|{{AUR|taffy}}}}<br />
* {{App|Qoobar|Universal QT-based audio tagger (specialized for classical music)|http://qoobar.sourceforge.net/en/index.htm|{{AUR|qoobar}}{{Broken package link|{{aur-mirror|qoobar}}}}}}<br />
<br />
==== Sound editing ====<br />
<br />
* {{App|[[Wikipedia:Ardour (software)|Ardour]]|Multichannel hard disk recorder and digital audio workstation.|http://ardour.org/|{{Pkg|ardour}}}}<br />
* {{App|[[Wikipedia:Audacity (audio editor)|Audacity]]|Program that lets you manipulate digital audio waveforms.|http://audacity.sourceforge.net/|{{Pkg|audacity}}}}<br />
* {{App|GNOME Sound Recorder|The Sound Recorder application enables you to record and play .flac, .ogg (OGG audio, or .oga), and .wav sound files.|https://wiki.gnome.org/Design/Apps/SoundRecorder|{{Pkg|gnome-sound-recorder}}}}<br />
* {{App|[[Wikipedia:Jokosher|Jokosher]]|Non-linear multi-track digital audio editor that is being developed in Python, using the GTK+ interface and GStreamer as an audio back-end.|https://launchpad.net/jokosher/|{{AUR|jokosher}}}}<br />
* {{App|KWave|Sound editor for KDE.|http://kwave.sourceforge.net/|{{AUR|kwave}}{{Broken package link|{{aur-mirror|kwave}}}}}}<br />
* {{App|[[LMMS]]|The Linux MultiMedia Studio. Free cross-platform software which allows you to produce music with your computer.|http://lmms.sourceforge.net/|{{Pkg|lmms}}}}<br />
* {{App|[[Wikipedia:Qtractor|Qtractor]]|Qt-based hard disk recorder and digital audio workstation application that aims to provide digital audio workstation software simple enough for the average home user, and yet powerful enough for the professional user.|http://qtractor.sourceforge.net/qtractor-index.html|{{Pkg|qtractor}}}}<br />
* {{App|[[Wikipedia:Rosegarden|Rosegarden]]|Digital audio workstation program developed with ALSA and Qt that acts as an audio and MIDI sequencer, scorewriter and musical composition and editing tool.|http://www.rosegardenmusic.com/|{{Pkg|rosegarden}}}}<br />
* {{App|XCFA|Tool to extract the contens of audio CDs and convert them to various formats.|http://www.xcfa.tuxfamily.org/|{{AUR|xcfa}}}}<br />
<br />
=== Mobile phone managers ===<br />
<br />
* {{App|gnokii|Tools and user space driver for use with mobile phones.|http://www.gnokii.org/|{{Pkg|gnokii}}}}<br />
* {{App|GNOME Phone Manager|Control your mobile phone from your GNOME desktop.|https://wiki.gnome.org/PhoneManager|{{Pkg|gnome-phone-manager}}}}<br />
* {{App|KDE Connect|A project that aims to communicate all your devices.|http://community.kde.org/KDEConnect|{{Pkg|kdeconnect}}}}<br />
* {{App|Moto4Lin|File manager and seem editor for Motorola P2K phones (like C380/C650).|http://sourceforge.net/projects/moto4lin/|{{AUR|moto4lin}}{{Broken package link|{{aur-mirror|moto4lin}}}}}}<br />
<br />
=== Video ===<br />
<br />
==== Video players ====<br />
<br />
See also [[Wikipedia:Comparison of video player software]].<br />
<br />
===== Console =====<br />
<br />
* {{App|[[MPlayer]]|Video player that supports a complete and versatile array of video and audio formats.|http://www.mplayerhq.hu/design7/news.html|{{Pkg|mplayer}} (See also a very similar fork: {{AUR|mplayer2}}}})<br />
* {{App|[[mpv]]|Movie player based on MPlayer and mplayer2.|http://mpv.io|{{Pkg|mpv}} {{AUR|mpv-git}}}}<br />
* {{App|[[Wikipedia:xine|xine-ui]]|Free multimedia player.|http://www.xine-project.org|{{Pkg|xine-ui}}}}<br />
* {{App|[[Wikipedia:VLC media player|VLC ncurses]]|Command-line version of the famous video player that can play smoothly high definition videos in the TTY.|https://www.videolan.org/vlc/|{{AUR|vlc-nogui}}{{Broken package link|{{aur-mirror|vlc-nogui}}}}}}<br />
<br />
===== Graphical =====<br />
<br />
See also: [[MPlayer#Frontends.2FGUIs|MPlayer frontends]], [[mpv]].<br />
<br />
* {{App|bomi|Powerful and easy to use multimedia player (mpv backend) (Qt 5).|https://bomi-player.github.io/|{{AUR|bomi}} (previously {{AUR|cmplayer}}{{Broken package link|{{aur-mirror|cmplayer}}}}), {{AUR|bomi-git}}}}<br />
* {{App|[[Wikipedia:Kdemultimedia#Dragon Player|Dragon Player]]|Simple video player for KDE. Part of the {{Grp|kdemultimedia}} group.|http://www.kde.org/applications/multimedia/dragonplayer/|{{Pkg|kdemultimedia-dragonplayer}}{{Broken package link|replaced by {{Pkg|dragon}}}}}}<br />
* {{App|[[Wikipedia:Kaffeine|Kaffeine]]|Very versatile KDE media player that, by default, utilizes Xine as its backend and has excellent support of digital TV (DVB).|http://kaffeine.kde.org/|{{Pkg|kaffeine}}}}<br />
* {{App|Parole|Modern media player based on the GStreamer framework.|http://goodies.xfce.org/projects/applications/parole/|{{Pkg|parole}}}}<br />
* {{App|Rage|Video and audio player written with Enlightenment Foundation Libraries with some extra bells and whistles.|http://www.enlightenment.org/p.php?p&#61;about/rage|{{AUR|rage}}}}<br />
* {{App|Snappy|Powerful media player with a minimalistic interface.|https://wiki.gnome.org/Apps/Snappy|{{Pkg|snappy-player}}}}<br />
* {{App|[[Wikipedia:SMPlayer (software)|SMPlayer]]|SMPlayer is a cross-platform graphical front-end for MPlayer and forks of Mplayer using GUI widgets offered by Qt.|http://smplayer.sourceforge.net/|{{Pkg|smplayer}}}}<br />
* {{App|[[Wikipedia:GNOME Videos|GNOME Videos]]|Media player (audio and video) for the GNOME desktop that uses GStreamer. Part of {{Grp|gnome}}|https://wiki.gnome.org/Apps/Videos|{{Pkg|totem}}}}<br />
* {{App|[[Wikipedia:VLC media player|VLC media player]]|Middleweight video player with support for a wide variety of audio and video formats.|https://www.videolan.org/vlc/|{{Pkg|vlc}}}}<br />
* {{App|Whaaw! Media Player|Lightweight GStreamer-based audio and video player that can serve as a good alternative to Totem for those who do not like all of those GNOME dependencies.|http://home.gna.org/whaawmp/|{{Pkg|whaawmp}}}}<br />
* {{App|Xnoise|GTK+ and GStreamer-based media player for both audio and video with "a slick GUI, great speed and lots of features." (development ceased)|http://www.xnoise-media-player.com/|{{Pkg|xnoise}}}}<br />
* {{App|QMPlay2|QMPlay2 is a QT based video player. It can play and stream all formats supported by ffmpeg and libmodplug. It has on integrated module system, which includes a Youtube browser.|3=http://qt-apps.org/content/show.php/QMPlay2?content=153339|4={{AUR|qmplay2}}}}<br />
<br />
==== Subtitles ====<br />
<br />
* {{App|Gaupol|Full-featured subtitle editor.|http://home.gna.org/gaupol|{{Pkg|gaupol}}}}<br />
* {{App|Penguin Subtitle Player|Penguin Subtitle Player is an open-source, cross-platform standalone subtitle player, as an alternative to Greenfish Subtitle Player, SrtViewer (Mac), SRTPlayer, JustSubsPlayer and Free Subtitle Player.|https://github.com/carsonip/Penguin-Subtitle-Player|{{AUR|penguin-subtitle-player-git}}}}<br />
* {{App|subdl|Automatic subtitle downloader.|http://code.google.com/p/subdl/|{{Pkg|subdl}}}}<br />
* {{App|SubtitlesPrinter|Print subtitles above a X-screen, independently of the video player.|https://github.com/OlivierMarty/SubtitlesPrinter|{{AUR|subtitles-printer-git}}}}<br />
<br />
==== DVD ripping ====<br />
<br />
See [[Optical disc drive#DVD_2]].<br />
<br />
==== Video editors ====<br />
<br />
See also [[Wikipedia:Comparison of video editing software]].<br />
<br />
===== Console =====<br />
<br />
* {{App|[[Wikipedia:Avidemux|Avidemux]]|Free video editor designed for simple cutting, filtering and encoding tasks.|http://fixounet.free.fr/avidemux/|{{Pkg|avidemux-cli}}}}<br />
* {{App|[[FFmpeg]]|Complete, cross-platform solution to record, convert and stream audio and video.|http://ffmpeg.org/|{{Pkg|ffmpeg}}}}<br />
* {{App|HandBrake-CLI|Simple yet powerful video transcoder ideal for batch mkv/x264 ripping.|http://handbrake.fr/|{{Pkg|handbrake-cli}}}}<br />
<br />
===== Graphical =====<br />
<br />
* {{App|[[Wikipedia:Avidemux|Avidemux]]|Free video editor designed for simple cutting, filtering and encoding tasks.|http://fixounet.free.fr/avidemux/|{{Pkg|avidemux-gtk}} {{Pkg|avidemux-qt}}}}<br />
* {{App|[[Wikipedia:Cinelerra|Cinelerra (Community Version)]]|Professional video editing and compositing environment.|http://cinelerra.org/|{{Pkg|cinelerra-cv}}}}<br />
* {{App|HandBrake|Simple yet powerful video transcoder ideal for batch mkv/x264 ripping. GTK+ version.|http://handbrake.fr/|{{Pkg|handbrake}}}}<br />
* {{App|[[Wikipedia:Kdenlive|Kdenlive]]|Non-linear video editor designed for basic to semi-professional work.|http://kdenlive.org/|{{Pkg|kdenlive}}}}<br />
* {{App|[[Wikipedia:Lightworks|Lightworks]]|A proprietary professional non-linear editing system for editing and mastering digital video in various formats.|http://www.lwks.com/|{{AUR|lwks}}}}<br />
* {{App|[[Wikipedia:LiVES|LiVES]]|Video editor and VJ (live performance) platform.| http://lives-video.com/ |{{AUR|lives}}}}<br />
* {{App|Open Movie Editor|Video editing program designed for basic movie making capabilities, powerful, yet easy to use.| http://www.openmovieeditor.org/ | {{AUR|openmovieeditor}}{{Broken package link|{{aur-mirror|openmovieeditor}}}}}}<br />
* {{App|[[Wikipedia:OpenShot_Video_Editor|Open Shot]]|Non-linear video editor based on MLT framework.|http://www.openshotvideo.com/|{{Pkg|openshot}}}}<br />
* {{App|[[Wikipedia:Pitivi|PiTiVi]]|Video editor designed to be intuitive and integrate well in the GNOME desktop.|http://www.pitivi.org/ |{{Pkg|pitivi}}}}<br />
* {{App|[[Wikipedia:Shotcut|Shotcut]]|Shotcut is a free, open source, cross-platform video editor.|http://www.shotcut.org/ |{{AUR|shotcut-bin}}}}<br />
* {{App|Transmageddon|Simple python application for transcoding video into formats supported by GStreamer.|http://www.linuxrising.org/ |{{Pkg|transmageddon}}}}<br />
<br />
==== Screencast ====<br />
<br />
See also [[Wikipedia:Comparison of screencasting software]].<br />
<br />
Screencast utilities allow you to create a video of your desktop or individual windows.<br />
<br />
* {{App|byzanz|Simple screencast tool that produces GIF animations.|http://blogs.gnome.org/otte/2009/08/30/byzanz-0-2-0/|{{AUR|byzanz-git}}}}<br />
* {{App|glc|Screencast tool that can capture the sound and video from OpenGL applications, such as games, where regular X11 screencast tools produce choppy results.|https://github.com/nullkey/glc|{{AUR|glc}}{{Broken package link|{{aur-mirror|glc}}}}}}<br />
* {{App|Istanbul|Simple desktop session recorder that produces ogg videos.|https://wiki.gnome.org/Projects/Istanbul|{{AUR|istanbul}}{{Broken package link|{{aur-mirror|istanbul}}}}}}<br />
* {{App|Kazam|Screencasting program with design in mind.|https://launchpad.net/kazam|{{AUR|kazam-bzr}}{{Broken package link|{{aur-mirror|kazam-bzr}}}}}}<br />
* {{App|OBS|Free and open source software for video recording and live streaming.|https://obsproject.com/|{{AUR|obs-studio}}}}<br />
* {{App|[[Wikipedia:RecordMyDesktop|RecordMyDesktop]]|An easy to use utility that records your desktop into the ogg format with a CLI, Qt or GTK+ interface.|http://recordmydesktop.sourceforge.net/|{{Pkg|recordmydesktop}} {{Pkg|gtk-recordmydesktop}} {{Pkg|qt-recordmydesktop}}}}<br />
* {{App|simplescreenrecorder|A feature-rich screen recorder written in C++/Qt4 that supports X11 and OpenGL.|http://www.maartenbaert.be/simplescreenrecorder/|{{Pkg|simplescreenrecorder}}}}<br />
* {{App|vokoscreen|Simple screencast tool, GUI ffmpeg.|http://www.kohaupt-online.de/hp|{{AUR|vokoscreen}}}}<br />
* {{App|[[Wikipedia:XVidCap|XVidCap]]|Application used for recording a screencast or digital recording of an X Window System screen output with an audio narration.|http://xvidcap.sourceforge.net/|{{AUR|xvidcap}}}}<br />
* {{App|FFcast|FFmpeg-based screencast tool written in Bash.|https://github.com/lolilolicon/FFcast|{{AUR|ffcast}}}}<br />
<br />
=== Optical media burning ===<br />
<br />
See [[Optical disc drive#Burning CD/DVD/BD with a GUI]].<br />
<br />
=== Podcasts ===<br />
<br />
see [[List of applications/Internet#Podcast_clients|Podcast clients]]<br />
<br />
=== Collection managers ===<br />
<br />
* {{App|[[Beets]]|Music library organizer, tagger and more.|http://beets.radbox.org/|{{Pkg|beets}}}}<br />
* {{App|Demlo|Batch music tagger, encoder, renamer and more.|http://ambrevar.bitbucket.org/demlo/|{{AUR|demlo}}}}<br />
* {{App|[[Wikipedia:GCstar|GCstar]]|GNOME application for organizing various collections (board games, comic books, movies, stamps, etc.).|http://www.gcstar.org/|{{Pkg|gcstar}}}}<br />
* {{App|[[Kodi]]|Application for organizing various collections and automatically retrieving info about them (video, music, photos).|http://kodi.tv/|{{Pkg|kodi}}}}<br />
* {{App|[[Wikipedia:Tellico|Tellico]]|KDE application for organizing various collections (books, video, music, coins, etc.).|http://tellico-project.org/|{{Pkg|tellico}}}}<br />
<br />
=== Lyrics fetchers ===<br />
<br />
* {{App|clyrics|An extensible lyrics fetcher, with daemon support for cmus and mocp.|http://beets.radbox.org/|{{AUR|clyrics}}}}</div>Wzyboyhttps://wiki.archlinux.org/index.php?title=GRUB&diff=352257GRUB2014-12-24T06:56:32Z<p>Wzyboy: /* Master Boot Record (MBR) specific instructions */</p>
<hr />
<div>[[Category:Boot loaders]]<br />
[[ar:GRUB]]<br />
[[cs:GRUB2]]<br />
[[de:GRUB]]<br />
[[el:GRUB]]<br />
[[es:GRUB]]<br />
[[fr:GRUB2]]<br />
[[id:GRUB2]]<br />
[[it:GRUB2]]<br />
[[ja:GRUB]]<br />
[[ru:GRUB]]<br />
[[tr:GRUB2]]<br />
[[zh-CN:GRUB2]]<br />
[[zh-TW:GRUB2]]<br />
{{Related articles start}}<br />
{{Related|Arch boot process}}<br />
{{Related|Boot loaders}}<br />
{{Related|Master Boot Record}}<br />
{{Related|GUID Partition Table}}<br />
{{Related|Unified Extensible Firmware Interface}}<br />
{{Related|GRUB Legacy}}<br />
{{Related|GRUB/EFI examples}}<br />
{{Related|GRUB/Tips and tricks}}<br />
{{Related articles end}}<br />
{{Style|See [[Talk:GRUB#Article cleanup master discussion]]|Talk:GRUB#Article cleanup master discussion}}<br />
{{Accuracy|See [[Talk:GRUB#Article cleanup master discussion]]|Talk:GRUB#Article cleanup master discussion}}<br />
[https://www.gnu.org/software/grub/ GRUB] — not to be confused with [[GRUB Legacy]] — is the next generation of the GRand Unified Bootloader. GRUB is derived from [http://www.nongnu.org/pupa/ PUPA] which was a research project to develop the next generation of what is now GRUB Legacy. GRUB has been rewritten from scratch to clean up everything and provide modularity and portability [https://www.gnu.org/software/grub/grub-faq.html#q1].<br />
<br />
== Preface ==<br />
<br />
* A ''bootloader'' is the first software program that runs when a computer starts. It is responsible for loading and transferring control to the Linux kernel. The kernel, in turn, initializes the rest of the operating system.<br />
* The name ''GRUB'' officially refers to version ''2'' of the software, see [https://www.gnu.org/software/grub/]. If you are looking for the article on the legacy version, see [[GRUB Legacy]].<br />
* GRUB supports [[Btrfs]] as root (without a separate {{ic|/boot}} file system) compressed with either zlib or LZO<br />
* GRUB does not support [[F2fs]] as root so you will need a separate {{ic|/boot}} with a supported file system.<br />
<br />
== BIOS systems ==<br />
<br />
=== GUID Partition Table (GPT) specific instructions ===<br />
<br />
On a BIOS/[[GPT]] configuration a [http://www.gnu.org/software/grub/manual/html_node/BIOS-installation.html BIOS boot partition] is required. GRUB embeds its {{ic|core.img}} into this partition.<br />
<br />
{{Note|<br />
* Before attempting this method keep in mind that not all systems will be able to support this partitioning scheme, read more on [[GUID Partition Table#BIOS systems|GUID partition tables]].<br />
* This additional partition is only needed on a GRUB, BIOS/GPT partitioning scheme. Previously, for a GRUB, BIOS/MBR partitioning scheme, GRUB used the Post-MBR gap for the embedding the {{ic|core.img}}). GRUB for GPT, however, does not use the Post-GPT gap to confirm to GPT specifications that require 1_megabyte/2048_sector disk boundaries.<br />
* For [[UEFI]] systems this extra partition is not required as no embedding of boot sectors takes place in that case.<br />
}}<br />
<br />
Create a mebibyte partition ({{ic|1=+1MiB}} with {{ic|gdisk}}) on the disk with no file system and type {{ic|ef02}} (or {{ic|bios_grub}} in {{ic|parted}}). This partition can be in any position order but has to be on the first 2 TiB of the disk. This partition needs to be created before GRUB installation. When the partition is ready, install the bootloader as per the instructions below and be sure to include the {{ic|1=--target=i386-pc}} option (as GRUB may mistaken the configuration as EFI-GPT).<br />
<br />
The Post-GPT gap can also be used as the BIOS boot partition though it will be out of GPT alignment specification. Since the partition will not be regularly accessed performance issues can be disregarded (though some disk utilities will display a warning about it). In {{ic|gdisk}} create a new partition starting at sector 34 and spanning to 2047 and set the type. To have the viewable partitions begin at the base consider adding this partition last.<br />
<br />
=== Master Boot Record (MBR) specific instructions ===<br />
<br />
Usually the post-[[MBR]] gap (after the 512 byte MBR region and before the start of the first partition) in many MBR (or 'msdos' disklabel) partitioned systems is 31 KiB when DOS compatibility cylinder alignment issues are satisfied in the partition table. However a post-MBR gap of about 1 to 2 MiB is recommended to provide sufficient room for embedding GRUB's {{ic|core.img}} ({{bug|24103}}). It is advisable to use a partitioning tool that supports 1 MiB partition alignment to obtain this space as well as to satisfy other non-512 byte sector issues (which are unrelated to embedding of {{ic|core.img}}).<br />
<br />
=== Installation ===<br />
<br />
GRUB can be [[pacman|installed]] with the {{Pkg|grub}} package from the [[official repositories]]. It will replace {{AUR|grub-legacy}} , where already installed.<br />
<br />
{{Note|Simply installing the package will not update the {{ic|/boot/grub/i386-pc/core.img}} file and the GRUB modules in {{ic|/boot/grub/i386-pc}}. You need to update them manually using {{ic|grub-install}} as explained below.}}<br />
<br />
==== Install boot files ====<br />
<br />
There are 4 ways to install GRUB boot files in BIOS booting:<br />
<br />
* [[#Install to disk|Install to disk]] (recommended)<br />
* [[#Install to external USB stick|Install to external USB stick]] (for recovery)<br />
* Install to partition or partitionless disk (not recommended)<br />
* [[#Generate core.img alone|Generate core.img alone]] (safest method, but requires another BIOS bootloader like [[Syslinux]] to be installed to chainload {{ic|/boot/grub/i386-pc/core.img}})<br />
<br />
{{Note|See https://www.gnu.org/software/grub/manual/html_node/BIOS-installation.html for additional documentation.}}<br />
<br />
===== Install to disk =====<br />
<br />
{{Note|The method is specific to installing GRUB to a partitioned (MBR or GPT) disk, with GRUB files installed to {{ic|/boot/grub}} and its first stage code installed to the 440-byte MBR boot code region (not to be confused with MBR partition table). }}<br />
<br />
To set up GRUB in the 440-byte Master Boot Record boot code region, populate the {{ic|/boot/grub}} directory, generate the {{ic|/boot/grub/i386-pc/core.img}} file, and embed it in the 31 KiB (minimum size - varies depending on partition alignment) post-MBR gap in case of MBR partitioned disk (or BIOS Boot Partition in case of GPT partitioned disk, denoted by {{ic|bios_grub}} flag in parted and EF02 type code in gdisk), run:<br />
<br />
# grub-install --target=i386-pc --recheck --debug /dev/sd''x''<br />
# grub-mkconfig -o /boot/grub/grub.cfg<br />
<br />
{{Note| {{ic|1=--target=i386-pc}} instructs {{ic|grub-install}} to install for BIOS systems only. It is recommended to always use this option to remove ambiguity in grub-install.<br />
}}<br />
<br />
If you use [[LVM]] for your {{ic|/boot}}, you can install GRUB on multiple physical disks.<br />
<br />
===== Install to external USB stick =====<br />
<br />
Assume your USB stick's first partition is FAT32 and its partition is /dev/sdy1<br />
<br />
# mkdir -p /mnt/usb ; mount /dev/sdy1 /mnt/usb<br />
# grub-install --target=i386-pc --recheck --debug --boot-directory=/mnt/usb/boot /dev/sdy<br />
# grub-mkconfig -o /mnt/usb/boot/grub/grub.cfg<br />
<br />
# optional, backup config files of grub.cfg<br />
# mkdir -p /mnt/usb/etc/default<br />
# cp /etc/default/grub /mnt/usb/etc/default<br />
# cp -a /etc/grub.d /mnt/usb/etc<br />
<br />
# sync ; umount /mnt/usb<br />
<br />
===== Install to partition or partitionless disk =====<br />
{{Warning|GRUB '''strongly discourages''' installation to a partition boot sector or a partitionless disk as GRUB Legacy or Syslinux does. This setup is prone to breakage, especially during updates, and is '''not supported''' by Arch devs.}}<br />
<br />
To set up grub to a partition boot sector, to a partitionless disk (also called superfloppy) or to a floppy disk, run (using for example {{ic|/dev/sdaX}} as the {{ic|/boot}} partition):<br />
<br />
# chattr -i /boot/grub/i386-pc/core.img<br />
# grub-install --target=i386-pc --recheck --debug --force /dev/sdaX<br />
# chattr +i /boot/grub/i386-pc/core.img<br />
<br />
{{Note|<br />
* {{ic|/dev/sdaX}} used for example only.<br />
* {{ic|1=--target=i386-pc}} instructs {{ic|grub-install}} to install for BIOS systems only. It is recommended to always use this option to remove ambiguity in ''grub-install''.<br />
}}<br />
<br />
You need to use the {{ic|--force}} option to allow usage of blocklists and should not use {{ic|1=--grub-setup=/bin/true}} (which is similar to simply generating {{ic|core.img}}).<br />
<br />
{{ic|grub-install}} will give out warnings like which should give you the idea of what might go wrong with this approach:<br />
<br />
/sbin/grub-setup: warn: Attempting to install GRUB to a partitionless disk or to a partition. This is a BAD idea.<br />
/sbin/grub-setup: warn: Embedding is not possible. GRUB can only be installed in this setup by using blocklists.<br />
However, blocklists are UNRELIABLE and their use is discouraged.<br />
<br />
Without {{ic|--force}} you may get the below error and {{ic|grub-setup}} will not setup its boot code in the partition boot sector:<br />
<br />
/sbin/grub-setup: error: will not proceed with blocklists<br />
<br />
With {{ic|--force}} you should get:<br />
<br />
Installation finished. No error reported.<br />
<br />
The reason why {{ic|grub-setup}} does not by default allow this is because in case of partition or a partitionless disk is that GRUB relies on embedded blocklists in the partition bootsector to locate the {{ic|/boot/grub/i386-pc/core.img}} file and the prefix directory {{ic|/boot/grub}}. The sector locations of {{ic|core.img}} may change whenever the file system in the partition is being altered (files copied, deleted etc.). For more info, see https://bugzilla.redhat.com/show_bug.cgi?id=728742 and https://bugzilla.redhat.com/show_bug.cgi?id=730915.<br />
<br />
The workaround for this is to set the immutable flag on {{ic|/boot/grub/i386-pc/core.img}} (using {{ic|chattr}} command as mentioned above) so that the sector locations of the {{ic|core.img}} file in the disk is not altered. The immutable flag on {{ic|/boot/grub/i386-pc/core.img}} needs to be set only if GRUB is installed to a partition boot sector or a partitionless disk, not in case of installation to MBR or simple generation of {{ic|core.img}} without embedding any bootsector (mentioned above).<br />
<br />
Unfortunately, the grub.cfg file that is created will not contain the proper UUID in order to boot, even if it reports no errors. see https://bbs.archlinux.org/viewtopic.php?pid=1294604#p1294604.<br />
In order to fix this issue the following commands:<br />
<br />
# mount /dev/sdxY /mnt #Your root partition.<br />
# mount /dev/sdxZ /mnt/boot #Your boot partition (if you have one).<br />
# arch-chroot /mnt<br />
# pacman -S linux<br />
# grub-mkconfig -o /boot/grub/grub.cfg<br />
<br />
===== Generate core.img alone =====<br />
<br />
To populate the {{ic|/boot/grub}} directory and generate a {{ic|/boot/grub/i386-pc/core.img}} file '''without''' embedding any GRUB bootsector code in the MBR, post-MBR region, or the partition bootsector, add {{ic|1=--grub-setup=/bin/true}} to {{ic|grub-install}}:<br />
<br />
# grub-install --target=i386-pc --grub-setup=/bin/true --recheck --debug /dev/sda<br />
<br />
{{Note|<br />
* {{ic|/dev/sda}} used for example only.<br />
* {{ic|1=--target=i386-pc}} instructs {{ic|grub-install}} to install for BIOS systems only. It is recommended to always use this option to remove ambiguity in grub-install.<br />
}}<br />
<br />
You can then chainload GRUB's {{ic|core.img}} from GRUB Legacy or syslinux as a Linux kernel or as a multiboot kernel.<br />
<br />
== UEFI systems ==<br />
<br />
{{Note|<br />
* It is recommended to read and understand the [[UEFI]], [[GPT]] and [[UEFI Bootloaders]] pages.<br />
* When installing to use UEFI it is important to start the install with your machine in UEFI mode. The Arch Linux install media are UEFI bootable. Once you are in the boot options of your machine you will see the install media in the list to select.<br />
}}<br />
<br />
=== Check if you have GPT and an ESP ===<br />
<br />
An EFI System Partition (ESP) is needed on every disc you want to boot using EFI. GPT is not strictly necessary, but it is highly recommended and is the only method currently supported in this article. If you are installing Arch Linux on an EFI-capable computer with an already-working operating system, like Windows 8 for example, it is very likely that you already have an ESP. To check for GPT and for an ESP, use {{ic|parted}} as root to print the partition table of the disk you want to boot from. (We are calling it {{ic|/dev/sda}}.)<br />
<br />
# parted /dev/sda print<br />
<br />
For GPT, you are looking for "Partition Table: GPT". For EFI, you are looking for a small (512 MiB or less) partition with a vfat file system and the ''boot'' flag enabled. On it, there should be a directory named "EFI". If these criteria are met, this is your ESP. Make note of the partition number. You will need to know which one it is, so you can mount it later on while installing GRUB to it.<br />
<br />
=== Create an ESP ===<br />
<br />
If you do not have an ESP, you will need to create one. See [[UEFI#EFI System Partition]]<br />
<br />
=== Installation ===<br />
<br />
{{Note|UEFI firmware are not implemented consistently by hardware manufacturers. The installation examples provided are intended to work on the widest range of UEFI systems possible. Those experiencing problems despite applying these methods are encouraged to share detailed information for their hardware-specific cases, especially where solving these problems. A [[GRUB/EFI examples]] article has been provided for such cases.}}<br />
<br />
This section assumes you are installing GRUB for x86_64 systems (x86_64-efi). For i686 systems, replace {{ic|x86_64-efi}} with {{ic|i386-efi}} where appropriate.<br />
<br />
Make sure you are in a [[bash]] shell. For example, when booting from the Arch ISO:<br />
<br />
# arch-chroot /mnt /bin/bash<br />
<br />
[[Install]] the packages {{Pkg|grub}} and {{Pkg|efibootmgr}}. '''GRUB''' is the bootloader, ''efibootmgr'' creates bootable {{ic|.efi}} stub entries used by the GRUB installation script.<br />
<br />
The following steps install the GRUB UEFI application to {{ic|'''$esp'''/EFI/grub}}, install its modules to {{ic|/boot/grub/x86_64-efi}}, and place the bootable {{ic|grubx64.efi}} stub in {{ic|'''$esp'''/EFI/grub_uefi}}.<br />
<br />
First, tell GRUB to use UEFI, set the boot directory and set the bootloader ID. Change {{ic|$esp}} to your efi partition (usually {{ic|/boot}}):<br />
<br />
# grub-install --target=x86_64-efi --efi-directory='''$esp''' --bootloader-id='''grub_uefi''' --recheck<br />
<br />
The bootloader id is what appears in the boot options to identity the GRUB EFI boot option; make sure this is something you will recognize later.<br />
<br />
After the above install finished the main GRUB directory is located at {{ic|/boot/grub/}}. <br />
<br />
Do not forget to [[#Generate the main configuration file]] after finalizing further setup dependant [[#Configuration]]. <br />
<br />
{{Note|<br />
* While some distributions require a {{ic|/boot/efi}} or {{ic|/boot/EFI}} directory, Arch does not.<br />
* {{ic|--efi-directory}} and {{ic|--bootloader-id}} are specific to GRUB UEFI. {{ic|--efi-directory}} specifies the mountpoint of the ESP. It replaces {{ic|--root-directory}}, which is deprecated. {{ic|--bootloader-id}} specifies the name of the directory used to store the {{ic|grubx64.efi}} file.<br />
* You might note the absence of a <device_path> option (e.g.: {{ic|/dev/sda}}) in the {{ic|grub-install}} command. In fact any <device_path> provided will be ignored by the GRUB install script, as UEFI bootloaders do not use a MBR or partition boot sector at all.<br />
}}<br />
<br />
See [[#UEFI|UEFI troubleshooting]] in case of problems.<br />
<br />
=== Further reading ===<br />
<br />
Below is other relevant information regarding installing Arch via UEFI<br />
<br />
==== Alternative install method ====<br />
<br />
Usually, GRUB keeps all files, including configuration files, in {{ic|/boot}}, regardless of where the EFI System Partition is mounted.<br />
<br />
If you want to keep these files inside the EFI System Partition itself, add {{ic|--boot-directory&#61;$esp}} to the grub-install command:<br />
<br />
# grub-install --target=x86_64-efi --efi-directory=$esp --bootloader-id=grub --boot-directory=$esp --recheck --debug<br />
<br />
This puts all GRUB files in {{ic|$esp/grub}}, instead of in {{ic|/boot/grub}}. When using this method, make sure you have ''grub-mkconfig'' put the configuration file in same place:<br />
<br />
# grub-mkconfig -o $esp/grub/grub.cfg<br />
<br />
Configuration is otherwise the same.<br />
<br />
==== UEFI firmware workaround ====<br />
<br />
Some UEFI firmware requires that the bootable {{ic|.efi}} stub have a specific name and be placed in a specific location: {{ic|$esp/EFI/boot/bootx64.efi}} (where {{ic|$esp}} is the UEFI partition mountpoint). Failure to do so in such instances will result in an unbootable installation. Fortunately, this will not cause any problems with other firmware that does not require this.<br />
<br />
To do so, first create the necessary directory, and then copy across the grub {{ic|.efi}} stub, renaming it in the process:<br />
<br />
# mkdir $esp/EFI/boot<br />
# cp $esp/EFI/grub_uefi/grubx64.efi $esp/EFI/boot/bootx64.efi<br />
<br />
==== Create a GRUB entry in the firmware boot manager ====<br />
{{ic|grub-install}} automatically tries to create a menu entry in the boot manager. If it does not, then see [[UEFI#efibootmgr]] for instructions to use {{ic|efibootmgr}} to create a menu entry. However, the problem is likely to be that you have not booted your CD/USB in UEFI mode, as in [[UEFI#Create UEFI bootable USB from ISO]].<br />
<br />
==== GRUB standalone ====<br />
<br />
It is possible to create a {{ic|grubx64_standalone.efi}} application which has all the modules embedded in a tar archive within the UEFI application, thus removing the need for having a separate directory populated with all of the GRUB UEFI modules and other related files. This is done using the {{ic|grub-mkstandalone}} command (included in {{Pkg|grub}}) as follows:<br />
<br />
# echo 'configfile ${cmdpath}/grub.cfg' > /tmp/grub.cfg ## use single quotes, ${cmdpath}/grub.cfg should be present as it is<br />
# grub-mkstandalone -d /usr/lib/grub/x86_64-efi/ -O x86_64-efi --modules="part_gpt part_msdos" --fonts="unicode" --locales="en@quot" --themes="" -o "$esp/EFI/grub/grubx64_standalone.efi" "boot/grub/grub.cfg=/tmp/grub.cfg" -v<br />
<br />
Then copy the GRUB config file to {{ic|$esp/EFI/grub/grub.cfg}} and create a UEFI Boot Manager entry for {{ic|$esp/EFI/grub/grubx64_standalone.efi}} using [[UEFI#efibootmgr|efibootmgr]].<br />
<br />
{{Note|<br />
The option {{ic|1=--modules="part_gpt part_msdos"}} (with the quotes) is necessary for the {{ic|${cmdpath} }} feature to work properly.<br />
}}<br />
<br />
{{Warning|You may find that the {{ic|grub.cfg}} file is not loaded due to {{ic|${cmdpath} }} missing a slash (i.e. {{ic|(hd1,msdos2)EFI/Boot}} instead of {{ic|(hd1,msdos2)/EFI/Boot}}) and so you are dropped into a GRUB shell. If this happens determine what {{ic|${cmdpath} }} is set to ({{ic|echo ${cmdpath} }}) and then load the config file manually (e.g. {{ic|configfile (hd1,msdos2)/EFI/Boot/grub.cfg}}).}}<br />
<br />
==== Technical information ====<br />
<br />
The GRUB EFI file always expects its config file to be at {{ic|${prefix}/grub.cfg}}. However in the standalone GRUB EFI file, the {{ic|${prefix} }} is located inside a tar archive and embedded inside the standalone GRUB EFI file itself (inside the GRUB environment, it is denoted by {{ic|"(memdisk)"}}, without quotes). This tar archive contains all the files that would be stored normally at {{ic|/boot/grub}} in case of a normal GRUB EFI install.<br />
<br />
Due to this embedding of {{ic|/boot/grub}} contents inside the standalone image itself, it does not rely on actual (external) {{ic|/boot/grub}} for anything. Thus in case of standalone GRUB EFI file {{ic|1=${prefix}==(memdisk)/boot/grub}} and the standalone GRUB EFI file reads expects the config file to be at {{ic|1=${prefix}/grub.cfg==(memdisk)/boot/grub/grub.cfg}}.<br />
<br />
Hence to make sure the standalone GRUB EFI file reads the external {{ic|grub.cfg}} located in the same directory as the EFI file (inside the GRUB environment, it is denoted by {{ic|${cmdpath} }}), we create a simple {{ic|/tmp/grub.cfg}} which instructs GRUB to use {{ic|${cmdpath}/grub.cfg}} as its config ({{ic|configfile ${cmdpath}/grub.cfg}} command in {{ic|(memdisk)/boot/grub/grub.cfg}}). We then instruct grub-mkstandalone to copy this {{ic|/tmp/grub.cfg}} file to {{ic|${prefix}/grub.cfg}} (which is actually {{ic|(memdisk)/boot/grub/grub.cfg}}) using the option {{ic|1="boot/grub/grub.cfg=/tmp/grub.cfg"}}.<br />
<br />
This way, the standalone GRUB EFI file and actual {{ic|grub.cfg}} can be stored in any directory inside the EFI System Partition (as long as they are in the same directory), thus making them portable.<br />
<br />
== Generate the main configuration file ==<br />
<br />
After the installation, the main configuration file {{ic|grub.cfg}} needs to be generated. The generation process can be influenced by a variety of options in {{ic|/etc/default/grub}} and scripts in {{ic|/etc/grub.d/}}; see [[#Configuration]]. <br />
<br />
If you have not done additional configuration, the automatic generation will determine the root filesystem of the system to boot for the configuration file. For that to succeed it is important that the system is either booted or chrooted into. <br />
<br />
{{Note|Remember that {{ic|grub.cfg}} has to be re-generated after any change to {{ic|/etc/default/grub}} or files in {{ic|/etc/grub.d/}}.}}<br />
<br />
Use the ''grub-mkconfig'' tool to generate {{ic|grub.cfg}}:<br />
<br />
# grub-mkconfig -o /boot/grub/grub.cfg<br />
<br />
{{Note|<br />
* The default file path is {{ic|/boot/grub/grub.cfg}}, not {{ic|/boot/grub/i386-pc/grub.cfg}}. <br />
* If you are trying to run ''grub-mkconfig'' in a chroot or ''systemd-nspawn'' container, you might notice that it does not work, complaining that ''grub-probe'' cannot get the "canonical path of /dev/sdaX". In this case, try using ''arch-chroot'' as described in the [https://bbs.archlinux.org/viewtopic.php?pid&#61;1225067#p1225067 BBS post].<br />
}}<br />
<br />
By default the generation scripts automatically add menu entries for Arch Linux to any generated configuration. See [[#Dual-booting]] for configuration with other systems.<br />
<br />
== Configuration ==<br />
<br />
This section only covers editing the {{ic|/etc/default/grub}} configuration file. See [[GRUB/Tips and tricks]] for more information.<br />
<br />
Remember to always [[#Generate the main configuration file]] after making changes to {{ic|/etc/default/grub}}.<br />
<br />
=== Additional arguments ===<br />
<br />
To pass custom additional arguments to the Linux image, you can set the {{ic|GRUB_CMDLINE_LINUX}} + {{ic|GRUB_CMDLINE_LINUX_DEFAULT}} variables in {{ic|/etc/default/grub}}. The two are appended to each other and passed to kernel when generating regular boot entries. For the ''recovery'' boot entry, only {{ic|GRUB_CMDLINE_LINUX}} is used in the generation.<br />
<br />
It is not necessary to use both, but can be useful. For example, you could use {{ic|<nowiki>GRUB_CMDLINE_LINUX_DEFAULT="resume=/dev/sdaX</nowiki> quiet"}} where {{ic|sda'''X'''}} is your swap partition to enable resume after hibernation. This would generate a recovery boot entry without the resume and without ''quiet'' suppressing kernel messages during a boot from that menu entry. Though, the other (regular) menu entries would have them as options.<br />
<br />
By default ''grub-mkconfig'' determines the [[Persistent_block_device_naming#by-uuid|UUID]] of the root filesystem for the configuration. To disable this, uncomment {{ic|1=GRUB_DISABLE_LINUX_UUID=true}}. <br />
<br />
For generating the GRUB recovery entry you also have to comment out {{ic|<nowiki>#GRUB_DISABLE_RECOVERY=true</nowiki>}} in {{ic|/etc/default/grub}}.<br />
<br />
You can also use {{ic|<nowiki>GRUB_CMDLINE_LINUX="resume=/dev/disk/by-uuid/${swap_uuid}"</nowiki>}}, where {{ic|${swap_uuid} }} is the [[Persistent block device naming|UUID]] of your swap partition.<br />
<br />
See [[Kernel parameters]] for more info.<br />
<br />
=== Dual-booting ===<br />
<br />
{{Tip|To have ''grub-mkconfig'' search for other installed systems, [[install]] {{Pkg|os-prober}}.}}<br />
<br />
==== Automatically generating using /etc/grub.d/40_custom and grub-mkconfig ====<br />
<br />
The best way to add other entries is editing the {{ic|/etc/grub.d/40_custom}} or {{ic|/boot/grub/custom.cfg}}. The entries in this file will be automatically added when running {{ic|grub-mkconfig}}.<br />
After adding the new lines, run:<br />
{{bc|<nowiki># grub-mkconfig -o /boot/grub/grub.cfg</nowiki>}}<br />
or, for UEFI-GPT Mode (As per [[#Alternative install method]]):<br />
{{bc|<nowiki># grub-mkconfig -o /boot/efi/EFI/GRUB/grub.cfg</nowiki>}}<br />
to generate an updated {{ic|grub.cfg}}.<br />
<br />
For example, a typical {{ic|/etc/grub.d/40_custom}} file, could appear similar to the following one, created for [http://h10025.www1.hp.com/ewfrf/wc/product?cc=us&destPage=product&lc=en&product=5402703&tmp_docname= HP Pavilion 15-e056sl Notebook PC], originally with Microsoft Windows 8 preinstalled. Each {{ic|menuentry}} should mantain a structure similar to the following ones. Note that the UEFI partition {{ic|/dev/sda2}} within GRUB is called {{ic|hd0,gpt2}} and {{ic|ahci0,gpt2}} (see [[#Windows installed in UEFI-GPT Mode menu entry|here]] for more info).<br />
<br />
{{hc|/etc/grub.d/40_custom|<nowiki>#!/bin/sh<br />
exec tail -n +3 $0<br />
# This file provides an easy way to add custom menu entries.&nbsp; Simply type the<br />
# menu entries you want to add after this comment.&nbsp; Be careful not to change<br />
# the 'exec tail' line above.<br />
<br />
menuentry "HP / Microsoft Windows 8.1" {<br />
echo "Loading HP / Microsoft Windows 8.1..."<br />
insmod part_gpt<br />
insmod fat<br />
insmod search_fs_uuid<br />
insmod chain<br />
search --fs-uuid --no-floppy --set=root --hint-bios=hd0,gpt2 --hint-efi=hd0,gpt2 --hint-baremetal=ahci0,gpt2 763A-9CB6<br />
chainloader /EFI/Microsoft/Boot/bootmgfw.efi<br />
}<br />
<br />
menuentry "HP / Microsoft Control Center" {<br />
echo "Loading HP / Microsoft Control Center..."<br />
insmod part_gpt<br />
insmod fat<br />
insmod search_fs_uuid<br />
insmod chain<br />
search --fs-uuid --no-floppy --set=root --hint-bios=hd0,gpt2 --hint-efi=hd0,gpt2 --hint-baremetal=ahci0,gpt2 763A-9CB6<br />
chainloader /EFI/HP/boot/bootmgfw.efi<br />
}<br />
<br />
menuentry "System shutdown" {<br />
echo "System shutting down..."<br />
halt<br />
}<br />
<br />
menuentry "System restart" {<br />
echo "System rebooting..."<br />
reboot<br />
}</nowiki>}}<br />
<br />
===== GNU/Linux menu entry =====<br />
Assuming that the other distro is on partition {{ic|sda2}}:<br />
<br />
{{bc|<nowiki>menuentry "Other Linux" {<br />
set root=(hd0,2)<br />
linux /boot/vmlinuz (add other options here as required)<br />
initrd /boot/initrd.img (if the other kernel uses/needs one)<br />
}</nowiki>}}<br />
<br />
===== FreeBSD menu entry =====<br />
Requires that FreeBSD is installed on a single partition with UFS. Assuming it is installed on {{ic|sda4}}:<br />
<br />
{{bc|<nowiki>menuentry "FreeBSD" {<br />
set root=(hd0,4)<br />
chainloader +1<br />
}</nowiki>}}<br />
<br />
===== Windows XP menu entry=====<br />
This assumes that your Windows partition is {{ic|sda3}}. Remember you need to point set root and chainloader to the system reserve partition that windows made when it installed, not the actual partition windows is on. This example works if your system reserve partition is {{ic|sda3}}.<br />
<br />
{{bc|<nowiki># (2) Windows XP<br />
menuentry "Windows XP" {<br />
set root="(hd0,3)"<br />
chainloader +1<br />
}</nowiki>}}<br />
<br />
If the Windows bootloader is on an entirely different hard drive than GRUB, it may be necessary to trick Windows into believing that it is the first hard drive. This was possible with {{ic|drivemap}}. Assuming GRUB is on {{ic|hd0}} and Windows is on {{ic|hd2}}, you need to add the following after {{ic|set root}}:<br />
<br />
{{bc|drivemap -s hd0 hd2}}<br />
<br />
===== Windows installed in UEFI-GPT Mode menu entry =====<br />
<br />
{{Note|This menuentry will work only in UEFI boot mode and only if the Windows bitness matches the uefi bitness. It '''WILL NOT WORK''' in bios installed grub(2). See [[Windows_and_Arch_Dual_Boot#Windows_UEFI_vs_BIOS_limitations|this]] and [[Windows_and_Arch_Dual_Boot#Bootloader_UEFI_vs_BIOS_limitations|this]] for more info.}}<br />
<br />
{{bc|<nowiki>if [ "${grub_platform}" == "efi" ]; then<br />
menuentry "Microsoft Windows Vista/7/8/8.1 UEFI-GPT" {<br />
insmod part_gpt<br />
insmod fat<br />
insmod search_fs_uuid<br />
insmod chain<br />
search --fs-uuid --set=root $hints_string $fs_uuid<br />
chainloader /EFI/Microsoft/Boot/bootmgfw.efi<br />
}<br />
fi</nowiki>}}<br />
<br />
where {{ic|$hints_string}} and {{ic|$fs_uuid}} are obtained with the following two commands. {{ic|$fs_uuid}}'s command:<br />
<br />
{{bc|<nowiki># grub-probe --target=fs_uuid $esp/EFI/Microsoft/Boot/bootmgfw.efi<br />
1ce5-7f28</nowiki>}}<br />
<br />
{{ic|$hints_string}}'s command:<br />
<br />
{{bc|<nowiki># grub-probe --target=hints_string $esp/EFI/Microsoft/Boot/bootmgfw.efi<br />
--hint-bios=hd0,gpt1 --hint-efi=hd0,gpt1 --hint-baremetal=ahci0,gpt1</nowiki>}}<br />
<br />
These two commands assume the ESP Windows uses is mounted at {{ic|$esp}}. There might be case differences in the path to Windows's EFI file, what with being Windows, and all.<br />
<br />
===== "Shutdown" menu entry =====<br />
<br />
{{bc|<nowiki>menuentry "System shutdown" {<br />
echo "System shutting down..."<br />
halt<br />
}</nowiki>}}<br />
<br />
===== "Restart" menu entry =====<br />
<br />
{{bc|<nowiki>menuentry "System restart" {<br />
echo "System rebooting..."<br />
reboot<br />
}</nowiki>}}<br />
<br />
===== Windows installed in BIOS-MBR mode =====<br />
<br />
{{Poor writing|This section does not fit into the others, should be slimmed down a bit.}}<br />
<br />
{{Note|GRUB supports booting {{ic|bootmgr}} directly and chainload of partition boot sector is no longer required to boot Windows in a BIOS-MBR setup.}}<br />
<br />
{{Warning|It is the '''system partition''' that has {{ic|/bootmgr}}, not your "real" Windows partition (usually C:). In {{ic|blkid}} output, the system partition is the one with {{ic|LABEL&#61;"SYSTEM RESERVED"}} or {{ic|LABEL&#61;"SYSTEM"}} and is only about 100 to 200 MB in size (much like the boot partition for Arch). See [[Wikipedia:System partition and boot partition]] for more info.}}<br />
<br />
Throughout this section, it is assumed your Windows partition is {{ic|/dev/sda1}}. A different partition will change every instance of hd0,msdos1. First, find the UUID of the NTFS file system of the Windows's SYSTEM PARTITION where the {{ic|bootmgr}} and its files reside. For example, if Windows {{ic|bootmgr}} exists at {{ic|/media/SYSTEM_RESERVED/bootmgr}}:<br />
<br />
For Windows Vista/7/8/8.1:<br />
<br />
# grub-probe --target=fs_uuid /media/SYSTEM_RESERVED/bootmgr<br />
69B235F6749E84CE<br />
<br />
# grub-probe --target=hints_string /media/SYSTEM_RESERVED/bootmgr<br />
--hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1<br />
<br />
{{Note|For Windows XP, replace {{ic|bootmgr}} with {{ic|NTLDR}} in the above commands. And note that there may not be a separate SYSTEM_RESERVED partition; just probe the file NTLDR on your Windows partition.}}<br />
<br />
Then, add the below code to {{ic|/etc/grub.d/40_custom}} or {{ic|/boot/grub/custom.cfg}} and regenerate {{ic|grub.cfg}} with {{ic|grub-mkconfig}} as explained above to boot Windows (XP, Vista, 7 or 8) installed in BIOS-MBR mode:<br />
<br />
{{Note|These menuentries will work only in Legacy BIOS boot mode. It WILL NOT WORK in uefi installed grub(2). See [[Windows_and_Arch_Dual_Boot#Windows_UEFI_vs_BIOS_limitations]] and [[Windows_and_Arch_Dual_Boot#Bootloader_UEFI_vs_BIOS_limitations]].}}<br />
<br />
For Windows Vista/7/8/8.1:<br />
<br />
if [ "${grub_platform}" == "pc" ]; then<br />
menuentry "Microsoft Windows Vista/7/8/8.1 BIOS-MBR" {<br />
insmod part_msdos<br />
insmod ntfs<br />
insmod search_fs_uuid<br />
insmod ntldr <br />
search --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 69B235F6749E84CE<br />
ntldr /bootmgr<br />
}<br />
fi<br />
<br />
For Windows XP:<br />
<br />
if [ "${grub_platform}" == "pc" ]; then<br />
menuentry "Microsoft Windows XP" {<br />
insmod part_msdos<br />
insmod ntfs<br />
insmod search_fs_uuid<br />
insmod ntldr <br />
search --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 69B235F6749E84CE<br />
ntldr /bootmgr<br />
}<br />
fi<br />
<br />
{{Note|In some cases, mine I have installed GRUB before a clean Windows 8, you cannot boot Windows having an error with {{ic|\boot\bcd}} (error code {{ic|0xc000000f}}). You can fix it going to Windows Recovery Console (cmd from install disk) and executing:<br />
x:\> "bootrec.exe /fixboot" <br />
x:\> "bootrec.exe /RebuildBcd".<br />
Do '''not''' use {{ic|bootrec.exe /Fixmbr}} because it will wipe GRUB out.}}<br />
<br />
{{ic|/etc/grub.d/40_custom}} can be used as a template to create {{ic|/etc/grub.d/nn_custom}}. Where {{ic|nn}} defines the precendence, indicating the order the script is executed. The order scripts are executed determine the placement in the grub boot menu.<br />
<br />
{{Note|{{ic|nn}} should be greater than 06 to ensure necessary scripts are executed first.}}<br />
<br />
==== With Windows via EasyBCD and NeoGRUB ====<br />
<br />
{{Merge|NeoGRUB|New page has been created, so this section should be merged there.}}<br />
<br />
Since EasyBCD's NeoGRUB currently does not understand the GRUB menu format, chainload to it by replacing the contents of your {{ic|C:\NST\menu.lst}} file with lines similar to the following:<br />
<br />
default 0<br />
timeout 1<br />
<br />
title Chainload into GRUB v2<br />
root (hd0,7)<br />
kernel /boot/grub/i386-pc/core.img<br />
<br />
Finally, [[#Generate the main configuration file]].<br />
<br />
==== parttool for hide/unhide ====<br />
<br />
If you have a Windows 9x paradigm with hidden {{ic|C:\}} disks GRUB can hide/unhide it using {{ic|parttool}}. For example, to boot the third {{ic|C:\}} disk of three Windows 9x installations on the CLI enter the CLI and:<br />
parttool hd0,1 hidden+ boot-<br />
parttool hd0,2 hidden+ boot-<br />
parttool hd0,3 hidden- boot+<br />
set root=hd0,3<br />
chainloader +1<br />
boot<br />
<br />
=== LVM ===<br />
If you use [[LVM]] for your {{ic|/boot}}, add the following before menuentry lines:<br />
<br />
insmod lvm<br />
<br />
and specify your root in the menuentry as:<br />
<br />
set root=lvm/''lvm_group_name''-''lvm_logical_boot_partition_name''<br />
<br />
Example:<br />
<br />
# (0) Arch Linux<br />
menuentry "Arch Linux" {<br />
insmod lvm<br />
set root=lvm/VolumeGroup-lv_boot<br />
# you can only set following two lines<br />
linux /vmlinuz-linux root=/dev/mapper/VolumeGroup-root ro<br />
initrd /initramfs-linux.img<br />
}<br />
<br />
=== RAID ===<br />
<br />
GRUB provides convenient handling of RAID volumes. You need to add {{ic|insmod mdraid}} which allows you to address the volume natively. For example, {{ic|/dev/md0}} becomes:<br />
set root=(md/0)<br />
<br />
whereas a partitioned RAID volume (e.g. {{ic|/dev/md0p1}}) becomes:<br />
set root=(md/0,1)<br />
<br />
To install grub when using RAID1 as the {{ic|/boot}} partition (or using {{ic|/boot}} housed on a RAID1 root partition), on devices with GPT ef02/'BIOS boot partition', simply run ''grub-install'' on both of the drives, such as:<br />
# grub-install --target=i386-pc --recheck --debug /dev/sda<br />
# grub-install --target=i386-pc --recheck --debug /dev/sdb<br />
<br />
Where the RAID 1 array housing {{ic|/boot}} is housed on {{ic|/dev/sda}} and {{ic|/dev/sdb}}.<br />
<br />
=== Multiple entries ===<br />
<br />
For tips on managing multiple GRUB entries, for example when using both {{Pkg|linux}} and {{Pkg|linux-lts}} kernels, see [[GRUB/Tips and tricks#Multiple entries]].<br />
<br />
=== Root encryption ===<br />
<br />
For an encryption of the root filesystem, it is necessary to edit {{ic|/etc/default/grub}} with the parameters required to unlock the encrypted filesystem during boot. For example, if the [[mkinitcpio]] {{ic|encrypt}} hook is used, the {{ic|cryptdevice}} parameter must be added to {{ic|GRUB_CMDLINE_LINUX<nowiki>=</nowiki>""}} command. In the example below, the {{ic|sda2}} partition has been encrypted as {{ic|/dev/mapper/cryptroot}}:<br />
<br />
{{hc|/etc/default/grub|2=<br />
GRUB_CMDLINE_LINUX="cryptdevice=/dev/sda2:cryptroot"<br />
}}<br />
<br />
Once {{ic|/etc/default/grub}} has been amended, it will then be necessary to [[#Generate the main configuration file]].<br />
<br />
For further information about bootloader configuration for encrypted devices, see [[Dm-crypt/System Configuration#Boot loader]].<br />
<br />
{{Tip|If you are upgrading from a working GRUB Legacy configuration, check {{ic|/boot/grub/menu.lst.pacsave}} for the correct device/label to add. Look for them after the text {{ic|kernel /vmlinuz-linux}}.}}<br />
<br />
== Using the command shell ==<br />
<br />
Since the MBR is too small to store all GRUB modules, only the menu and a few basic commands reside there. The majority of GRUB functionality remains in modules in {{ic|/boot/grub}}, which are inserted as needed. In error conditions (e.g. if the partition layout changes) GRUB may fail to boot. When this happens, a command shell may appear.<br />
<br />
GRUB offers multiple shells/prompts. If there is a problem reading the menu but the bootloader is able to find the disk, you will likely be dropped to the "normal" shell:<br />
sh:grub><br />
<br />
If there is a more serious problem (e.g. GRUB cannot find required files), you may instead be dropped to the "rescue" shell:<br />
grub rescue><br />
<br />
The rescue shell is a restricted subset of the normal shell, offering much less functionality. If dumped to the rescue shell, first try inserting the "normal" module, then starting the "normal" shell:<br />
grub rescue> set prefix=(hdX,Y)/boot/grub<br />
grub rescue> insmod (hdX,Y)/boot/grub/i386-pc/normal.mod<br />
rescue:grub> normal<br />
<br />
=== Pager support ===<br />
<br />
GRUB supports pager for reading commands that provide long output (like the {{ic|help}} command). This works only in normal shell mode and not in rescue mode. To enable pager, in GRUB command shell type:<br />
sh:grub> set pager=1<br />
<br />
=== Using the command shell environment to boot operating systems ===<br />
<br />
grub><br />
<br />
The GRUB's command shell environment can be used to boot operating systems.<br />
A common scenario may be to boot Windows / Linux stored on a drive/partition via '''chainloading'''.<br />
<br />
''Chainloading'' means to load another boot-loader from the current one, ie, chain-loading.<br />
<br />
The other bootloader may be embedded at the starting of the disk(MBR) or at the starting of a partition.<br />
<br />
==== Chainloading a partition ====<br />
<br />
set root=(hdX,Y)<br />
chainloader +1<br />
boot<br />
<br />
X=0,1,2...<br />
Y=1,2,3...<br />
<br />
For example to chainload Windows stored in the first partiton of the first hard disk,<br />
<br />
set root=(hd0,1)<br />
chainloader +1<br />
boot<br />
<br />
Similarly GRUB installed to a partition can be chainloaded.<br />
<br />
==== Chainloading a disk/drive ====<br />
<br />
set root=hdX<br />
chainloader +1<br />
boot<br />
<br />
==== Chainloading Windows/Linux installed in UEFI mode ====<br />
<br />
insmod ntfs<br />
set root=(hd0,gpt4)<br />
chainloader (${root})/EFI/Microsoft/Boot/bootmgfw.efi<br />
boot<br />
<br />
''insmod ntfs'' used for loading the ntfs file system module for loading Windows.<br />
(hd0,gpt4) or /dev/sda4 is my EFI System Partition (ESP).<br />
The entry in the ''chainloader'' line specifies the path of the .efi file to be chain-loaded.<br />
<br />
==== Normal loading ====<br />
<br />
See the examples in [[#Using_the_rescue_console]]<br />
<br />
=== Using the rescue console ===<br />
<br />
See [[#Using the command shell]] first. If unable to activate the standard shell, one possible solution is to boot using a live CD or some other rescue disk to correct configuration errors and reinstall GRUB. However, such a boot disk is not always available (nor necessary); the rescue console is surprisingly robust.<br />
<br />
The available commands in GRUB rescue include {{ic|insmod}}, {{ic|ls}}, {{ic|set}}, and {{ic|unset}}. This example uses {{ic|set}} and {{ic|insmod}}. {{ic|set}} modifies variables and {{ic|insmod}} inserts new modules to add functionality.<br />
<br />
Before starting, the user must know the location of their {{ic|/boot}} partition (be it a separate partition, or a subdirectory under their root):<br />
<br />
grub rescue> set prefix=(hdX,Y)/boot/grub<br />
<br />
where X is the physical drive number and Y is the partition number.<br />
<br />
To expand console capabilities, insert the {{ic|linux}} module:<br />
grub rescue> insmod i386-pc/linux.mod<br />
<br />
{{Note|With a separate boot partition, omit {{ic|/boot}} from the path, (i.e. type {{ic|1=set prefix=(hdX,Y)/grub}}).}}<br />
<br />
This introduces the {{ic|linux}} and {{ic|initrd}} commands, which should be familiar.<br />
<br />
An example, booting Arch Linux:<br />
<br />
set root=(hd0,5)<br />
linux /boot/vmlinuz-linux root=/dev/sda5<br />
initrd /boot/initramfs-linux.img<br />
boot<br />
<br />
With a separate boot partition, again change the lines accordingly:<br />
<br />
set root=(hd0,5)<br />
linux /vmlinuz-linux root=/dev/sda6<br />
initrd /initramfs-linux.img<br />
boot<br />
<br />
{{Note|If you experienced {{ic|error: premature end of file /YOUR_KERNEL_NAME}} during execution of {{ic|linux}} command, you can try {{ic|linux16}} instead.}}<br />
<br />
After successfully booting the Arch Linux installation, users can correct {{ic|grub.cfg}} as needed and then reinstall GRUB.<br />
<br />
To reinstall GRUB and fix the problem completely, changing {{ic|/dev/sda}} if needed. See [[#Installation]] for details.<br />
<br />
== Troubleshooting ==<br />
<br />
=== Intel BIOS not booting GPT ===<br />
<br />
==== MBR ====<br />
<br />
Some Intel BIOS's require at least one bootable MBR partition to be present at boot, causing GPT-partitioned boot setups to be unbootable.<br />
<br />
This can be circumvented by using (for instance) fdisk to mark one of the GPT partitions (preferably the 1007 KiB partition you have created for GRUB already) bootable in the MBR. This can be achieved, using fdisk, by the following commands: Start fdisk against the disk you are installing, for instance {{ic|fdisk /dev/sda}}, then press {{ic|a}} and select the partition you wish to mark as bootable (probably #1) by pressing the corresponding number, finally press {{ic|w}} to write the changes to the MBR.<br />
<br />
{{Note|The bootable-marking must be done in {{ic|fdisk}} or similar, not in GParted or others, as they will not set the bootable flag in the MBR.}}<br />
<br />
With cfdisk, the steps are similar, just {{ic|cfdisk /dev/sda}}, choose bootable (at the left) in the desired hard disk, and quit saving.<br />
<br />
More information is available [http://www.rodsbooks.com/gdisk/bios.html here]<br />
<br />
==== EFI path ====<br />
<br />
Some UEFI firmwares require a bootable file at a known location before they will show UEFI NVRAM boot entries. If this is the case, {{ic|grub-install}} will claim {{ic|efibootmgr}} has added an entry to boot GRUB, however the entry will not show up in the VisualBIOS boot order selector. The solution is to place a file at one of the known locations. Assuming the EFI partition is at {{ic|/boot/efi/}} this will work:<br />
<br />
mkdir /boot/efi/EFI/boot<br />
cp /boot/efi/EFI/grub/grubx64.efi /boot/efi/EFI/boot/bootx64.efi<br />
<br />
This solution worked for an Intel DH87MC motherboard with firmware dated Jan 2014.<br />
<br />
=== Enable debug messages ===<br />
<br />
{{Note|This change is overwritten when [[#Generating the main configuration file]].}}<br />
<br />
Add:<br />
<br />
set pager=1<br />
set debug=all<br />
<br />
to {{ic|grub.cfg}}.<br />
<br />
=== "No suitable mode found" error ===<br />
<br />
If you get this error when booting any menuentry:<br />
<br />
error: no suitable mode found<br />
Booting however<br />
<br />
Then you need to initialize GRUB graphical terminal ({{ic|gfxterm}}) with proper video mode ({{ic|gfxmode}}) in GRUB. This video mode is passed by GRUB to the linux kernel via 'gfxpayload'. In case of UEFI systems, if the GRUB video mode is not initialized, no kernel boot messages will be shown in the terminal (atleast until KMS kicks in).<br />
<br />
Copy {{ic|/usr/share/grub/unicode.pf2}} to ${GRUB_PREFIX_DIR} ({{ic|/boot/grub/}} in case of BIOS and UEFI systems). If GRUB UEFI was installed with {{ic|1=--boot-directory=$esp/EFI}} set, then the directory is {{ic|$esp/EFI/grub/}}:<br />
<br />
# cp /usr/share/grub/unicode.pf2 ${GRUB_PREFIX_DIR}<br />
<br />
If {{ic|/usr/share/grub/unicode.pf2}} does not exist, install {{Pkg|bdf-unifont}}, create the {{ic|unifont.pf2}} file and then copy it to {{ic|${GRUB_PREFIX_DIR<nowiki>}</nowiki>}}:<br />
<br />
# grub-mkfont -o unicode.pf2 /usr/share/fonts/misc/unifont.bdf<br />
<br />
Then, in the {{ic|grub.cfg}} file, add the following lines to enable GRUB to pass the video mode correctly to the kernel, without of which you will only get a black screen (no output) but booting (actually) proceeds successfully without any system hang.<br />
<br />
BIOS systems:<br />
<br />
insmod vbe<br />
<br />
UEFI systems:<br />
<br />
insmod efi_gop<br />
insmod efi_uga<br />
<br />
After that add the following code (common to both BIOS and UEFI):<br />
<br />
insmod font<br />
<br />
if loadfont ${prefix}/fonts/unicode.pf2<br />
then<br />
insmod gfxterm<br />
set gfxmode=auto<br />
set gfxpayload=keep<br />
terminal_output gfxterm<br />
fi<br />
<br />
As you can see for gfxterm (graphical terminal) to function properly, {{ic|unicode.pf2}} font file should exist in {{ic|${GRUB_PREFIX_DIR<nowiki>}</nowiki>}}.<br />
<br />
=== msdos-style error message ===<br />
<br />
grub-setup: warn: This msdos-style partition label has no post-MBR gap; embedding will not be possible!<br />
grub-setup: warn: Embedding is not possible. GRUB can only be installed in this setup by using blocklists.<br />
However, blocklists are UNRELIABLE and its use is discouraged.<br />
grub-setup: error: If you really want blocklists, use --force.<br />
<br />
This error may occur when you try installing GRUB in a VMware container. Read more about it [https://bbs.archlinux.org/viewtopic.php?pid=581760#p581760 here]. It happens when the first partition starts just after the MBR (block 63), without the usual space of 1 MiB (2048 blocks) before the first partition. Read [[#Master Boot Record (MBR) specific instructions]]<br />
<br />
=== UEFI ===<br />
<br />
==== Common installation errors ====<br />
<br />
* If you have a problem when running grub-install with sysfs or procfs and it says you must run {{ic|modprobe efivars}}, try [[Unified Extensible Firmware Interface#Switch to efivarfs]].<br />
* Without {{ic|--target}} or {{ic|--directory}} option, grub-install cannot determine for which firmware to install. In such cases {{ic|grub-install}} will print {{ic|source_dir does not exist. Please specify --target or --directory}}.<br />
* If after running grub-install you are told your partition does not look like an EFI partition then the partition is most likely not {{ic|Fat32}}.<br />
<br />
==== Drop to rescue shell ====<br />
<br />
If GRUB loads but drops you into the rescue shell with no errors, it may be because of a missing or misplaced {{ic|grub.cfg}}. This will happen if GRUB UEFI was installed with {{ic|--boot-directory}} and {{ic|grub.cfg}} is missing OR if the partition number of the boot partition changed (which is hard-coded into the {{ic|grubx64.efi}} file).<br />
<br />
==== GRUB UEFI not loaded ====<br />
<br />
An example of a working EFI:<br />
<br />
{{hc|# efibootmgr -v|<br />
BootCurrent: 0000<br />
Timeout: 3 seconds<br />
BootOrder: 0000,0001,0002<br />
Boot0000* Grub HD(1,800,32000,23532fbb-1bfa-4e46-851a-b494bfe9478c)File(\efi\grub\grub.efi)<br />
Boot0001* Shell HD(1,800,32000,23532fbb-1bfa-4e46-851a-b494bfe9478c)File(\EfiShell.efi)<br />
Boot0002* Festplatte BIOS(2,0,00)P0: SAMSUNG HD204UI<br />
}}<br />
<br />
If the screen only goes black for a second and the next boot option is tried afterwards, according to [https://bbs.archlinux.org/viewtopic.php?pid=981560#p981560 this post], moving GRUB to the partition root can help. The boot option has to be deleted and recreated afterwards. The entry for GRUB should look like this then:<br />
<br />
Boot0000* Grub HD(1,800,32000,23532fbb-1bfa-4e46-851a-b494bfe9478c)File(\grub.efi)<br />
<br />
=== Invalid signature ===<br />
<br />
If trying to boot Windows results in an "invalid signature" error, e.g. after reconfiguring partitions or adding additional hard drives, (re)move GRUB's device configuration and let it reconfigure:<br />
<br />
# mv /boot/grub/device.map /boot/grub/device.map-old<br />
# grub-mkconfig -o /boot/grub/grub.cfg<br />
<br />
{{ic|grub-mkconfig}} should now mention all found boot options, including Windows. If it works, remove {{ic|/boot/grub/device.map-old}}.<br />
<br />
=== Boot freezes ===<br />
<br />
If booting gets stuck without any error message after GRUB loading the kernel and the initial ramdisk, try removing the {{ic|add_efi_memmap}} kernel parameter.<br />
<br />
=== Arch not found from other OS ===<br />
<br />
Some have reported that other distributions have trouble finding Arch Linux automatically with {{ic|os-prober}}. If this problem arises, it has been reported that detection can be improved with the presence of {{ic|/etc/lsb-release}}. This file and updating tool is available with the package {{Pkg|lsb-release}} in the [[official repositories]].<br />
<br />
=== Warning when installing in chroot ===<br />
<br />
When installing GRUB on a LVM system in a chroot environment (e.g. during system installation), you may receive warnings like {{ic|/run/lvm/lvmetad.socket: connect failed: No such file or directory}} or {{ic|WARNING: failed to connect to lvmetad: No such file or directory. Falling back to internal scanning.}} This is because {{ic|/run}} is not available inside the chroot. These warnings will not prevent the system from booting, provided that everything has been done correctly, so you may continue with the installation.<br />
<br />
== See also ==<br />
<br />
* Official GRUB Manual - https://www.gnu.org/software/grub/manual/grub.html<br />
* Ubuntu wiki page for GRUB - https://help.ubuntu.com/community/Grub2<br />
* GRUB wiki page describing steps to compile for UEFI systems - https://help.ubuntu.com/community/UEFIBooting<br />
* Wikipedia's page on [[Wikipedia:BIOS Boot partition|BIOS Boot partition]]<br />
* http://members.iinet.net/~herman546/p20/GRUB2%20Configuration%20File%20Commands.html - quite complete description of how to configure GRUB</div>Wzyboyhttps://wiki.archlinux.org/index.php?title=ConnMan&diff=335850ConnMan2014-09-17T14:35:30Z<p>Wzyboy: /* Wi-Fi */</p>
<hr />
<div>[[Category:Network managers]]<br />
[[fr:Connman]]<br />
[[it:Connman]]<br />
{{Related articles start}}<br />
{{Related|Network configuration}}<br />
{{Related|Wireless network configuration}}<br />
{{Related|:Category:Network managers}}<br />
{{Related articles end}}<br />
<br />
[https://01.org/connman ConnMan] is a command-line network manager designed for use with embedded devices. ConnMan is light on resources, making it ideal for netbooks and other mobile devices. It is modular through its use of a plugin system, as opposed to having all functionality built in. Plugins are currently available for:<br />
<br />
* Wi-Fi (Through {{Pkg|wpa_supplicant}}<br />
* Ethernet<br />
* Bluetooth (Through {{Pkg|bluez}}) <br />
* WiMAX <br />
* VPN's (Through the {{ic|connman-vpn.service}})<br />
<br />
It is extremely fast at resolving connections as well as in its startup time. After the initial setup, you may wish to check for yourself with {{ic|systemd-analyze blame}} to see the difference in startup time compared to other network managers.<br />
<br />
== Installation ==<br />
<br />
[[pacman|Install]] the {{Pkg|connman}} package from the [[official repositories]]. {{Pkg|wpa_supplicant}} and {{Pkg|bluez}} are optional dependencies required for Wi-Fi and Bluetooth functionality respectively.<br />
<br />
[[systemd#Using units|Start and enable]] {{ic|connman.service}}.<br />
If present, stop and disable other [[:Category:Network_managers|networking services]] to prevent conflicts (e.g {{ic|netctl.service}}).<br />
<br />
=== Desktop clients ===<br />
<br />
* {{App|cmst|Qt GUI for ConnMan.|https://github.com/andrew-bibb/cmst|{{AUR|cmst}}}}<br />
* {{App|EConnman|Enlightenment desktop panel applet.|http://www.enlightenment.org|{{AUR|econnman}}}}<br />
* {{App|ConnMan-UI|GTK+ client applet.|https://github.com/tbursztyka/connman-ui|{{AUR|connman-ui-git}}}}<br />
* {{App|connman_dmenu|Client/frontend for dmenu.|https://github.com/taylorchu/connman_dmenu|{{AUR|connman_dmenu-git}}}}<br />
* {{App|connman-notify|Connman event notification client|https://github.com/wavexx/connman-notify}}<br />
<br />
Currently the GTK client is not 100% stable, however it is good enough for day-to-day usage. To use it just add {{ic|connman-ui-gtk}} to one of your startup files, e.g: {{ic|autostart}} for Openbox.<br />
<br />
== Usage ==<br />
<br />
{{Expansion|Only Wired and Wi-Fi plugins are described.}}<br />
<br />
ConnMan has a standard command line client {{ic|connmanctl}}. It can run in 2 modes:<br />
*In '''command mode''' commands are entered as arguments to {{ic|connmanctl}} command, just like [[systemctl]].<br />
*'''Interactive mode''' is started by typing {{ic|connmanctl}} without arguments. Prompt will change to {{ic|connmanctl>}} to indicate it is waiting for user commands, just like [[python]] interactive mode.<br />
<br />
=== Wired ===<br />
<br />
ConnMan will automatically handle wired connections.<br />
<br />
=== Wi-Fi ===<br />
<br />
{{Note|Make sure the Wi-Fi device is listed in the output of {{ic|ip link show up}}. If it is not listed that means it is not powered on. Use {{ic|Fn}} keys on the laptop to turn it on. You may need to run {{ic|connmanctl enable wifi}}.}}<br />
<br />
==== Connecting to an open access point ====<br />
<br />
The commands in this section show how to run {{ic|connmanctl}} in command mode.<br />
<br />
To scan the network {{ic|connmanctl}} accepts simple names called ''technologies''. To scan for nearby Wi-Fi networks:<br />
<br />
$ connmanctl scan wifi<br />
<br />
To list the available networks found after a scan run (example output): <br />
<br />
{{hc|$ connmanctl services|<br />
*AO MyNetwork wifi_dc85de828967_68756773616d_managed_psk<br />
OtherNET wifi_dc85de828967_38303944616e69656c73_managed_psk <br />
AnotherOne wifi_dc85de828967_3257495245363836_managed_wep<br />
FourthNetwork wifi_dc85de828967_4d7572706879_managed_wep<br />
AnOpenNetwork wifi_dc85de828967_4d6568657272696e_managed_none<br />
}}<br />
<br />
To connect to an open network simple use the enter the second field beginning with '''wifi_''': <br />
$ connmanctl connect wifi_dc85de828967_4d6568657272696e_managed_none<br />
<br />
You should now be connected to the network. Check using {{ic|ip addr}} or {{ic|connmanctl state}}.<br />
<br />
==== Connecting to a protected access point ====<br />
<br />
For protected access points you will need to provide some information to the ConnMan daemon, at the very least a password or a passphrase.<br />
<br />
The commands in this section show how to run {{ic|connmanctl}} in interactive mode, it is required for running the {{ic|agent}} command. To start interactive mode simply type: <br />
<br />
$ connmanctl<br />
<br />
You then proceed almost as above, first scan for any Wi-Fi ''technologies'':<br />
<br />
connmanctl> scan wifi<br />
<br />
To list services:<br />
<br />
connmanctl> services<br />
<br />
Now you need to register the agent to handle user requests. The command is:<br />
<br />
connmanctl> agent on<br />
<br />
You now need to connect to one of the protected services. To do this it is very handy to have a terminal that allows<br />
cut and paste. If you were connecting to OtherNET in the example above you would type:<br />
<br />
connmanctl> connect wifi_dc85de828967_38303944616e69656c73_managed_psk<br />
<br />
The agent will then ask you to provide any information the daemon needs to complete the connection. The <br />
information requested will vary depending on the type of network you are connecting to. The agent<br />
will also print additional data about the information it needs as shown in the example below.<br />
<br />
Agent RequestInput wifi_dc85de828967_38303944616e69656c73_managed_psk<br />
Passphrase = [ Type=psk, Requirement=mandatory ]<br />
Passphrase? <br />
<br />
Provide the information requested, in this example the passphrase, and then type:<br />
<br />
connmanctl> quit<br />
<br />
If the information you provided is correct you should now be connected to the protected access point.<br />
<br />
=== Settings ===<br />
<br />
Settings and profiles are automatically created for networks the user connects to often. They contain feilds for the passphrase, essid and other information. Profile settings are stored in directories under {{ic|/var/lib/connman/}} by their service name. To view all network profiles run this command from [[Help:Reading#Regular_user_or_root|root shell]]: <br />
<br />
# cat /var/lib/connman/*/settings<br />
<br />
{{Note|VPN settings can be found in {{ic|/var/lib/connman-vpn/}}.}}<br />
<br />
=== Technologies ===<br />
<br />
Various hardware interfaces are referred to as ''Technologies'' by ConnMan.<br />
<br />
To list available ''technologies'' run: <br />
<br />
$ connmanctl technologies<br />
<br />
To get just the types by their name one can use this one liner:<br />
<br />
$ connmanctl technologies | awk '/Type/ { print $NF }'<br />
<br />
{{Note| The field {{ic|1=Type = tech_name}} provides the technology type used with {{ic|connmanctl}} commands}}<br />
<br />
To interact with them one must refer to the technology by type.<br />
''Technologies'' can be toggled on/off with: <br />
<br />
$ connmanctl enable ''technology_type''<br />
<br />
and:<br />
<br />
$ connmanctl disable ''technology_type''<br />
<br />
For example to toggle off wifi:<br />
<br />
$ connmanctl disable wifi<br />
<br />
{{Warning|connman grabs all rfkill events. It is most likely impossible to use {{ic|rfkill}} or {{ic|bluetoothctl}} to (un)block devices. Always use {{ic|<nowiki>connmanctl enable|disable</nowiki>}} }}<br />
<br />
== Tips and tricks ==<br />
<br />
=== Automatic switching between wired and wireless ===<br />
<br />
ConnMan supports automatic switching of saved profiles with {{ic|PreferredTechnologies}} option. This works great, but can leave you with both wireless and wired enabled at the same time. To circumvent this you need to enable the {{ic|SingleConnectedTechnology}} option. The result of the new configuration file you need to add at {{ic|/etc/connman/main.conf}} is:<br />
<br />
[General]<br />
PreferredTechnologies=ethernet,wifi<br />
SingleConnectedTechnology=true<br />
<br />
And make sure to [[systemd#Using units|restart]] the {{ic|connman.service}}.<br />
<br />
For testing purposes it is recommended to watch the [[systemd#Journal|journal]] and plug the network cable a few times to see the action.<br />
<br />
=== Prevent ConnMan from changing hostname ===<br />
<br />
By default, ConnMan changes the [http://www.freedesktop.org/software/systemd/man/hostnamectl.html transient hostname] on a per network basis. To disable this behavior, add the following to {{ic|/etc/connman/main.conf}}:<br />
<br />
[General]<br />
AllowHostnameUpdates=false<br />
<br />
=== Connecting to eduroam ===<br />
<br />
If you are connecting to an eduroam, you will need to manually create a configuration file before you can call {{ic|connmanctl connect ...}}. Thankfully the process is simple, and an [https://git.kernel.org/cgit/network/connman/connman.git/tree/src/eduroam.config example eduroam config] is even included in the connman git repository.<br />
<br />
Here is a more fleshed out config that should work with most eduroam networks:<br />
<br />
[service_eduroam]<br />
Type = wifi<br />
Name = eduroam<br />
EAP = peap<br />
CACertFile = /etc/ssl/certs/ca-certificates.crt<br />
Phase2 = MSCHAPV2<br />
Identity = yourusername@domain.edu<br />
Passphrase = yourpassword<br />
<br />
Put this in a file at {{ic|/var/lib/connman/wifi_eduroam.config}}. After a restart, you should be able to connect.<br />
<br />
== See also ==<br />
<br />
For further detailed information on ConnMan you may refer to the documentation in its git repo at [https://git.kernel.org/cgit/network/connman/connman.git/tree/doc].</div>Wzyboyhttps://wiki.archlinux.org/index.php?title=SSH_keys&diff=334477SSH keys2014-09-09T13:12:48Z<p>Wzyboy: /* ssh-agent as a wrapper program */</p>
<hr />
<div>[[Category:Secure Shell]]<br />
[[es:SSH Keys]]<br />
[[it:SSH Keys]]<br />
[[ru:SSH Keys]]<br />
[[sr:SSH Keys]]<br />
[[tr:SSH_Anahtarları]]<br />
[[zh-CN:SSH Keys]]<br />
SSH keys serve as a means of identifying yourself to an SSH server using [[Wikipedia:Public-key cryptography|public-key cryptography]] and [[Wikipedia:Challenge-response authentication|challenge-response authentication]]. One immediate advantage this method has over traditional password authentication is that you can be authenticated by the server without ever having to send your password over the network. Anyone eavesdropping on your connection will not be able to intercept and crack your password because it is never actually transmitted. Additionally, using SSH keys for authentication virtually eliminates the risk posed by brute-force password attacks by drastically reducing the chances of the attacker correctly guessing the proper credentials.<br />
<br />
As well as offering additional security, SSH key authentication can be more convenient than the more traditional password authentication. When used with a program known as an SSH agent, SSH keys can allow you to connect to a server, or multiple servers, without having to remember or enter your password for each system.<br />
<br />
SSH keys are not without their drawbacks and may not be appropriate for all environments, but in many circumstances they can offer some strong advantages. A general understanding of how SSH keys work will help you decide how and when to use them to meet your needs. This article assumes you already have a basic understanding of the [[Secure Shell]] protocol and have installed the {{Pkg|openssh}} package, available in the [[official repositories]].<br />
<br />
==Background==<br />
SSH keys always come in pairs, one private and the other public. The private key is known only to you and it should be safely guarded. By contrast, the public key can be shared freely with any SSH server to which you would like to connect.<br />
<br />
When an SSH server has your public key on file and sees you requesting a connection, it uses your public key to construct and send you a challenge. This challenge is like a coded message and it must be met with the appropriate response before the server will grant you access. What makes this coded message particularly secure is that it can only be understood by someone with the private key. While the public key can be used to encrypt the message, it cannot be used to decrypt that very same message. Only you, the holder of the private key, will be able to correctly understand the challenge and produce the correct response.<br />
<br />
This challenge-response phase happens behind the scenes and is invisible to the user. As long as you hold the private key, which is typically stored in the {{ic|~/.ssh/}} directory, your SSH client should be able to reply with the appropriate response to the server.<br />
<br />
Because private keys are considered sensitive information, they are often stored on disk in an encrypted form. In this case, when the private key is required, a passphrase must first be entered in order to decrypt it. While this might superficially appear the same as entering a login password on the SSH server, it is only used to decrypt the private key on the local system. This passphrase is not, and should not, be transmitted over the network.<br />
<br />
==Generating an SSH key pair==<br />
An SSH key pair can be generated by running the {{ic|ssh-keygen}} command:<br />
<br />
{{hc<br />
|$ ssh-keygen -t ecdsa -b 521 -C "$(whoami)@$(hostname)-$(date -I)"<br />
|<nowiki>Generating public/private ecdsa key pair.<br />
Enter file in which to save the key (/home/username/.ssh/id_ecdsa):<br />
Enter passphrase (empty for no passphrase):<br />
Enter same passphrase again:<br />
Your identification has been saved in /home/username/.ssh/id_ecdsa.<br />
Your public key has been saved in /home/username/.ssh/id_ecdsa.pub.<br />
The key fingerprint is:<br />
dd:15:ee:24:20:14:11:01:b8:72:a2:0f:99:4c:79:7f username@localhost-2011-12-22<br />
The key's randomart image is:<br />
+--[ECDSA 521]---+<br />
| ..oB=. . |<br />
| . . . . . |<br />
| . . . + |<br />
| oo.o . . = |<br />
|o+.+. S . . . |<br />
|=. . E |<br />
| o . |<br />
| . |<br />
| |<br />
+-----------------+</nowiki>}}<br />
<br />
In the above example, {{ic|ssh-keygen}} generates a 521 bit long ({{ic|-b 521}}) public/private ECDSA ({{ic|-t ecdsa}}) key pair with an extended comment including the data ({{ic|-C "$(whoami)@$(hostname)-$(date -I)"}}). The [http://www.cs.berkeley.edu/~dawnsong/papers/randomart.pdf randomart image] was introduced in OpenSSH 5.1 as an easier means of visually identifying the key fingerprint.<br />
<br />
===Choosing the type of encryption===<br />
The Elliptic Curve Digital Signature Algorithm (ECDSA) provides smaller key sizes and faster operations for equivalent estimated security to the previous methods. It was introduced as the preferred algorithm for authentication in OpenSSH 5.7, see [http://www.openssh.com/txt/release-5.7 OpenSSH 5.7 Release Notes]. '''ECDSA keys might not be compatible with systems that ship old versions of OpenSSH.''' Some vendors also disable the required implementations due to potential patent issues.<br />
{{Note|As of December 28, 2013, the Windows SSH client PuTTY does not support ECDSA and cannot connect to a server that uses ECDSA keys.}}<br />
{{Note|1=As of June 10, 2014, ECDSA keys will not work with GNOME Keyring because of a known [https://bugzilla.gnome.org/show_bug.cgi?id=641082 GNOME bug].}}<br />
<br />
If you choose to create an RSA (768-16384 bit) or DSA (1024 bit) key pair instead of ECDSA, use the {{ic|-t rsa}} or {{ic|-t dsa}} switches in your {{ic|ssh-keygen}} command and do not forget to increase the key size. Running {{ic|ssh-keygen}} without the {{ic|-b}} switch should provide reasonable defaults.<br />
<br />
{{Note|These keys are used only to authenticate you; choosing stronger keys will not increase CPU load when transferring data over SSH.}}<br />
<br />
===Choosing the key location and passphrase===<br />
Upon issuing the {{ic|ssh-keygen}} command, you will be prompted for the desired name and location of your private key. By default, keys are stored in the {{ic|~/.ssh/}} directory and named according the type of encryption used. You are advised to accept the default name and location in order for later code examples in this article to work properly.<br />
<br />
When prompted for a passphrase, choose something that will be hard to guess if you have the security of your private key in mind. A longer, more random password will generally be stronger and harder to crack should it fall into the wrong hands.<br />
<br />
It is also possible to create your private key without a passphrase. While this can be convenient, you need to be aware of the associated risks. Without a passphrase, your private key will be stored on disk in an unencrypted form. Anyone who gains access to your private key file will then be able to assume your identity on any SSH server to which you connect using key-based authentication. Furthermore, without a passphrase, you must also trust the root user, as he can bypass file permissions and will be able to access your unencrypted private key file at any time.<br />
<br />
====Changing the private key's passphrase without changing the key====<br />
If the originally chosen SSH key passphrase is undesirable or must be changed, one can use the {{ic|ssh-keygen}} command to change the passphrase without changing the actual key.<br />
<br />
To change the passphrase for the private RSA key, run the following command:<br />
$ ssh-keygen -f ~/.ssh/id_rsa -p<br />
<br />
====Managing multiple keys====<br />
It's possible to manage keys per host by creating the file {{ic|~/.ssh/config}} and assigning each host another key for authentication if needed. Actually it's not needed, because you could use the same identity for each host. Yet, you don't want to use the same key for each client, then create this file like shown here:<br />
Host SERVERNAME1<br />
IdentitiesOnly yes<br />
IdentityFile ~/.ssh/id_rsa_SERVER1<br />
# CheckHostIP yes<br />
# Port 22<br />
Host SERVERNAME2<br />
IdentitiesOnly yes<br />
IdentityFile ~/.ssh/id_rsa_SERVER2<br />
# CheckHostIP no<br />
# Port 2177<br />
ControlMaster auto<br />
ControlPath /tmp/%r@%h:%p<br />
Many more options you will find with<br />
$ man ssh_config 5<br />
<br />
==Copying the public key to the remote server==<br />
Once you have generated a key pair, you will need to copy the public key to the remote server so that it will use SSH key authentication. The public key file shares the same name as the private key except that it is appended with a {{ic|.pub}} extension. Note that the private key is not shared and remains on the local machine.<br />
<br />
===Simple method===<br />
<br />
{{Note|1=This method might fail if the remote server uses a non-{{ic|sh}} shell such as {{ic|tcsh}} as default. See [https://bugzilla.redhat.com/show_bug.cgi?id=1045191 this bug report].}}<br />
<br />
If your key file is {{ic|~/.ssh/id_rsa.pub}} you can simply enter the following command.<br />
$ ssh-copy-id remote-server.org<br />
<br />
If your username differs on remote machine, be sure to prepend the username followed by {{ic|@}} to the server name.<br />
$ ssh-copy-id username@remote-server.org<br />
<br />
If your public key filename is anything other than the default of {{ic|~/.ssh/id_rsa.pub}} you will get an error stating {{ic|/usr/bin/ssh-copy-id: ERROR: No identities found}}. In this case, you must explicitly provide the location of the public key.<br />
$ ssh-copy-id -i ~/.ssh/id_ecdsa.pub username@remote-server.org<br />
<br />
If the ssh server is listening on a port other than default of 22, be sure to include it within the host argument.<br />
$ ssh-copy-id -i ~/.ssh/id_ecdsa.pub -p 221 username@remote-server.org<br />
<br />
===Traditional method===<br />
By default, for OpenSSH, the public key needs to be concatenated with {{ic|~/.ssh/authorized_keys}}. Begin by copying the public key to the remote server.<br />
<br />
$ scp ~/.ssh/id_ecdsa.pub username@remote-server.org:<br />
<br />
The above example copies the public key ({{ic|id_ecdsa.pub}}) to your home directory on the remote server via {{ic|scp}}. Do not forget to include the {{ic|:}} at the end of the server address. Also note that the name of your public key may differ from the example given.<br />
<br />
On the remote server, you will need to create the {{ic|~/.ssh}} directory if it does not yet exist and append your public key to the {{ic|authorized_keys}} file.<br />
<br />
$ ssh username@remote-server.org<br />
username@remote-server.org's password:<br />
$ mkdir ~/.ssh<br />
$ cat ~/id_ecdsa.pub >> ~/.ssh/authorized_keys<br />
$ rm ~/id_ecdsa.pub<br />
$ chmod 600 ~/.ssh/authorized_keys<br />
<br />
The last two commands remove the public key file from the server and set the permissions on the {{ic|authorized_keys}} file such that it is only readable and writable by you, the owner.<br />
<br />
==Security==<br />
<br />
===Securing the authorized_keys file===<br />
<br />
For additional protection, you can prevent users from adding new public keys and connecting from them.<br />
<br />
Make the {{ic|authorized_keys}} file read-only for the user and deny all other permissions:<br />
$ chmod 400 ~/.ssh/authorized_keys<br />
<br />
To keep the user from simply changing the permissions back, set the immutable bit on the {{ic|authorized_keys}} file:<br />
# chattr +i ~/.ssh/authorized_keys<br />
<br />
Now, the user could rename the {{ic|~/.ssh}} directory to something else and create a new {{ic|~/.ssh}} directory and {{ic|authorized_keys}} file. To prevent this, set the immutable bit on the {{ic|~/.ssh}} directory<br />
# chattr +i ~/.ssh<br />
<br />
{{Note|If you find yourself needing to add a new key, you will first have to remove the immutable bit from {{ic|authorized_keys}} and make it writable. Follow the steps above to secure it again.}}<br />
<br />
===Disabling password logins===<br />
While copying your public key to the remote SSH server eliminates the need to transmit your password over the network, it does not give any added protection against a brute-force password attack. In the absence of a private key, the SSH server will fall back to password authentication by default, thus allowing a malicious user to attempt to gain access by guessing your password. To disable this behavior, edit the following lines in the {{ic|/etc/ssh/sshd_config}} file on the remote server.<br />
<br />
{{hc|/etc/ssh/sshd_config|<br />
PasswordAuthentication no<br />
ChallengeResponseAuthentication no}}<br />
<br />
=== Two-factor authentication and public keys ===<br />
<br />
Since OpenSSH 6.2, you can add your own chain to authenticate with using the {{ic|AuthenticationMethods}} option. This enables you to use public keys as well as a two-factor authorization.<br />
<br />
See [[Google Authenticator]] to set up Google Authenticator.<br />
<br />
To use PAM with OpenSSH, edit the following files:<br />
<br />
{{hc|/etc/ssh/sshd_config|<br />
ChallengeResponseAuthentication yes<br />
AuthenticationMethods publickey keyboard-interactive:pam<br />
}}<br />
<br />
Then you can log in with either a publickey, or a password+verification code combination.<br />
<br />
==SSH agents==<br />
If your private key is encrypted with a passphrase, this passphrase must be entered every time you attempt to connect to an SSH server using public-key authentication. Each individual invocation of {{ic|ssh}} or {{ic|scp}} will need the passphrase in order to decrypt your private key before authentication can proceed.<br />
<br />
An SSH agent is a program which caches your decrypted private keys and provides them to SSH client programs on your behalf. In this arrangement, you must only provide your passphrase once, when adding your private key to the agent's cache. This facility can be of great convenience when making frequent SSH connections.<br />
<br />
An agent is typically configured to run automatically upon login and persist for the duration of your login session. A variety of agents, front-ends, and configurations exist to achieve this effect. This section provides an overview of a number of different solutions which can be adapted to meet your specific needs.<br />
<br />
===ssh-agent===<br />
ssh-agent is the default agent included with OpenSSH. It can be used directly or serve as the back-end to a few of the front-end solutions mentioned later in this section. When {{ic|ssh-agent}} is run, it will fork itself to the background and print out the environment variables it would use.<br />
<br />
$ ssh-agent<br />
SSH_AUTH_SOCK=/tmp/ssh-vEGjCM2147/agent.2147; export SSH_AUTH_SOCK;<br />
SSH_AGENT_PID=2148; export SSH_AGENT_PID;<br />
echo Agent pid 2148;<br />
<br />
To make use of these variables, run the command through the {{ic|eval}} command.<br />
<br />
$ eval $(ssh-agent)<br />
Agent pid 2157<br />
<br />
You can append the above command to your {{ic|~/.bash_profile}} script so that it will run automatically when starting a login shell.<br />
<br />
$ echo 'eval $(ssh-agent)' >> ~/.bash_profile<br />
<br />
If you would rather have ssh-agent run automatically for all users append the command to {{ic|/etc/profile}} instead.<br />
<br />
# echo 'eval $(ssh-agent)' >> /etc/profile<br />
<br />
Once {{ic|ssh-agent}} is running, you will need to add your private key to its cache.<br />
<br />
$ ssh-add ~/.ssh/id_ecdsa<br />
Enter passphrase for /home/user/.ssh/id_ecdsa:<br />
Identity added: /home/user/.ssh/id_ecdsa (/home/user/.ssh/id_ecdsa)<br />
<br />
If you would like your private keys to be added automatically on login. Add the following command to your {{ic|~/.bash_profile}} as well.<br />
<br />
$ ssh-add<br />
<br />
If your private key is encrypted, {{ic|ssh-add}} will prompt you to enter your passphrase. Once your private key has been successfully added to the agent you will be able to make SSH connections without having to enter a passphrase.<br />
<br />
If you would prefer not to be prompted for your passphrase until your key is needed, adding<br />
<br />
$ ssh-add -l >/dev/null || alias ssh='ssh-add -l >/dev/null || ssh-add && unalias ssh; ssh'<br />
<br />
to {{ic|~/.bashrc}} will cause {{ic|ssh-add}} to be run when needed and destroy the alias afterwards.<br />
<br />
One downside to this approach is that a new instance of {{ic|ssh-agent}} is created for every login shell and each instance will persist between login sessions. Over time you can wind up with dozens of needless {{ic|ssh-agent}} processes running. There exist a number of front-ends to ssh-agent and alternative agents described later in this section which avoid this problem.<br />
<br />
====ssh-agent as a wrapper program====<br />
An alternative way to start ssh-agent (with, say, each X session) is described in [http://upc.lbl.gov/docs/user/sshagent.shtml this ssh-agent tutorial by UC Berkeley Labs]. A basic use case is if you normally begin X with the {{ic|startx}} command, you can instead prefix it with {{ic|ssh-agent}} like so:<br />
<br />
$ ssh-agent startx<br />
<br />
And so you don't even need to think about it you can put an alias in your {{ic|.bash_aliases}} file or equivalent:<br />
<br />
alias startx='ssh-agent startx'<br />
<br />
Doing it this way avoids the problem of having extraneous {{ic|ssh-agent}} instances floating around between login sessions. Exactly one instance will live and die with the entire X session.<br />
<br />
{{note|You can also add {{ic|eval $(ssh-agent)}} to {{ic|~/.xinitrc}}.}}<br />
<br />
See [[#Calling_x11-ssh-askpass_with_ssh-add|the below notes on using x11-ssh-askpass with ssh-add]] for an idea on how to immediately add your key to the agent.<br />
<br />
===GnuPG Agent===<br />
<br />
The [[GnuPG]] agent, distributed with the {{Pkg|gnupg}} package, available in the [[official repositories]], has OpenSSH agent emulation. If you already use the GnuPG suite, you might consider using its agent to also cache your SSH keys. Additionally, some users may prefer the PIN entry dialog GnuPG agent provides as part of its passphrase management.<br />
<br />
{{Note|If you are using KDE and have {{Pkg|kde-agent}} installed you only need to set {{ic|enable-ssh-support}} into {{ic|~/.gnupg/gpg-agent.conf}}! Otherwise, continue reading.}}<br />
<br />
To start using GnuPG agent for your SSH keys, you should first start ''gpg-agent'' with the {{ic|--enable-ssh-support}} option. Example (do not forget to make the file executable):<br />
{{hc|/etc/profile.d/gpg-agent.sh|<nowiki><br />
#!/bin/sh<br />
<br />
# Start the GnuPG agent and enable OpenSSH agent emulation<br />
gnupginf="${HOME}/.gpg-agent-info"<br />
<br />
if pgrep -x -u "${USER}" gpg-agent >/dev/null 2>&1; then<br />
eval `cat $gnupginf`<br />
eval `cut -d= -f1 $gnupginf | xargs echo export`<br />
else<br />
eval `gpg-agent -s --enable-ssh-support --daemon --write-env-file "$gnupginf"`<br />
fi<br />
</nowiki>}}<br />
<br />
Once ''gpg-agent'' is running you can use ''ssh-add'' to approve keys, just like you did with plain ''ssh-agent''. The list of approved keys is stored in the {{ic|~/.gnupg/sshcontrol}} file. Once your key is approved, you will get a PIN entry dialog every time your passphrase is needed. You can control passphrase caching in the {{ic|~/.gnupg/gpg-agent.conf}} file. The following example would have ''gpg-agent'' cache your keys for 3 hours: <br />
{{hc|~/.gnupg/gpg-agent.conf|<br />
# Cache settings<br />
default-cache-ttl 10800<br />
default-cache-ttl-ssh 10800<br />
}}<br />
Other useful settings for this file include the PIN entry program (GTK, QT, or ncurses version), keyboard grabbing, and so on...<br />
<br />
{{Note|{{ic|gpg-agent.conf}} must be created, and the variable {{ic|write-env-file}} must be set in order to allow ''gpg-agent'' keys to be injected to SSH across logins, unless you restart ''gpg-agent'', and therefore, export its settings, with every login.}}<br />
{{hc|~/.gnupg/gpg-agent.conf|<nowiki><br />
# Environment file<br />
write-env-file /home/username/.gpg-agent-info<br />
<br />
# Keyboard control<br />
#no-grab<br />
<br />
# PIN entry program<br />
#pinentry-program /usr/bin/pinentry-curses<br />
#pinentry-program /usr/bin/pinentry-qt4<br />
#pinentry-program /usr/bin/pinentry-kwallet<br />
pinentry-program /usr/bin/pinentry-gtk-2<br />
<br />
</nowiki>}}<br />
<br />
To use the agent, you can then source and export the environment variables that ''gpg-agent'' writes in {{ic|.gpg-agent-info}}, which is the file specified with {{ic|write-env-file}}.<br />
{{hc|~/.bashrc|<nowiki><br />
...<br />
<br />
if [ -f "${HOME}/.gpg-agent-info" ]; then<br />
. "${HOME}/.gpg-agent-info"<br />
export GPG_AGENT_INFO<br />
export SSH_AUTH_SOCK<br />
fi<br />
</nowiki>}}<br />
<br />
===Keychain===<br />
[http://www.funtoo.org/Keychain Keychain] is a program designed to help you easily manage your SSH keys with minimal user interaction. It is implemented as a shell script which drives both ''ssh-agent'' and ''ssh-add''. A notable feature of Keychain is that it can maintain a single ''ssh-agent'' process across multiple login sessions. This means that you only need to enter your passphrase once each time your local machine is booted.<br />
<br />
[[pacman|Install]] the {{Pkg|keychain}} package, available from the [[official repositories]].<br />
<br />
Append the following line to {{ic|~/.bash_profile}}:<br />
{{hc|~/.bash_profile|<br />
eval $(keychain --eval --agents ssh -Q --quiet id_ecdsa)<br />
}}<br />
<br />
In the above example, the {{ic|--eval}} switch outputs lines to be evaluated by the opening {{ic|eval}} command. This sets the necessary environments variables for SSH client to be able to find your agent. The {{ic|--agents}} switch is not strictly necessary because Keychain will build the list automatically based on the existence of ''ssh-agent'' or ''gpg-agent'' on the system. Adding the {{ic|--quiet}} switch will limit output to warnings, errors, and user prompts. If you want greater security, replace {{ic|-Q}} with {{ic|--clear}} but will be less convenient.<br />
<br />
If necessary, replace {{ic|~/.ssh/id_ecdsa}} with the path to your private key. For those using a non-Bash compatible shell, see {{ic|keychain --help}} or {{ic|man keychain}} for details on other shells.<br />
<br />
To test Keychain, log out from your session and log back in. If this is your first time running Keychain, it will prompt you for the passphrase of the specified private key. Because Keychain reuses the same ''ssh-agent'' process on successive logins, you should not have to enter your passphrase the next time you log in. You will only be prompted for your passphrase once each time the machine is rebooted.<br />
<br />
====Alternate startup methods====<br />
There are numerous ways in which Keychain can be invoked, and you are encouraged to experiment to find a method that works for you. The {{ic|keychain}} command itself comes with dozens of command-line options which are described in the Keychain manual page.<br />
<br />
One alternative implementation of a Keychain startup script would be to create the file {{ic|/etc/profile.d/keychain.sh}} as the root user, and add the following lines.<br />
<br />
{{hc|/etc/profile.d/keychain.sh|<nowiki><br />
/usr/bin/keychain -Q -q --nogui ~/.ssh/id_ecdsa<br />
[[ -f $HOME/.keychain/$HOSTNAME-sh ]] && source $HOME/.keychain/$HOSTNAME-sh<br />
</nowiki>}}<br />
<br />
Be sure to also make {{ic|/etc/profile.d/keychain.sh}} executable by changing its file permissions.<br />
# chmod 755 /etc/profile.d/keychain.sh<br />
<br />
If you do not want to get asked for your passphrase every time you log in but rather the first time you actually attempt to connect, you may add the following to your {{ic|~/.bashrc}}:<br />
alias ssh='eval $(/usr/bin/keychain --eval --agents ssh -Q --quiet ~/.ssh/id_ecdsa) && ssh'<br />
This will ask you when you try to use SSH for the first time. Remember, however, that this will ''only'' ask you if {{ic|~/.bashrc}} is applicable. So you would always have to ensure that your first SSH command is executed in a terminal.<br />
<br />
===envoy===<br />
<br />
An alternative to keychain is [https://github.com/vodik/envoy envoy]. Envoy is available as {{Pkg|envoy}} in the [[official repositories]], or the Git version is in the [[AUR]] as {{AUR|envoy-git}}.<br />
<br />
After installing it, set up the envoy socket with<br />
<br />
# systemctl enable envoy@ssh-agent.socket<br />
<br />
And add to your shell's rc file:<br />
<br />
envoy -t ssh-agent -a ''ssh_key''<br />
source <(envoy -p)<br />
<br />
If the key is {{ic|~/.ssh/id_rsa}}, {{ic|~/.ssh/id_dsa}}, {{ic|~/.ssh/id_ecdsa}}, or {{ic|~/.ssh/identity}}, the {{ic|-a ''ssh_key''}} parameter is not needed.<br />
<br />
====envoy with key passphrases stored in kwallet====<br />
<br />
If you have long passphrases for your SSH keys, remembering them can be a pain. So let us tell kwallet to store them!<br />
Along with {{Pkg|envoy}}, install {{Pkg|ksshaskpass}} and {{Pkg|kdeutils-kwalletmanager}} from the [[official repositories]]. Next, enable the envoy socket in systemd (see above).<br />
<br />
First, you will add this script to {{ic|~/.kde4/Autostart/ssh-agent.sh}}:<br />
#!/bin/sh<br />
envoy -t ssh-agent -a ''ssh_key''<br />
Then, make sure the script is executable by running: {{ic|chmod +x ~/.kde4/Autostart/ssh-agent.sh}}<br />
<br />
And add this to {{ic|~/.kde4/env/ssh-agent.sh}}:<br />
#!/bin/sh<br />
eval $(envoy -p)<br />
<br />
When you log into KDE, it will execute the {{ic|ssh-agent.sh}} script. This will call ''ksshaskpass'', which will prompt you for your kwallet password when envoy calls ''ssh-agent''.<br />
<br />
===x11-ssh-askpass===<br />
The {{pkg|x11-ssh-askpass}} package provides a graphical dialog for entering your passhrase when running an X session. ''x11-ssh-askpass'' depends only on the {{Pkg|libx11}} and {{Pkg|libxt}} libraries, and the appearance of ''x11-ssh-askpass'' is customizable. While it can be invoked by the ''ssh-add'' program, which will then load your decrypted keys into [[#ssh-agent|ssh-agent]], the following instructions will, instead, configure ''x11-ssh-askpass'' to be invoked by the aforementioned [[#Keychain|Keychain]] script.<br />
<br />
Install {{Pkg|keychain}} and {{Pkg|x11-ssh-askpass}}, both available in the [[official repositories]].<br />
<br />
Edit your {{ic|~/.xinitrc}} file to include the following lines, replacing the name and location of your private key if necessary. Be sure to place these commands '''before''' the line which invokes your window manager.<br />
<br />
{{hc|~/.xinitrc|<br />
keychain ~/.ssh/id_ecdsa<br />
[ -f ~/.keychain/$HOSTNAME-sh ] && . ~/.keychain/$HOSTNAME-sh 2>/dev/null<br />
[ -f ~/.keychain/$HOSTNAME-sh-gpg ] && . ~/.keychain/$HOSTNAME-sh-gpg 2>/dev/null<br />
...<br />
exec openbox-session}}<br />
<br />
In the above example, the first line invokes ''keychain'' and passes the name and location of your private key. If this is not the first time ''keychain'' was invoked, the following two lines load the contents of {{ic|$HOSTNAME-sh}} and {{ic|$HOSTNAME-sh-gpg}}, if they exist. These files store the environment variables of the previous instance of ''keychain''.<br />
<br />
====Calling x11-ssh-askpass with ssh-add====<br />
The ''ssh-add'' manual page specifies that, in addition to needing the {{ic|DISPLAY}} variable defined, you also need {{ic|SSH_ASKPASS}} set to the name of your askpass program (in this case ''x11-ssh-askpass''). It bears keeping in mind that the default Arch Linux installation places the ''x11-ssh-askpass'' binary in {{ic|/usr/lib/ssh/}}, which will not be in most people's {{ic|PATH}}. This is a little annoying, not only when declaring the {{ic|SSH_ASKPASS}} variable, but also when theming. You have to specify the full path everywhere. Both inconveniences can be solved simultaneously by symlinking:<br />
<br />
$ ln -sv /usr/lib/ssh/x11-ssh-askpass ~/bin/ssh-askpass<br />
<br />
This is assuming that {{ic|~/bin}} is in your {{ic|PATH}}. So now in your {{ic|.xinitrc}}, before calling your window manager, one just needs to export the {{ic|SSH_ASKPASS}} environment variable:<br />
<br />
$ export SSH_ASKPASS=ssh-askpass<br />
<br />
and your [[X resources]] will contain something like:<br />
<br />
ssh-askpass*background: #000000<br />
<br />
Doing it this way works well with [[#ssh-agent_as_a_wrapper_program|the above method on using ''ssh-agent'' as a wrapper program]]. You start X with {{ic|ssh-agent startx}} and then add ''ssh-add'' to your window manager's list of start-up programs.<br />
<br />
====Theming====<br />
The appearance of the ''x11-ssh-askpass'' dialog can be customized by setting its associated [[X resources]]. The ''x11-ssh-askpass'' [http://www.jmknoble.net/software/x11-ssh-askpass/ home page] presents some [http://www.jmknoble.net/software/x11-ssh-askpass/screenshots.html example themes]. See the ''x11-ssh-askpass'' manual page for full details.<br />
<br />
====Alternative passphrase dialogs====<br />
There are other passphrase dialog programs which can be used instead of ''x11-ssh-askpass''. The following list provides some alternative solutions.<br />
<br />
* {{Pkg|ksshaskpass}} is available in the official repositories. It is dependent on {{Pkg|kdelibs}} and is suitable for the [[KDE]] Desktop Environment.<br />
<br />
* {{Pkg|openssh-askpass}} depends on the {{Pkg|qt4}} libraries and is available from the official repositories.<br />
<br />
===pam_ssh===<br />
The [http://pam-ssh.sourceforge.net/ pam_ssh] project exists to provide a [[Wikipedia:Pluggable authentication module|Pluggable Authentication Module]] (PAM) for SSH private keys. This module can provide single sign-on behavior for your SSH connections. On login, your SSH private key passphrase can be entered in place of, or in addition to, your traditional system password. Once you have been authenticated, the pam_ssh module spawns ssh-agent to store your decrypted private key for the duration of the session.<br />
<br />
To enable single sign-on behavior at the tty login prompt, install the unofficial {{AUR|pam_ssh}} package, available in the [[Arch User Repository]]. <br />
<br />
{{Note|pam_ssh 2.0 now requires that all private keys used in the authentication process be located under {{ic|~/.ssh/login-keys.d/}}.}}<br />
<br />
Create a symlink to your private key file and place it in {{ic|~/.ssh/login-keys.d/}}. Replace the {{ic|id_rsa}} in the example below with the name of your own private key file.<br />
<br />
$ mkdir ~/.ssh/login-keys.d/<br />
$ cd ~/.ssh/login-keys.d/<br />
$ ln -s ../id_rsa<br />
<br />
Edit the {{ic|/etc/pam.d/login}} configuration file to include the text highlighted in bold in the example below. The order in which these lines appear is significiant and can affect login behavior.<br />
<br />
{{Warning|Misconfiguring PAM can leave the system in a state where all users become locked out. Before making any changes, you should have an understanding of how PAM configuration works as well as a backup means of accessing the PAM configuration files, such as an Arch Live CD, in case you become locked out and need to revert any changes. An IBM developerWorks [http://www.ibm.com/developerworks/linux/library/l-pam/index.html article] is available which explains PAM configuration in further detail.}}<br />
<br />
{{hc|/etc/pam.d/login|2=<br />
#%PAM-1.0<br />
<br />
auth required pam_securetty.so<br />
auth requisite pam_nologin.so<br />
auth include system-local-login<br />
'''auth optional pam_ssh.so try_first_pass'''<br />
account include system-local-login<br />
session include system-local-login<br />
'''session optional pam_ssh.so'''<br />
}}<br />
<br />
In the above example, login authentication initially proceeds as it normally would, with the user being prompted to enter his user password. The additional {{ic|auth}} authentication rule added to the end of the authentication stack then instructs the pam_ssh module to try to decrypt any private keys found in the {{ic|~/.ssh/login-keys.d}} directory. The {{ic|try_first_pass}} option is passed to the pam_ssh module, instructing it to first try to decrypt any SSH private keys using the previously entered user password. If the user's private key passphrase and user password are the same, this should succeed and the user will not be prompted to enter the same password twice. In the case where the user's private key passphrase user password differ, the pam_ssh module will prompt the user to enter the SSH passphrase after the user password has been entered. The {{ic|optional}} control value ensures that users without an SSH private key are still able to log in. In this way, the use of pam_ssh will be transparent to users without an SSH private key.<br />
<br />
If you use another means of logging in, such as an X11 display manager like [[SLiM]] or [[XDM]] and you would like it to provide similar functionality, you must edit its associated PAM configuration file in a similar fashion. Packages providing support for PAM typically place a default configuration file in the {{ic|/etc/pam.d/}} directory.<br />
<br />
Further details on how to use pam_ssh and a list of its options can be found in the pam_ssh man page.<br />
<br />
====Known issues with pam_ssh====<br />
Work on the pam_ssh project is infrequent and the documentation provided is sparse. You should be aware of some of its limitations which are not mentioned in the package itself.<br />
<br />
* Versions of pam_ssh prior to version 2.0 do not support SSH keys employing the newer option of ECDSA (elliptic curve) cryptography. If you are using earlier versions of pam_ssh you must use either RSA or DSA keys.<br />
<br />
* The {{ic|ssh-agent}} process spawned by pam_ssh does not persist between user logins. If you like to keep a [[GNU Screen]] session active between logins you may notice when reattaching to your screen session that it can no longer communicate with ssh-agent. This is because the GNU Screen environment and those of its children will still reference the instance of ssh-agent which existed when GNU Screen was invoked but was subsequently killed in a previous logout. The [[#Keychain|Keychain]] front-end avoids this problem by keeping the ssh-agent process alive between logins.<br />
<br />
===GNOME Keyring===<br />
If you use the [[GNOME]] desktop, the [[GNOME Keyring]] tool can be used as an SSH agent. See the [[GNOME Keyring]] article for further details.<br />
<br />
==Troubleshooting==<br />
If it appears that the SSH server is ignoring your keys, ensure that you have the proper permissions set on all relevant files.<br /><br />
For the local machine:<br />
<br />
$ chmod 700 ~/<br />
$ chmod 700 ~/.ssh<br />
$ chmod 600 ~/.ssh/id_ecdsa<br />
<br />
For the remote machine:<br />
<br />
$ chmod 700 ~/<br />
$ chmod 700 ~/.ssh<br />
$ chmod 600 ~/.ssh/authorized_keys<br />
<br />
If that does not solve the problem you may try temporarily setting {{ic|StrictModes}} to {{ic|no}} in {{ic|sshd_config}}. If authentication with StrictModes off is successful, it is likely an issue with file permissions persists.<br />
{{Tip|Do not forget to set {{ic|StrictModes}} to {{ic|yes}} for added security.}}<br />
Make sure the remote machine supports the type of keys you are using. Try using RSA or DSA keys instead [[#Generating an SSH key pair]]<br />
Some servers do not support ECDSA keys. <br />
<br />
Failing this, run the sshd in debug mode and monitor the output while connecting:<br />
<br />
# /usr/bin/sshd -d<br />
<br />
=== Using kdm ===<br />
KDM doesn't launch the ssh-agent process directly, {{Pkg|kde-agent}} used to start ssh-agent on login, but since version 20140102-1 it got [https://projects.archlinux.org/svntogit/packages.git/commit/trunk?h=packages/kde-agent&id=1070467b0f74b2339ceca2b9471d1c4e2b9c9c8f removed].<br />
<br />
In order to start ssh-agent on KDE startup for a user, create scripts to start ssh-agent on startup and one to kill it on logoff:<br />
{{bc|<nowiki><br />
echo -e '#!/bin/sh\n[ -n "$SSH_AGENT_PID" ] || eval "$(ssh-agent -s)"' > ~/.kde4/env/ssh-agent-startup.sh<br />
echo -e '#!/bin/sh\n[ -z "$SSH_AGENT_PID" ] || eval "$(ssh-agent -k)"' > ~/.kde4/shutdown/ssh-agent-shutdown.sh<br />
chmod 755 ~/.kde4/env/ssh-agent-startup.sh ~/.kde4/shutdown/ssh-agent-shutdown.sh<br />
</nowiki>}}<br />
<br />
==See also==<br />
* [http://www.ibm.com/developerworks/linux/library/l-keyc.html OpenSSH key management, Part 1]<br />
* [http://www.ibm.com/developerworks/linux/library/l-keyc2/ OpenSSH key management, Part 2]<br />
* [http://www.ibm.com/developerworks/library/l-keyc3/ OpenSSH key management, Part 3]<br />
* [http://kimmo.suominen.com/docs/ssh/ Getting started with SSH]<br />
* [http://www.openssh.com/txt/release-5.7 OpenSSH 5.7 Release Notes]</div>Wzyboyhttps://wiki.archlinux.org/index.php?title=Google_Authenticator&diff=323912Google Authenticator2014-07-07T13:44:30Z<p>Wzyboy: /* Installation */</p>
<hr />
<div>[[Category:Secure Shell]]<br />
The [http://code.google.com/p/google-authenticator/ Google Authenticator project] provides a two-step authentication procedure using one-time passcodes (OTP). The OTP generator application is available for iOS, Android and Blackberry. Similar to [[S/KEY_Authentication]] the authentication mechanism integrates into the Linux PAM system. This guide shows the installation and configuration of this mechanism.<br />
<br />
==Installation==<br />
<br />
The required software is available in the {{AUR|google-authenticator-libpam-git}} or {{AUR|libpam-google-authenticator}} package in the [[AUR]].<br />
<br />
==Setting up the PAM==<br />
<br />
{{Warning|If you do all configuration via SSH do not close the session before you tested that everything is working, else you may lock yourself out. Furthermore consider generating the key file before activating the PAM.}}<br />
<br />
Usually one demands two-pass authentication only for remote login. The corresponding PAM configuration file is {{ic|/etc/pam.d/sshd}}. In case you want to use Google Authenticator globally you would need to change {{ic|/etc/pam.d/system-auth}}, however, in this case proceed with extreme caution to not lock yourself out.<br />
In this guide we proceed with editing {{ic|/etc/pam.d/sshd}} which is most safely (but not necessarily) be done in a local session.<br />
<br />
To enter both, your unix password and your OTP add {{ic|pam_google_authenticator.so}} the following way.<br />
<br />
auth required pam_google_authenticator.so<br />
auth required pam_unix.so<br />
auth required pam_env.so<br />
<br />
This will ask for the OTP before prompting for your Unix password. Changing the order of the two modules will reverse this order.<br />
<br />
{{Warning|Only users that have generated a secret key file (see below) will be allowed to log in using SSH.}}<br />
<br />
To allow login with either the OTP or your Unix password use<br />
<br />
auth sufficient pam_google_authenticator.so<br />
auth sufficient pam_unix.so<br />
auth required pam_env.so<br />
<br />
Finally enable challenge-response authentication in {{ic|/etc/ssh/ssh'''d'''_config}}:<br />
ChallengeResponseAuthentication yes<br />
and reload {{ic|sshd}}'s configuration<br />
# systemctl reload sshd<br />
<br />
==Generating a secret key file==<br />
<br />
Every user who wants to use two-pass authentication needs to generate a secret key file in his home folder.<br />
This can very easily be done using {{ic|google-authenticator}} as included in {{AUR|google-authenticator-libpam-git}}.<br />
<br />
$ google-authenticator<br />
Do you want authentication tokens to be time-based (y/n) y<br />
https://www.google.com/chart?chs=200x200&chld=M|0&cht=qr&chl=otpauth://totp/username@hostname%3Fsecret%3DZVZG5UZU4D7MY4DH<br />
Your new secret key is: ZVZG5UZU4D7MY4DH<br />
Your verification code is 269371<br />
Your emergency scratch codes are:<br />
70058954<br />
97277505<br />
99684896<br />
56514332<br />
82717798<br />
<br />
Do you want me to update your "/home/username/.google_authenticator" file (y/n) y<br />
<br />
Do you want to disallow multiple uses of the same authentication<br />
token? This restricts you to one login about every 30s, but it increases<br />
your chances to notice or even prevent man-in-the-middle attacks (y/n) y<br />
<br />
By default, tokens are good for 30 seconds and in order to compensate for<br />
possible time-skew between the client and the server, we allow an extra<br />
token before and after the current time. If you experience problems with poor<br />
time synchronization, you can increase the window from its default<br />
size of 1:30min to about 4min. Do you want to do so (y/n) n<br />
<br />
If the computer that you are logging into is not hardened against brute-force<br />
login attempts, you can enable rate-limiting for the authentication module.<br />
By default, this limits attackers to no more than 3 login attempts every 30s.<br />
Do you want to enable rate-limiting (y/n) y<br />
<br />
It is recommended to '''store the emergency scratch codes safely''' (print them out and keep them in a save location) as they are your only way to log in (via SSH) when you lost your mobile phone (i.e. your OTP-generator). They are also stored in {{ic|~/.google_authenticator}}, so you can look them up any time as long as you are logged in.<br />
<br />
==Setting up your OTP-generator==<br />
Install the corresponding generator application on your mobile phone from the corresponding store by browsing to [http://m.google.com/authenticator http://m.google.com/authenticator] from your mobile device.<br />
In the applications menu click the corresponding button to create a new account and either scan the QR code from the URL you were told when generating the secret key file, or enter the secret key (in the example above 'ZVZG5UZU4D7MY4DH') manually.<br />
<br />
Now you should see a new passcode token being generated every 30 seconds on your phone.<br />
<br />
==Testing==<br />
SSH to your host from another machine or from another terminal window and check if it works.<br />
<br />
$ssh username@hostname<br />
login as: username<br />
Verification code:<br />
Password:<br />
$<br />
<br />
{{Warning|OpenSSH will ignore all of this if you are authenticating with a key pair instead of a passphrase. If you want to force the use of one-time pass, you will have to disable key based authentication in {{ic|/etc/ssh/sshd_config}}.}}<br />
{{Note| As of OpenSSH 6.2, you can add {{ic|AuthenticationMethods}} to allow both two-factor authentication and key based authentication. See [[SSH_Keys#Two-factor_authentication_and_public_keys]] }}</div>Wzyboyhttps://wiki.archlinux.org/index.php?title=S-nail&diff=319347S-nail2014-06-12T16:24:43Z<p>Wzyboy: /* Sending mail with an external SMTP server */</p>
<hr />
<div>[[Category:Email clients]]<br />
S-nail is a mail processing system with a command syntax reminiscent of ed, with lines replaced by messages. It is based on Heirloom mailx, which in turn is based upon Berkeley Mail 8.1. It is intended to provide the functionality of the POSIX mailx command and offers (mostly optional) extensions for IDNA, MIME, S/MIME, SMTP, POP3 and IMAP. It is usable as a mail batch language.<br />
<br />
== Sending mail with an external SMTP server ==<br />
<br />
Configuration files are {{ic|$HOME/.mailrc}} and the systemwide {{ic|/etc/mail.rc}}. Add the following text to the appropriate file, changing bold strings:<br />
<br />
set smtp='''smtp(s)://server:port'''<br />
set smtp-use-starttls<br />
set smtp-auth='''login/plain...'''<br />
set smtp-auth-user='''mailuser'''<br />
set smtp-auth-password='''password'''<br />
set from="'''Your Name <youremail@domain>'''" # optional<br />
<br />
=== Testing and sending emails ===<br />
<br />
To test the configuration:<br />
<br />
$ echo "'''message'''" | mailx -v -s "'''subject'''" '''receiver@mail.com'''<br />
<br />
== Interactive use with an IMAP mailbox ==<br />
<br />
While only {{ic|folder}} is strictly required, the following are some suggested settings for interactive usage.<br />
<br />
set folder='''imap(s)://mylogin@server:port'''<br />
set password-'''mylogin@server'''='''password'''<br />
<br />
retain subject from to cc # only print these headers by default<br />
set editalong # invoke $EDITOR when composing mail interactively<br />
set record='''+Sent''' # + means relative to ''folder''<br />
set imap-keepalive=240 # or many servers will expire the session<br />
set imap-cache=~/.imap_cache<br />
<br />
# You may want to define shortcuts to folders, for example:<br />
shortcut junk "+INBOX/Junk Mail"<br />
<br />
When storing passwords in {{ic|$HOME/.mailrc}}, you should set appropriate permissions with {{ic|chmod 0600}}. Additional accounts can be configured using the account command; see the man pages for details.<br />
<br />
=== Viewing messages ===<br />
<br />
When started in interactive mode, S-nail will print a listing of messages in your mailbox.<br />
<br />
A message may be printed by typing its number, or the next message may be printed by simply hitting Enter. The following listing instructs basic usage, but once comfortable, a skimming of the manual is strongly encouraged.<br />
<br />
* '''inc''' (incorporate) prints listing of new messages<br />
* '''he''' (headers) reprints the message list<br />
* '''z-''', '''z+''', '''Z''' pages the message list<br />
* '''folders''' shows listing of mailboxes<br />
* '''folder''' or '''fi''' changes the mailbox file<br />
* '''r''' replies to all<br />
* '''R''' replies to the sender<br />
* '''move''' or '''mv''' moves a message<br />
* '''(un)flag''' marks a message as (un)flagged<br />
* '''new''' marks a message unread<br />
* '''seen''' marks it read<br />
* '''P''' prints all of a message's headers.<br />
<br />
Most commands take a message-list as a parameter, which defaults to the current message.<br />
<br />
=== Message composition ===<br />
<br />
Composition is started by typing '''mail user@host''' or by replying to a message. When you return from $EDITOR you will be placed into the native editor, where many operations can be performed using tilde escapes (listed by '''~?'''). Of particular interest is '''~@''', which allows the attachment list to be edited.<br />
<br />
To send the mail, signal EOT with {{ic|Ctrl+d}} or type "." on its own line.</div>Wzyboyhttps://wiki.archlinux.org/index.php?title=Windows_PE&diff=316693Windows PE2014-05-26T06:46:02Z<p>Wzyboy: /* Creating a bootable Windows PE ISO */</p>
<hr />
<div>[[Category:System administration]]<br />
[http://technet.microsoft.com/en-us/library/cc766093(v=ws.10).aspx Windows PE] is a lightweight version of Windows intended to be used for installation of Windows Vista and later versions of Windows, as well as for system maintenance. It runs entirely from memory and can be booted from the network. This page describes how customized Windows PE images can be created, and optionally published on the network, using only free software packages on an Arch Linux machine along with Microsoft's Windows Automated Installation Kit (WAIK). The WAIK can be downloaded at no cost and is only needed to extract the {{ic|boot.wim}} file that contains the initial copy of Windows PE, along with a couple boot files.<br />
<br />
== Use cases ==<br />
<br />
Normally, an image of Windows PE can only be created using the Windows Automated Installation Kit (WAIK) on a Windows machine. However, it is also possible to create and modify images of Windows PE using an (Arch) Linux machine, and optionally publish them on the network for PXE booting. No Windows machine is necessary. You may want to do this if:<br />
<br />
* you need to install Windows from the network, or boot Windows PE from the network for system administration, using an Arch Linux-based server. This may be because you do not have a Windows-based server, or you prefer using a Linux server because of its improved security and configurability, or you are already using a Linux server for other purposes.<br />
* you need to run a Windows environment to run Win32 programs, you do not have a Windows machine available, and you do not want to use [[Wine]] or the programs will not run correctly with [[Wine]].<br />
<br />
== Warnings ==<br />
<br />
'''If you boot Windows PE on a physical computer, you are placing Microsoft's closed-source code in control of that computer. You do so at your own risk.'''<br />
<br />
'''In addition, by downloading the Windows Automated Installation Kit, you may be bound by its license, which prevents you from, among other things, using Windows PE as a general-purpose operating system.'''<br />
<br />
== Creating a bootable Windows PE ISO ==<br />
<br />
<ol><br />
<li><br />
Download the Windows Automated Installation Kit (WAIK) from [http://www.microsoft.com/en-us/download/details.aspx?id=5753 Microsoft's website].<br />
{{Warning|The entire download, {{ic|KB3AIK_EN.iso}}, is 1.7GB.}}<br />
{{Tip|It may be possible to use [http://httpfs.sourceforge.net/ httpfs] to avoid downloading the entire file. Only around 118MB of it is actually needed.}}<br />
{{Tip|If you have an installation media of Windows 7 or later versions, you can use that iso file / optical disc instead of WAIK. {{ic|mkwinpeimg}} accepts both WAIK image and Windows installation media. Note that different versions of Windows installation media contains different versions of Windows PE. For the relationship between Windows versions and Windows PE versions, refer to [https://en.wikipedia.org/wiki/Windows_Preinstallation_Environment#Versions Wikipedia].}}<br />
{{Tip|WAIK has been renamed to WADK since Windows 8 and is now distributed via {{ic|adksetup.exe}}. In order to get Windows PE 4.0 and later versions, you have to use installation media of Windows 8 and later versions. The installation media iso files are avaiable for MSDN subscribers, but you can download otherwhere and compare the hash value with the those published on MSDN.}}<br />
</li><br />
<br />
<li><br />
Make sure you have the {{Pkg|fuse}}, {{Pkg|cdrkit}}, and {{Pkg|cabextract}} packages installed.<br />
</li><br />
<br />
<li><br />
Install {{AUR|wimlib}} from the [[Arch User Repository]].<br />
</li><br />
<br />
<li><br />
Mount the WAIK ISO.<br />
{{bc|<br />
# mkdir /media/waik<br />
# mount KB3AIK_EN.iso /media/waik}}<br />
</li><br />
<li>Use the {{ic|mkwinpeimg}} script provided with {{AUR|wimlib}} to create a bootable Windows PE ISO {{ic|winpe.iso}}. See the man page for {{ic|mkwinpeimg}} for more information.<br />
{{bc|<nowiki>$ mkwinpeimg --iso --waik-dir=/media/waik winpe.iso</nowiki>}}<br />
</li><br />
<li>Unmount the WAIK ISO.</li><br />
{{bc|# umount /media/waik}}<br />
</ol><br />
<br />
== Booting Windows PE ==<br />
<br />
After creating a bootable ISO of Windows PE ({{ic|winpe.iso}}) as described in the previous section, you may want to boot Windows PE in the following ways:<br />
<br />
=== In virtual machine ===<br />
<br />
Run a virtual machine with {{ic|winpe.iso}} attached as a CD-ROM. Be sure to give it adequate memory, definitely more than the size of the ISO, since Windows PE runs from memory. For example:<br />
$ qemu-system-i386 -cdrom winpe.iso -m 512<br />
<br />
=== From CD ===<br />
<br />
Simply burn {{ic|winpe.iso}} onto a CD, and you can boot from it. '''Again: beware that if you do this on your Arch Linux machine, you are placing Microsoft's closed source operating system in control of your computer.'''<br />
<br />
=== From Network ===<br />
<br />
Windows PE can be booted from the network using [http://www.syslinux.org/wiki/index.php/PXELINUX PXELINUX] and its [http://www.syslinux.org/wiki/index.php/MEMDISK MEMDISK] module.<br />
<br />
<ol><br />
<li>Install {{pkg|syslinux}} and {{pkg|tftp-hpa}}.</li><br />
<li>Copy needed PXELINUX files to the [[Tftpd server|TFTP server]] root directory.<br />
{{bc|# cp /usr/lib/syslinux/{pxelinux.0,menu.c32,memdisk} /var/tftpboot}} </li><br />
<li>Put {{ic|winpe.iso}} in the [[Tftpd server|TFTP server]] root directory.<br />
{{bc|# mv winpe.iso /var/tftpboot}}</li><br />
<li>Create a [[Syslinux#Configuring_syslinux|configuration file]] for PXELINUX similar to the following:</li><br />
{{hc|/var/tftpboot/pxelinux.cfg/default|<nowiki><br />
UI menu.c32<br />
MENU TITLE Network Boot<br />
TIMEOUT 50<br />
<br />
LABEL winpe<br />
MENU LABEL Boot Windows PE from network<br />
KERNEL /memdisk<br />
INITRD winpe.iso<br />
APPEND iso raw<br />
<br />
LABEL localboot<br />
MENU LABEL Boot from local disk<br />
LOCALBOOT 0<br />
</nowiki><br />
}}<br />
<li>Start the [[Tftpd server|TFTP server]].<br />
{{bc|# rc.d start tftpd}}</li><br />
<li>Configure your DHCP server (such as [[Dhcpd]] or [[Dnsmasq]]) to point to {{ic|pxelinux.0}} as the boot file, with the Linux server's IP address. Beware: if your DHCP server is on a router, it may not be possible to do this without installing custom firmware.</li><br />
</ol><br />
<br />
After completing the above steps, you should be able to boot Windows PE from the network. '''Warning: With the given PXELINUX configuration file, Windows PE will start by default after 5 seconds.'''<br />
<br />
=== Network boot performance ===<br />
<br />
TFTP is not designed to be used to transfer large files, such as {{ic|winpe.iso}}, which may be 118MB or more. Performance may be improved by using the {{ic|gpxelinux.0}} bootloader instead of {{ic|pxelinux.0}} and loading {{ic|winpe.iso}} using HTTP rather than TFTP.<br />
<br />
== Customizing Windows PE ==<br />
<br />
The {{ic|mkwinpeimg}} script provided with {{AUR|wimlib}} supports making modifications to Windows PE using the {{ic|--start-script}} or {{ic|--overlay}} options. See the manual page for {{ic|mkwinpeimg}} for more information.<br />
<br />
You may want to do this to add additional Windows applications that you want to run in Windows PE, or to add any additional drivers that Windows PE needs (drivers can be loaded using the {{ic|drvload}} command within Windows PE).<br />
<br />
==See also==<br />
<br />
* [http://technet.microsoft.com/en-us/library/cc766093(v=ws.10).aspx Microsoft's documentation for Windows PE]<br />
* [http://www.thinkwiki.org/wiki/Windows_PE Another article about making Windows PE images on Linux]</div>Wzyboyhttps://wiki.archlinux.org/index.php?title=Windows_PE&diff=316692Windows PE2014-05-26T06:44:29Z<p>Wzyboy: /* Creating a bootable Windows PE ISO */</p>
<hr />
<div>[[Category:System administration]]<br />
[http://technet.microsoft.com/en-us/library/cc766093(v=ws.10).aspx Windows PE] is a lightweight version of Windows intended to be used for installation of Windows Vista and later versions of Windows, as well as for system maintenance. It runs entirely from memory and can be booted from the network. This page describes how customized Windows PE images can be created, and optionally published on the network, using only free software packages on an Arch Linux machine along with Microsoft's Windows Automated Installation Kit (WAIK). The WAIK can be downloaded at no cost and is only needed to extract the {{ic|boot.wim}} file that contains the initial copy of Windows PE, along with a couple boot files.<br />
<br />
== Use cases ==<br />
<br />
Normally, an image of Windows PE can only be created using the Windows Automated Installation Kit (WAIK) on a Windows machine. However, it is also possible to create and modify images of Windows PE using an (Arch) Linux machine, and optionally publish them on the network for PXE booting. No Windows machine is necessary. You may want to do this if:<br />
<br />
* you need to install Windows from the network, or boot Windows PE from the network for system administration, using an Arch Linux-based server. This may be because you do not have a Windows-based server, or you prefer using a Linux server because of its improved security and configurability, or you are already using a Linux server for other purposes.<br />
* you need to run a Windows environment to run Win32 programs, you do not have a Windows machine available, and you do not want to use [[Wine]] or the programs will not run correctly with [[Wine]].<br />
<br />
== Warnings ==<br />
<br />
'''If you boot Windows PE on a physical computer, you are placing Microsoft's closed-source code in control of that computer. You do so at your own risk.'''<br />
<br />
'''In addition, by downloading the Windows Automated Installation Kit, you may be bound by its license, which prevents you from, among other things, using Windows PE as a general-purpose operating system.'''<br />
<br />
== Creating a bootable Windows PE ISO ==<br />
<br />
<ol><br />
<li><br />
Download the Windows Automated Installation Kit (WAIK) from [http://www.microsoft.com/en-us/download/details.aspx?id=5753 Microsoft's website].<br />
{{Warning|The entire download, {{ic|KB3AIK_EN.iso}}, is 1.7GB.}}<br />
{{Tip|It may be possible to use [http://httpfs.sourceforge.net/ httpfs] to avoid downloading the entire file. Only around 118MB of it is actually needed.}}<br />
{{Tip|If you have an installation media of Windows 7 or later versions, you can use that iso file / optical disc instead of WAIK. {{ic|mkwinpeimg}} accepts both WAIK image and Windows installation media. Note that different versions of Windows installation media contains different versions of Windows PE.}}<br />
{{Tip|WAIK has been renamed to WADK since Windows 8 and is now distributed via {{ic|adksetup.exe}}. In order to get Windows PE 4.0 and later versions, you have to use installation media of Windows 8 and later versions. The installation media iso files are avaiable for MSDN subscribers, but you can download otherwhere and compare the hash value with the those published on MSDN.}}<br />
</li><br />
<br />
<li><br />
Make sure you have the {{Pkg|fuse}}, {{Pkg|cdrkit}}, and {{Pkg|cabextract}} packages installed.<br />
</li><br />
<br />
<li><br />
Install {{AUR|wimlib}} from the [[Arch User Repository]].<br />
</li><br />
<br />
<li><br />
Mount the WAIK ISO.<br />
{{bc|<br />
# mkdir /media/waik<br />
# mount KB3AIK_EN.iso /media/waik}}<br />
</li><br />
<li>Use the {{ic|mkwinpeimg}} script provided with {{AUR|wimlib}} to create a bootable Windows PE ISO {{ic|winpe.iso}}. See the man page for {{ic|mkwinpeimg}} for more information.<br />
{{bc|<nowiki>$ mkwinpeimg --iso --waik-dir=/media/waik winpe.iso</nowiki>}}<br />
</li><br />
<li>Unmount the WAIK ISO.</li><br />
{{bc|# umount /media/waik}}<br />
</ol><br />
<br />
== Booting Windows PE ==<br />
<br />
After creating a bootable ISO of Windows PE ({{ic|winpe.iso}}) as described in the previous section, you may want to boot Windows PE in the following ways:<br />
<br />
=== In virtual machine ===<br />
<br />
Run a virtual machine with {{ic|winpe.iso}} attached as a CD-ROM. Be sure to give it adequate memory, definitely more than the size of the ISO, since Windows PE runs from memory. For example:<br />
$ qemu-system-i386 -cdrom winpe.iso -m 512<br />
<br />
=== From CD ===<br />
<br />
Simply burn {{ic|winpe.iso}} onto a CD, and you can boot from it. '''Again: beware that if you do this on your Arch Linux machine, you are placing Microsoft's closed source operating system in control of your computer.'''<br />
<br />
=== From Network ===<br />
<br />
Windows PE can be booted from the network using [http://www.syslinux.org/wiki/index.php/PXELINUX PXELINUX] and its [http://www.syslinux.org/wiki/index.php/MEMDISK MEMDISK] module.<br />
<br />
<ol><br />
<li>Install {{pkg|syslinux}} and {{pkg|tftp-hpa}}.</li><br />
<li>Copy needed PXELINUX files to the [[Tftpd server|TFTP server]] root directory.<br />
{{bc|# cp /usr/lib/syslinux/{pxelinux.0,menu.c32,memdisk} /var/tftpboot}} </li><br />
<li>Put {{ic|winpe.iso}} in the [[Tftpd server|TFTP server]] root directory.<br />
{{bc|# mv winpe.iso /var/tftpboot}}</li><br />
<li>Create a [[Syslinux#Configuring_syslinux|configuration file]] for PXELINUX similar to the following:</li><br />
{{hc|/var/tftpboot/pxelinux.cfg/default|<nowiki><br />
UI menu.c32<br />
MENU TITLE Network Boot<br />
TIMEOUT 50<br />
<br />
LABEL winpe<br />
MENU LABEL Boot Windows PE from network<br />
KERNEL /memdisk<br />
INITRD winpe.iso<br />
APPEND iso raw<br />
<br />
LABEL localboot<br />
MENU LABEL Boot from local disk<br />
LOCALBOOT 0<br />
</nowiki><br />
}}<br />
<li>Start the [[Tftpd server|TFTP server]].<br />
{{bc|# rc.d start tftpd}}</li><br />
<li>Configure your DHCP server (such as [[Dhcpd]] or [[Dnsmasq]]) to point to {{ic|pxelinux.0}} as the boot file, with the Linux server's IP address. Beware: if your DHCP server is on a router, it may not be possible to do this without installing custom firmware.</li><br />
</ol><br />
<br />
After completing the above steps, you should be able to boot Windows PE from the network. '''Warning: With the given PXELINUX configuration file, Windows PE will start by default after 5 seconds.'''<br />
<br />
=== Network boot performance ===<br />
<br />
TFTP is not designed to be used to transfer large files, such as {{ic|winpe.iso}}, which may be 118MB or more. Performance may be improved by using the {{ic|gpxelinux.0}} bootloader instead of {{ic|pxelinux.0}} and loading {{ic|winpe.iso}} using HTTP rather than TFTP.<br />
<br />
== Customizing Windows PE ==<br />
<br />
The {{ic|mkwinpeimg}} script provided with {{AUR|wimlib}} supports making modifications to Windows PE using the {{ic|--start-script}} or {{ic|--overlay}} options. See the manual page for {{ic|mkwinpeimg}} for more information.<br />
<br />
You may want to do this to add additional Windows applications that you want to run in Windows PE, or to add any additional drivers that Windows PE needs (drivers can be loaded using the {{ic|drvload}} command within Windows PE).<br />
<br />
==See also==<br />
<br />
* [http://technet.microsoft.com/en-us/library/cc766093(v=ws.10).aspx Microsoft's documentation for Windows PE]<br />
* [http://www.thinkwiki.org/wiki/Windows_PE Another article about making Windows PE images on Linux]</div>Wzyboyhttps://wiki.archlinux.org/index.php?title=Windows_PE&diff=316690Windows PE2014-05-26T06:23:01Z<p>Wzyboy: /* Creating a bootable Windows PE ISO */</p>
<hr />
<div>[[Category:System administration]]<br />
[http://technet.microsoft.com/en-us/library/cc766093(v=ws.10).aspx Windows PE] is a lightweight version of Windows intended to be used for installation of Windows Vista and later versions of Windows, as well as for system maintenance. It runs entirely from memory and can be booted from the network. This page describes how customized Windows PE images can be created, and optionally published on the network, using only free software packages on an Arch Linux machine along with Microsoft's Windows Automated Installation Kit (WAIK). The WAIK can be downloaded at no cost and is only needed to extract the {{ic|boot.wim}} file that contains the initial copy of Windows PE, along with a couple boot files.<br />
<br />
== Use cases ==<br />
<br />
Normally, an image of Windows PE can only be created using the Windows Automated Installation Kit (WAIK) on a Windows machine. However, it is also possible to create and modify images of Windows PE using an (Arch) Linux machine, and optionally publish them on the network for PXE booting. No Windows machine is necessary. You may want to do this if:<br />
<br />
* you need to install Windows from the network, or boot Windows PE from the network for system administration, using an Arch Linux-based server. This may be because you do not have a Windows-based server, or you prefer using a Linux server because of its improved security and configurability, or you are already using a Linux server for other purposes.<br />
* you need to run a Windows environment to run Win32 programs, you do not have a Windows machine available, and you do not want to use [[Wine]] or the programs will not run correctly with [[Wine]].<br />
<br />
== Warnings ==<br />
<br />
'''If you boot Windows PE on a physical computer, you are placing Microsoft's closed-source code in control of that computer. You do so at your own risk.'''<br />
<br />
'''In addition, by downloading the Windows Automated Installation Kit, you may be bound by its license, which prevents you from, among other things, using Windows PE as a general-purpose operating system.'''<br />
<br />
== Creating a bootable Windows PE ISO ==<br />
<br />
<ol><br />
<li><br />
Download the Windows Automated Installation Kit (WAIK) from [http://www.microsoft.com/en-us/download/details.aspx?id=5753 Microsoft's website].<br />
{{Warning|The entire download, {{ic|KB3AIK_EN.iso}}, is 1.7GB.}}<br />
{{Tip|It may be possible to use [http://httpfs.sourceforge.net/ httpfs] to avoid downloading the entire file. Only around 118MB of it is actually needed.}}<br />
{{Tip|If you have an installation media of Windows 7 or later versions, you can use that iso file / optical disc instead of WAIK. {{ic|mkwinpeimg}} accepts both WAIK image and Windows installation media. Note that different versions of Windows installation media contains different versions of Windows PE.}}<br />
</li><br />
<br />
<li><br />
Make sure you have the {{Pkg|fuse}}, {{Pkg|cdrkit}}, and {{Pkg|cabextract}} packages installed.<br />
</li><br />
<br />
<li><br />
Install {{AUR|wimlib}} from the [[Arch User Repository]].<br />
</li><br />
<br />
<li><br />
Mount the WAIK ISO.<br />
{{bc|<br />
# mkdir /media/waik<br />
# mount KB3AIK_EN.iso /media/waik}}<br />
</li><br />
<li>Use the {{ic|mkwinpeimg}} script provided with {{AUR|wimlib}} to create a bootable Windows PE ISO {{ic|winpe.iso}}. See the man page for {{ic|mkwinpeimg}} for more information.<br />
{{bc|<nowiki>$ mkwinpeimg --iso --waik-dir=/media/waik winpe.iso</nowiki>}}<br />
</li><br />
<li>Unmount the WAIK ISO.</li><br />
{{bc|# umount /media/waik}}<br />
</ol><br />
<br />
== Booting Windows PE ==<br />
<br />
After creating a bootable ISO of Windows PE ({{ic|winpe.iso}}) as described in the previous section, you may want to boot Windows PE in the following ways:<br />
<br />
=== In virtual machine ===<br />
<br />
Run a virtual machine with {{ic|winpe.iso}} attached as a CD-ROM. Be sure to give it adequate memory, definitely more than the size of the ISO, since Windows PE runs from memory. For example:<br />
$ qemu-system-i386 -cdrom winpe.iso -m 512<br />
<br />
=== From CD ===<br />
<br />
Simply burn {{ic|winpe.iso}} onto a CD, and you can boot from it. '''Again: beware that if you do this on your Arch Linux machine, you are placing Microsoft's closed source operating system in control of your computer.'''<br />
<br />
=== From Network ===<br />
<br />
Windows PE can be booted from the network using [http://www.syslinux.org/wiki/index.php/PXELINUX PXELINUX] and its [http://www.syslinux.org/wiki/index.php/MEMDISK MEMDISK] module.<br />
<br />
<ol><br />
<li>Install {{pkg|syslinux}} and {{pkg|tftp-hpa}}.</li><br />
<li>Copy needed PXELINUX files to the [[Tftpd server|TFTP server]] root directory.<br />
{{bc|# cp /usr/lib/syslinux/{pxelinux.0,menu.c32,memdisk} /var/tftpboot}} </li><br />
<li>Put {{ic|winpe.iso}} in the [[Tftpd server|TFTP server]] root directory.<br />
{{bc|# mv winpe.iso /var/tftpboot}}</li><br />
<li>Create a [[Syslinux#Configuring_syslinux|configuration file]] for PXELINUX similar to the following:</li><br />
{{hc|/var/tftpboot/pxelinux.cfg/default|<nowiki><br />
UI menu.c32<br />
MENU TITLE Network Boot<br />
TIMEOUT 50<br />
<br />
LABEL winpe<br />
MENU LABEL Boot Windows PE from network<br />
KERNEL /memdisk<br />
INITRD winpe.iso<br />
APPEND iso raw<br />
<br />
LABEL localboot<br />
MENU LABEL Boot from local disk<br />
LOCALBOOT 0<br />
</nowiki><br />
}}<br />
<li>Start the [[Tftpd server|TFTP server]].<br />
{{bc|# rc.d start tftpd}}</li><br />
<li>Configure your DHCP server (such as [[Dhcpd]] or [[Dnsmasq]]) to point to {{ic|pxelinux.0}} as the boot file, with the Linux server's IP address. Beware: if your DHCP server is on a router, it may not be possible to do this without installing custom firmware.</li><br />
</ol><br />
<br />
After completing the above steps, you should be able to boot Windows PE from the network. '''Warning: With the given PXELINUX configuration file, Windows PE will start by default after 5 seconds.'''<br />
<br />
=== Network boot performance ===<br />
<br />
TFTP is not designed to be used to transfer large files, such as {{ic|winpe.iso}}, which may be 118MB or more. Performance may be improved by using the {{ic|gpxelinux.0}} bootloader instead of {{ic|pxelinux.0}} and loading {{ic|winpe.iso}} using HTTP rather than TFTP.<br />
<br />
== Customizing Windows PE ==<br />
<br />
The {{ic|mkwinpeimg}} script provided with {{AUR|wimlib}} supports making modifications to Windows PE using the {{ic|--start-script}} or {{ic|--overlay}} options. See the manual page for {{ic|mkwinpeimg}} for more information.<br />
<br />
You may want to do this to add additional Windows applications that you want to run in Windows PE, or to add any additional drivers that Windows PE needs (drivers can be loaded using the {{ic|drvload}} command within Windows PE).<br />
<br />
==See also==<br />
<br />
* [http://technet.microsoft.com/en-us/library/cc766093(v=ws.10).aspx Microsoft's documentation for Windows PE]<br />
* [http://www.thinkwiki.org/wiki/Windows_PE Another article about making Windows PE images on Linux]</div>Wzyboyhttps://wiki.archlinux.org/index.php?title=Windows_PE&diff=316689Windows PE2014-05-26T06:17:26Z<p>Wzyboy: </p>
<hr />
<div>[[Category:System administration]]<br />
[http://technet.microsoft.com/en-us/library/cc766093(v=ws.10).aspx Windows PE] is a lightweight version of Windows intended to be used for installation of Windows Vista and later versions of Windows, as well as for system maintenance. It runs entirely from memory and can be booted from the network. This page describes how customized Windows PE images can be created, and optionally published on the network, using only free software packages on an Arch Linux machine along with Microsoft's Windows Automated Installation Kit (WAIK). The WAIK can be downloaded at no cost and is only needed to extract the {{ic|boot.wim}} file that contains the initial copy of Windows PE, along with a couple boot files.<br />
<br />
== Use cases ==<br />
<br />
Normally, an image of Windows PE can only be created using the Windows Automated Installation Kit (WAIK) on a Windows machine. However, it is also possible to create and modify images of Windows PE using an (Arch) Linux machine, and optionally publish them on the network for PXE booting. No Windows machine is necessary. You may want to do this if:<br />
<br />
* you need to install Windows from the network, or boot Windows PE from the network for system administration, using an Arch Linux-based server. This may be because you do not have a Windows-based server, or you prefer using a Linux server because of its improved security and configurability, or you are already using a Linux server for other purposes.<br />
* you need to run a Windows environment to run Win32 programs, you do not have a Windows machine available, and you do not want to use [[Wine]] or the programs will not run correctly with [[Wine]].<br />
<br />
== Warnings ==<br />
<br />
'''If you boot Windows PE on a physical computer, you are placing Microsoft's closed-source code in control of that computer. You do so at your own risk.'''<br />
<br />
'''In addition, by downloading the Windows Automated Installation Kit, you may be bound by its license, which prevents you from, among other things, using Windows PE as a general-purpose operating system.'''<br />
<br />
== Creating a bootable Windows PE ISO ==<br />
<br />
<ol><br />
<li><br />
Download the Windows Automated Installation Kit (WAIK) from [http://www.microsoft.com/en-us/download/details.aspx?id=5753 Microsoft's website].<br />
{{Warning|The entire download, {{ic|KB3AIK_EN.iso}}, is 1.7GB.}}<br />
{{Tip|It may be possible to use [http://httpfs.sourceforge.net/ httpfs] to avoid downloading the entire file. Only around 118MB of it is actually needed.}}<br />
</li><br />
<br />
<li><br />
Make sure you have the {{Pkg|fuse}}, {{Pkg|cdrkit}}, and {{Pkg|cabextract}} packages installed.<br />
</li><br />
<br />
<li><br />
Install {{AUR|wimlib}} from the [[Arch User Repository]].<br />
</li><br />
<br />
<li><br />
Mount the WAIK ISO.<br />
{{bc|<br />
# mkdir /media/waik<br />
# mount KB3AIK_EN.iso /media/waik}}<br />
</li><br />
<li>Use the {{ic|mkwinpeimg}} script provided with {{AUR|wimlib}} to create a bootable Windows PE ISO {{ic|winpe.iso}}. See the man page for {{ic|mkwinpeimg}} for more information.<br />
{{bc|<nowiki>$ mkwinpeimg --iso --waik-dir=/media/waik winpe.iso</nowiki>}}<br />
</li><br />
<li>Unmount the WAIK ISO.</li><br />
{{bc|# umount /media/waik}}<br />
</ol><br />
<br />
== Booting Windows PE ==<br />
<br />
After creating a bootable ISO of Windows PE ({{ic|winpe.iso}}) as described in the previous section, you may want to boot Windows PE in the following ways:<br />
<br />
=== In virtual machine ===<br />
<br />
Run a virtual machine with {{ic|winpe.iso}} attached as a CD-ROM. Be sure to give it adequate memory, definitely more than the size of the ISO, since Windows PE runs from memory. For example:<br />
$ qemu-system-i386 -cdrom winpe.iso -m 512<br />
<br />
=== From CD ===<br />
<br />
Simply burn {{ic|winpe.iso}} onto a CD, and you can boot from it. '''Again: beware that if you do this on your Arch Linux machine, you are placing Microsoft's closed source operating system in control of your computer.'''<br />
<br />
=== From Network ===<br />
<br />
Windows PE can be booted from the network using [http://www.syslinux.org/wiki/index.php/PXELINUX PXELINUX] and its [http://www.syslinux.org/wiki/index.php/MEMDISK MEMDISK] module.<br />
<br />
<ol><br />
<li>Install {{pkg|syslinux}} and {{pkg|tftp-hpa}}.</li><br />
<li>Copy needed PXELINUX files to the [[Tftpd server|TFTP server]] root directory.<br />
{{bc|# cp /usr/lib/syslinux/{pxelinux.0,menu.c32,memdisk} /var/tftpboot}} </li><br />
<li>Put {{ic|winpe.iso}} in the [[Tftpd server|TFTP server]] root directory.<br />
{{bc|# mv winpe.iso /var/tftpboot}}</li><br />
<li>Create a [[Syslinux#Configuring_syslinux|configuration file]] for PXELINUX similar to the following:</li><br />
{{hc|/var/tftpboot/pxelinux.cfg/default|<nowiki><br />
UI menu.c32<br />
MENU TITLE Network Boot<br />
TIMEOUT 50<br />
<br />
LABEL winpe<br />
MENU LABEL Boot Windows PE from network<br />
KERNEL /memdisk<br />
INITRD winpe.iso<br />
APPEND iso raw<br />
<br />
LABEL localboot<br />
MENU LABEL Boot from local disk<br />
LOCALBOOT 0<br />
</nowiki><br />
}}<br />
<li>Start the [[Tftpd server|TFTP server]].<br />
{{bc|# rc.d start tftpd}}</li><br />
<li>Configure your DHCP server (such as [[Dhcpd]] or [[Dnsmasq]]) to point to {{ic|pxelinux.0}} as the boot file, with the Linux server's IP address. Beware: if your DHCP server is on a router, it may not be possible to do this without installing custom firmware.</li><br />
</ol><br />
<br />
After completing the above steps, you should be able to boot Windows PE from the network. '''Warning: With the given PXELINUX configuration file, Windows PE will start by default after 5 seconds.'''<br />
<br />
=== Network boot performance ===<br />
<br />
TFTP is not designed to be used to transfer large files, such as {{ic|winpe.iso}}, which may be 118MB or more. Performance may be improved by using the {{ic|gpxelinux.0}} bootloader instead of {{ic|pxelinux.0}} and loading {{ic|winpe.iso}} using HTTP rather than TFTP.<br />
<br />
== Customizing Windows PE ==<br />
<br />
The {{ic|mkwinpeimg}} script provided with {{AUR|wimlib}} supports making modifications to Windows PE using the {{ic|--start-script}} or {{ic|--overlay}} options. See the manual page for {{ic|mkwinpeimg}} for more information.<br />
<br />
You may want to do this to add additional Windows applications that you want to run in Windows PE, or to add any additional drivers that Windows PE needs (drivers can be loaded using the {{ic|drvload}} command within Windows PE).<br />
<br />
==See also==<br />
<br />
* [http://technet.microsoft.com/en-us/library/cc766093(v=ws.10).aspx Microsoft's documentation for Windows PE]<br />
* [http://www.thinkwiki.org/wiki/Windows_PE Another article about making Windows PE images on Linux]</div>Wzyboyhttps://wiki.archlinux.org/index.php?title=Mac&diff=314365Mac2014-05-10T14:46:12Z<p>Wzyboy: /* Partitions */</p>
<hr />
<div>[[Category:Apple]]<br />
[[de:ArchLinux auf einem MacBook]]<br />
[[fr:MacBook]]<br />
[[it:MacBook]]<br />
[[ja:MacBook]]<br />
[[zh-CN:MacBook]]<br />
{{Related articles start}}<br />
{{Related|Installation guide}}<br />
{{Related|Beginners' guide}}<br />
{{Related|General recommendations}}<br />
{{Related|MacBook 4,2 (late 2008)}}<br />
{{Related|MacBook 5,2 (early-mid 2009)}}<br />
{{Related|MacBook Pro 7,1}}<br />
{{Related|MacBook Pro 8,1 / 8,2 / 8,3 (2011)}}<br />
{{Related|MacBook Pro 9,2 (Mid-2012)}}<br />
{{Related|MacBookPro10,x}}<br />
{{Related|MacBookPro11,x}}<br />
{{Related articles end}}<br />
Installing Arch Linux on a MacBook (Pro) is quite similar to installing it on any other computer. However, due to the specific hardware configuration on a MacBook, there are a few deviations and special considerations which warrant a separate guide. For more background information, please see the [[Installation guide]], [[Beginners' guide]]. This guide contains installation-instructions that can be used on any Apple computer whose hardware is supported by the Linux kernel. Please see 'related' pages (on the top right of this page) for model-specific tips and troubleshooting.<br />
<br />
== Overview ==<br />
<br />
Specifically, the procedure for installing Arch Linux on a MacBook is:<br />
<br />
# '''[[#Installation of Mac OS X and firmware update|Install OS X]]''': Regardless of the desired end-configuration, it helps to start from a clean install of OS X.<br />
# '''[[#Installation of Mac OS X and firmware update|Firmware update]]''': This should help reduce errors and provide newer features for the hardware.<br />
# '''[[#Partitions|Partition]]''': This step either resizes or deletes the OS X partition and creates partitions for Arch Linux.<br />
# '''[[#Installation|Install Arch Linux]]''': The actual installation procedure.<br />
# '''[[#Post-install configuration|Post-install configuration]]''': MacBook specific configuration.<br />
<br />
{{Tip|rEFIt is a popular bootloader for EFI-firmware computers (including Macs). It can be installed at any time during the installation. For instructions, please see [[#rEFIt]]. }}<br />
<br />
== Installation of Mac OS X and firmware update ==<br />
<br />
[http://www.apple.com Apple] has excellent instructions for installing OS X. Follow their instructions. Once OS X is installed, go to ''Apple Menu > Software Update'' and update all software. Once this has run, you will need to reboot your computer. Do this, and then run '''Software Update''' again to check to make sure that all updates have been installed.<br />
<br />
If you are not going to have OS X installed, make backups of these files:<br />
<br />
/System/Library/Extensions/IOUSBFamily.kext/Contents/PlugIns/AppleUSBVideoSupport.kext/Contents/MacOS/AppleUSBVideoSupport<br />
<br />
You will need this file later for iSight functionality.<br />
<br />
/Library/ColorSync/Profiles/Displays/<FILES HERE><br />
<br />
You will need the file(s) here for adjusting the [[#Color Profile|color profile]].<br />
<br />
== Partitions ==<br />
<br />
The next step in the installation is to re-partition the hard drive. If OS X was installed using the typical procedure, then your drive should have a GPT format and the following partitions:<br />
<br />
* '''EFI''': a 200 MB partition at the beginning of the disk. It is often read as '''msdos''' or '''FAT''' by some partitioning tools and usually labeled ''#1''.<br />
* '''Mac OS X''': the ''(HFS+)'' partition that should take up all of the remaining disk space. Usually labeled ''#2''.<br />
* '''Recovery''': A recovery partition (only for Mac OS X 10.7+).<br />
How to partition depends on how many operating systems you want install. The following options will be explained:<br />
<br />
* [[#Arch Linux only|Arch Linux only]] for single boot.<br />
* [[#Mac OS X with Arch Linux|OS X with Arch Linux]] for dual boot.<br />
<br />
If you do not know which option to pick, we recommend the dual boot so you can still return to OS X whenever you want.<br />
<br />
=== Arch Linux only ===<br />
<br />
This situation is the easiest to deal with. Mostly, partitioning is the same as any other hardware that Arch Linux can be installed on. The only special consideration is the MacBook firmware boot sound. To ensure that this sound is off: '''mute''' the volume in OS X before continuing further. The MacBook firmware relies on the value in OS X, if available. Note that if you choose to get rid of the OS X partition, there is no easy way to update your machines firmware unless you use an external drive to boot OS X.<br />
You can boot in EFI mode (recommended) or bios-compatibility mode, if in doubt choose EFI.<br />
<br />
To install using EFI, follow the [[Unified Extensible Firmware Interface#Create UEFI bootable USB from ISO|instruction to make a EFI bootable media]]. Once done double check that your USB key actually boots in EFI mode [[Unified Extensible Firmware Interface#UEFI Variables Support|checking the EFI kernel variables]]. You will need to format the EFI partition with the {{ic|hfsplus}} filesystem ({{AUR|hfsprogs}}) instead of vfat otherwise {{AUR|mactel-boot}} will fail, and in Macbooks [[Unified Extensible Firmware Interface#Non-Mac UEFI systems|you cannot use {{ic|efibootmgr}}]].<br />
<br />
==== EFI ====<br />
<br />
*'''This requires [[GRUB]] to work'''<br />
* Boot installation medium and switch to a free tty.<br />
* Run '''cgdisk''' ({{Pkg|gptfdisk}} package).<br />
* Create the necessary partitions.<br />
<br />
{{Note|<br />
* The swap partition is optional, on machines with a RAM of size 4GB or more, good performance can be expected without a swap partition. Also, a '''swap file''' can be created later, see [[Swap#Swap file|Swap file]].<br />
* For more information on partitioning, see [[Beginners' guide#Partitioning hard disks: General information|Partitioning hard disks: General information]].<br />
}}<br />
Simple example (no LVM, crypto):<br />
partition mountpoint size type label<br />
/dev/sda1 /boot/efi 200MiB vfat EFI<br />
/dev/sda2 /boot 100MiB ext2 boot<br />
/dev/sda3 - adjust swap swap<br />
/dev/sda4 / 10GiB ext4 root<br />
/dev/sda5 /home remain. ext4 home<br />
<br />
* Done, you can continue to [[#Installation]]<br />
<br />
==== BIOS-compatibility ====<br />
<br />
* Boot installation medium and switch to a free tty.<br />
* Run '''parted'''. The simplest way is to change the partition table to '''msdos''' and then partition as normal. GRUB is compatible with GPT.<br />
<br />
* Create the necessary partitions.<br />
<br />
* Done, you can continue to [[#Installation]]<br />
<br />
=== Mac OS X with Arch Linux ===<br />
<br />
The easiest way to partition your hard drive, so that OS X and Arch Linux will co-exist, is to use partitioning tools in OS X and then finish with Arch Linux tools.<br />
<br />
{{Warning|It is highly recommended that this only be attempted after a clean install of OS X. Using these methods on a pre-existing system may have undesired results.}}<br />
<br />
{{Note|If you have any problems, try using [http://gparted.sourceforge.net/ gparted] (i.e. ''instead'' of using Disk Utility and/or cgdisk). It is capable of shrinking the OS X partition and creating Linux partitions ready for installation.}}<br />
<br />
'''Procedure''':<br />
* In OS X, run '''Disk Utility.app''' (located in {{ic|/Applications/Utilities}})<br />
<br />
* Select the drive to be partitioned in the left-hand column (not the partitions!). Click on the '''partition''' tab on the right.<br />
<br />
* Select the volume to be resized in the '''Volume scheme'''.<br />
<br />
* Decide how much space you wish to have for your OS X partition, and how much for Arch Linux. Remember that a typical installation of OS X requires around 15-20 GiB, depending on the number of software applications and files.<br />
<br />
* Finally, type the new (smaller) size for the OS X partition in the size box and click '''Apply'''. This will create a new partition out of the empty space. You will delete this partition later.<br />
<br />
{{Note|if you wish to have a shared partition between OS X and Arch Linux, then additional steps will need to happen here. Please see [[#HFS partition sharing]].}}<br />
<br />
* If the above completed successfully, then you can continue. If not, then you may need to fix your partitions from within OS X first.<br />
<br />
* Boot the Arch install CD by holding down the alt key during Boot. Follow one of the procedures below according to your choice of boot-method.<br />
<br />
==== EFI ====<br />
<br />
* Run '''cgdisk'''<br />
<br />
* Delete the partition you made in Disk Utility.app and create the necessary partitions for Arch Linux. OS X likes to see a 128 MiB gap after partitions, so when you create the first partition after the last Mac OS X-partition, type in '''+128M''' when cgdisk asks for the first sector for the partition. A simple example (no LVM, crypto):<br />
{{Note|<br />
* The swap partition is optional, on machines with a RAM of size 4GB or more, good performance can be expected without a swap partition. Also, a '''swap file''' can be created later, see [[Swap#Swap file]].<br />
* The easiest dual-boot option is to install refind from inside OSX, to its root directory (default for install.sh). Following that, copy the driver folder from the installation tarball into the new refind location, and uncomment the lines "scan_all_linux_kernels" and "also_scan_dirs" options in refind.conf. Configuration of boot options can then be done from a refind_linux.conf in Arch's /boot directory.<br />
* If you want to be able to boot GRUB from the Apple boot loader, you can create a small hfs+ partition (for convenience, use OS X to format it in Disk Utility.app afterwards). Follow the GRUB EFI install procedure, and mount your {{ic|/boot/efi}} directory to the hfs+ partition you created. Finally, finish up again in OS X by blessing the partition. This will set GRUB as the default boot option (holding alt at startup goes to the mac boot options screen still. See http://mjg59.dreamwidth.org/7468.html)<br />
* For more information on partitioning, see [[Partitioning]].<br />
* OS X's EFI partition can be shared with archlinux, making the creation of an additional EFI partition dedicated to arch completely optional<br />
}}<br />
partition mountpoint size type label<br />
/dev/sda1 /boot/efi 200MiB vfat EFI<br />
/dev/sda2 - ? hfs+ Mac OS X<br />
/dev/sda3 - ? hfs+ Recovery<br />
/dev/sda4 - 100MiB hfs+ Boot Arch Linux from the Apple boot loader (optional)<br />
/dev/sda5 /boot 100MiB boot boot<br />
/dev/sda6 - ? swap swap (optional)<br />
/dev/sda7 / 10GiB ext4 root<br />
/dev/sda8 /home remaining ext4 home<br />
<br />
* Done, you can continue to [[#Installation]]<br />
<br />
==== BIOS-compatibility ====<br />
<br />
* Run '''parted''' as root.<br />
<br />
* Delete the empty space partition and partition the space as you would for any other installation. Note that MBR is limited to 4 primary partitions (including the efi partition). That leaves 2 primary partitions for arch. One strategy is to have a system and home partition, and use a swap file (I have not tried to use logical partitions). Another is to dedicate one partition to a shared partition (see below).<br />
<br />
* Next, create new filesystems on those partitions which need them, especially the partition which will contain /boot. If you are not sure how to do this using {{ic|mkfs.ext2}} (or whatever), run {{ic|/arch/setup}} and work through until you get to Prepare Hard Drive and use the "Manually configure block devices..." option, then exit the installer. This is necessary so that rEFIt will set the right partition type in the MBR in the next step (without an existing filesystem, it seems to ignore the partition type set by parted), without which GRUB will refuse to install to the right partition.<br />
<br />
* At this point you should reboot your computer and have rEFIt fix the partition tables on your hard drive. (If you do not do this, you may have to reinstall GRUB later on in order to have your Mac recognize the Linux partition.) When you are into the rEFIt menu, select '''update partition table''', then press Y. Reboot.<br />
<br />
* Done, you can continue to [[#Installation]]<br />
<br />
=== Mac OS X, Windows XP, and Arch Linux triple boot ===<br />
<br />
This may not work for everyone but it has been successfully tested on a Macbook from late 2009.<br />
<br />
The easiest way to partition your hard drive, so that all these operating systems can co-exist, is to use disk utility in Mac OS X, use the formatter on windows XP install CP, and then finish with Arch Linux tools.<br />
<br />
{{Warning|It is highly recommended that this only be attempted after a clean install of Mac OS X. Using these methods on a pre-existing system may have undesired results. At least back your stuff up with timemachine or clonezilla before you begin.}}<br />
<br />
'''Procedure''':<br />
* In Mac OS X, run '''Disk Utility''' (located in {{ic|/Applications/Utilities}}).<br />
<br />
* Select the drive to be partitioned in the left-hand column (not the partitions!). Click on the '''partition''' tab on the right.<br />
<br />
* Select the volume to be resized in the '''volume scheme.'''<br />
<br />
* Decide how much space you wish to have for your Mac OS X partition, how much fo XP, and how much for Arch Linux. Remember that a typical installation of Mac OS X requires around 15-20 GiB, and XP about the same, depending on the number of software applications and files. Something like OSX 200Gb, XP 25Gb, Arch 25Gb should be fine.<br />
<br />
* Put your decisions into action by pressing the + button and adding the new partitions, Label them as you like and make sure that your XP partition is the last one on the disk and is formatted for FAT32. It is probably best to have Arch formatted in HFS format as to not confuse you later, it will be reformatted anyway.<br />
<br />
So in linux terms your partitions will be something like:<br />
<br />
:*sda (disk)<br />
:*sda1 (Mac boot partition - you cannot see this one in OSX)<br />
:*sda2 (OSX install in HFS+)<br />
:*sda3 (Arch install temporarly in HFS)<br />
:*sda4 (XP install in FAT32)<br />
<br />
* Finally, click '''apply'''. This will create a new partition out of the empty space.<br />
<br />
{{Note|Using this method you may not be able to have a shared partition between Mac OS X and Arch Linux, this is because the mac will only allow for 4 active partitions. You will however be able to mount a HFS partition in Arch for one workaround. There are other workarounds possible also.}}<br />
<br />
* If the above completed successfully, you can continue. If not, then you may need to fix your partitions from within Mac OS X first.<br />
<br />
* You will not be needing boot camp this way, the program rEFIt is much more flexible (though not as flexible as GRUB). Download and install rEFIt [[http://refit.sourceforge.net/]]<br />
<br />
* Go into a terminal in OS X and perform the following, this will enable the rEFIt boot manager. <br />
<br />
cd /efi/refit<br />
./enable.sh<br />
<br />
* Reboot to check the rEFIt is working, it should appear on boot. When it comes up go to the rEFIt partition manager and agree to the changes.<br />
<br />
* Put your XP install CD and boot it with rEFIt - You may have to reboot a few times until it is recognized by the boot loader. Install XP and once it is installed use the OSX install CD to get your drivers running nicely in XP.<br />
** Note: when installing XP make sure you select your XP partition and format it again inside the XP installer. If you do not reformat it will not work.<br />
<br />
* Boot the Arch install CD, log in as root and run {{ic|# /arch/setup}}.<br />
<br />
* Follow the install as normal but note that you will have to tell that arch installer to mount sda3 as the root partition and format it as ext3, there will not be a /boot or swap partition so ignore those warnings.<br />
<br />
* At this point, if you are dual booting, you should reboot your computer and have rEFIt fix the partition tables on your hard drive. (If you do not do this, you may have to reinstall GRUB later on in order to have your Mac recognize the Linux partition.) When you are into the rEFIt menu, select '''update partition table''', then press Y.<br />
# reboot<br />
<br />
* Done! You can continue to [[#Installation]] but make sure you read [[#Booting directly from GRUB]] for the stage "* (for booting with EFI) After the install boot loader stage, exit the installer and install GRUB."<br />
<br />
== Booting directly from GRUB ==<br />
<br />
=== Installing GRUB to EFI partition directly ===<br />
<br />
* If you would like to use GRUB as your main bootloader and use the "boot while holding the Alt/Option key" method to go back to Mac OS X rather than using alternatives such as rEFIt (http://refit.sourceforge.net/, mentioned previously in [[#BIOS-compatibility]] and [[#Mac OS X, Windows XP, and Arch Linux triple boot]]) then you must install {{Pkg|grub}} to your Mac's '''already-existing''' EFI partition (see below). <br />
<br />
{{Note| These instructions are known to work on a Macbook Pro (Early 2011). Please read the procedure carefully '''as well as the details following it'''.}}<br />
<br />
'''Procedure''':<br />
<br />
* Install {{Pkg|grub}}<br />
<br />
* Make a directory named {{ic|efi}} in {{ic|/boot}} <br />
<br />
* Mount the '''already-existing''' EFI partition on your Mac to this {{ic|/boot/efi}} directory<br />
<br />
* Install GRUB to this directory<br />
<br />
* Make a directory named {{ic| locale}} in {{ic| /boot/grub}}<br />
<br />
* Copy {{ic| grub.mo}} from {{ic| /usr/share/locale/en\@quot/LC_MESSAGES/}} to {{ic| /boot/grub/locale}} <br />
<br />
* Generate a configuration for GRUB<br />
<br />
* Done! GRUB will now start on reboot and you can boot into your newly installed Archlinux.<br />
<br />
* Remember to hold ALT/Option key '''while''' starting your computer if you want to boot back into Mac OS X.<br />
<br />
'''Details (quoted from [[GRUB_EFI_Examples#M5A97]]):'''<br />
<br />
Finish the standard Arch install procedures, making sure that you install {{Pkg|grub}} and partition your boot hard disk as GPT.<br />
<br />
From [[Grub#Install_to_UEFI_system_partition]]:<br />
<br />
The UEFI system partition will need to be mounted at {{ic|/boot/efi/}} for the GRUB install script to detect it:<br />
<br />
# mkdir -p /boot/efi<br />
# mount -t vfat /dev/sdXY /boot/efi<br />
<br />
Where X is your boot hard disk and Y is the efi partition you created earlier.<br />
<br />
Install GRUB UEFI application to and its modules to {{ic|/boot/grub/x86_64-efi}} using:<br />
<br />
# modprobe dm-mod<br />
# grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=arch_grub --recheck --debug<br />
# mkdir -p /boot/grub/locale<br />
# cp /usr/share/locale/en\@quot/LC_MESSAGES/grub.mo /boot/grub/locale/en.mo<br />
<br />
Generate a configuration for GRUB<br />
<br />
# grub-mkconfig -o /boot/grub/grub.cfg<br />
<br />
=== Using blessing ===<br />
<br />
It is possible to boot directly from GRUB in EFI mode without using rEFIt through what is known as "blessing" after placing GRUB on a '''separate partition'''. These instructions are known to work on a Macbook 7,1. It is advisable to host GRUB on either a FAT32 or HFS+ partition, but ext2 or ext3 may also work. GRUB's appleloader command does not currently work with the 7,1, but support can be added with the patch available [https://savannah.gnu.org/bugs/index.php?33185 here].<br />
<br />
After the GRUB install is in the desired location, the firmware needs to be instructed to boot from that location. This can be done from either an existing OS X install or an OS X install disk. The following command assumes that the GRUB install is in {{ic|/efi/grub}} on an existing OS X partition:<br />
# bless --folder /efi/grub --file /efi/grub/grub.efi<br />
<br />
=== Compilation ===<br />
<br />
Some models may need EFI_ARCH set to i386.<br />
bzr branch --revision -2 bzr://bzr.savannah.gnu.org/grub/trunk/grub grub<br />
cd grub<br />
./autogen.sh<br />
patch -p1 < appleloader_macbook_7_1.patch<br />
export EFI_ARCH=x86_64<br />
./configure --with-platform=efi --target=${EFI_ARCH} --program-prefix=""<br />
make<br />
cd grub-core<br />
../grub-mkimage -O ${EFI_ARCH}-efi -d . -o grub.efi -p "" part_gpt part_msdos ntfs ntfscomp hfsplus fat ext2 normal chain boot configfile linux multiboot<br />
cp grub.efi *.mod *.lst yourinstalllocation<br />
<br />
=== Example grub.cfg ===<br />
<br />
{{out of date|reason=kernel26}}<br />
Note that there may be a better method for loading Windows.<br />
{{bc|1=<br />
set debug=video<br />
insmod efi_gop<br />
<br />
menuentry "Arch Linux EFI" {<br />
set root=(hd0,3)<br />
#search --set -f /boot/vmlinuz26-efi-physical<br />
#loadbios /boot/vbtrace_bios.bin /boot/int10.bin<br />
linux /boot/vmlinuz26-efi-physical root=/dev/sda3 reboot=pci resume=/dev/sda3 resume_offset=151552<br />
initrd /boot/kernel26-efi-physical.img<br />
}<br />
<br />
menuentry "MacOSX" {<br />
set root=(hd0,2)<br />
# Search the root device for Mac OS X's loader.<br />
#search --set -f /usr/standalone/i386/boot.efi<br />
# Load the loader.<br />
chainloader /usr/standalone/i386/boot.efi<br />
}<br />
<br />
menuentry "Windows 7" {<br />
appleloader HD<br />
}<br />
<br />
menuentry "Boot from CD" {<br />
appleloader CD<br />
}<br />
<br />
menuentry "Boot from USB" {<br />
appleloader USB<br />
}<br />
}}<br />
<br />
== Installation ==<br />
<br />
{{Note|This section is only required if you want to have Mac OS X installed along with Arch Linux. If not, follow the steps in the official install guide, then skip to [[#Post-install configuration]].}}<br />
<br />
* Boot from the Arch Linux install CD or the latest [[Archboot]] iso (unofficial) depending on your needs. For a USB that is bootable by Apple's UEFI, you will need to follow these steps to [[Unified_Extensible_Firmware_Interface#Create_UEFI_bootable_USB_from_ISO|create a UEFI bootable USB.]]<br />
{{Note|<br />
* On MacBook Pro 7,1, I had an error booting the installation media Version 2012.12.01: "unable to handle kernel NULL pointer dereference at 0000000000000010" during pacpi_set_dmamode. To fix this problem, boot with the option: acpi&#61;off. After chrooting, add MODULES&#61;"ata_generic" into /etc/mkinitcpio.conf and execute mkinitcpio -p linux, see: [[Installation guide#Configure_the_system|Installation Guide, 9 Configure the system]].<br />
* Some MacBook users report strange keyboard output such as long delays and character doubling. To fix this problem, boot with the following options: arch noapic irqpoll acpi&#61;force}}<br />
<br />
* Log in as '''root'''<br />
<br />
{{Note|If you want to do a netinstall rather than installing the possibly outdated packages on the iso and depend on a wireless network that is encrypted, you should change to a free tty and connect manually before proceeding, see [[Beginners' guide#Setup wireless in the live environment (optional)|Beginners_Guide]]}}<br />
<br />
* Proceed through the installation as described in the [[Installation guide]] '''except''' in the following areas:<br />
** In the [[Installation guide#Prepare Hard Drive|prepare hard drive]] stage, do only the [[Installation guide#Manually configure block devices, filesystems and mountpoints|set filesystem mountpoints]] step, taking care to assign the correct partitions. Partitions have already been created if you followed [[#Partition]]<br />
** '''(for booting with EFI''') After the [[Installation guide#Install Bootloader|install boot loader]] stage, exit the installer and install [[GRUB]].<br />
** '''(for booting with BIOS-compatibility)''' In the [[Installation guide#Install Bootloader|install boot loader]] stage, edit the menu.lst file and add '''reboot=pci''' to the end of the '''kernel''' lines, for example: {{bc|1=kernel /vmlinuz26 root=/dev/sda5 ro reboot=pci}} This will allow your MacBook to reboot correctly from Arch.<br />
** '''(for booting with BIOS-compatibility)''' Also in the [[Installation guide#Install Bootloader|install boot loader]] stage, install GRUB on whatever partition that {{ic|/boot}} is on. {{Warning|Do not install GRUB onto ''/dev/sda'' !!! Doing so is likely to lead to an unstable post-environment.}}<br />
** In the [[Installation guide#Configure System|configure system]] stage, edit /etc/mkinitcpio.conf and add the '''usbinput''' hook to the '''HOOKS''' line somewhere after the '''autodetect''' hook. This will load the drivers for your keyboard in case you need to use it before Arch boots (e.g. entering a [[LUKS]] password or using the troubleshooting shell).<br />
<br />
* When the install process is complete, reboot your computer.<br />
<br />
* If using optical media, hold down the eject key as your MacBook starts, this should eject the Arch Linux install disk.<br />
<br />
* If dual-booting Mac OS X and Arch Linux, hold down the alt (option) key while the system boots to use the Mac bootloader to select which OS to boot.<br />
<br />
=== Additional steps for Arch Linux only install===<br />
<br />
GRUB seems to be more complicated and less straightforward than rEFInd on EFI environments, so it's usually the prefered choice. It will also add entries for bootable devices if they are plugged in, and requires no rebuild/redeployments when the configuration is updated.<br />
<br />
==== GRUB ====<br />
<br />
{{Note|Do this after you tested that your setup is working. This procedure has been tested on a MacBook 4,1 with an msdos partition table. It may not work on newer versions. Please update if it works for you.}}<br />
* In order for Linux to boot up straight away, you will have to tell the firmware that your /boot partition is bootable, or you will always have to hold down the option (alt) key whenever you want to start up your computer.<br />
* In order to do this you will need the original Mac OS X install disk<br />
* Boot into it (you may need to hold the option (alt) key during boot again to access it)<br />
** Open Terminal.app (found under the Utilities menu in the menu bar), and type:<br />
# diskutil list<br />
** Find the device name of your /boot partition (this is your root (/) partition, if you do not have it separate). The format should be /dev/disk0sX, where X is a number from 1 to infinity<br />
** If using EFI type (replace X with the appropriate number):<br />
# bless --folder=/Volumes/efi --file=/Volumes/efi/efi/arch/grubx64.efi --setBoot<br />
# bless --mount=/Volumes/efi --file=/Volumes/efi/efi/arch/grubx64.efi --setBoot<br />
** If using BIOS-compatibility type (replace X with the appropriate number):<br />
# bless --device /dev/disk0sX --setBoot --legacy --verbose<br />
* Remove the installation disk and restart your computer<br />
* After a few seconds of grey screen, your boot loader screen should appear automatically.<br />
<br />
==== rEFInd ====<br />
<br />
{{Note|This has been tested on a 2013 MBA. There is no reason for it not to work on older models.}}<br />
<br />
* Install [https://www.archlinux.org/packages/extra/x86_64/refind-efi/ rEFInd] from [extra].<br />
* Install rEFInd into the EFI partition:<br />
# refind-install<br />
* Create configuration files for the linux images in /boot:<br />
# refind-mkrlconf<br />
* Edit /boot/refind_linux.conf if you need to add any additional kernel parameters.<br />
<br />
== Post-install configuration ==<br />
<br />
=== Xorg ===<br />
<br />
Install and configure Xorg by following the [[Xorg]] article.<br />
<br />
==== Video ====<br />
<br />
Different MacBook models have different graphic cards.<br />
<br />
To see which graphics card you have type:<br />
<br />
$ lspci | grep VGA<br />
<br />
* If it returns a string containing '''intel''' you only need the {{Pkg|xf86-video-intel}} driver. Intel-based MacBooks work out-of-the-box.<br />
<br />
* If it returns '''nVidia''', read [[NVIDIA]].<br />
<br />
* Otherwise if it returns '''ATI''' or '''AMD''', read [[ATI]].<br />
<br />
===== NVIDIA note =====<br />
<br />
{{Tip|MBP 6.2 - With the proprietary [[NVIDIA]] drivers, support for [[NVIDIA#Enabling Pure Video HD (VDPAU/VAAPI)|PureVideo HD]] is available for hardware video decoding. }}<br />
<br />
For MacBooks with NVIDIA graphics, for the backlight to work properly you may need the {{AUR|nvidia-bl}} package found in the [[AUR]].<br />
<br />
{{Tip|<br />
* If backlight control does not work after installing nvidia-bl, you should [[Kernel modules#Blacklisting|blacklist]] apple_bl kernel module.<br />
* Alternatively, you can choose to use the {{AUR|pommed-light}} package. If you do so, you may wish to change the step settings in {{ic|/etc/pommed.conf.mactel}} to something around 5000-10000 depending on how many levels of brightness you desire. The max brightness is around 80000, so take that into account.}}<br />
<br />
===== Macbook 6.2+ - EFI =====<br />
<br />
As of 4/30/2011, the proprietary nvidia driver is not known to work under X with this model in efi mode. The nouveau driver should work out of the box, but dri should be installed from the [https://aur.archlinux.org/packages/mesa-git/PKGBUILD mesa-git] package.<br />
<br />
===== MacbookPro 5.5, NVIDIA and secondary display =====<br />
<br />
As of January 1 2011, the latest NVIDIA drivers (290.10) might not work properly when a secondary display is used (tested with TwinView), NVIDIA's current [http://www.nvnews.net/vbulletin/showthread.php?t=122606 long-live supported] 275xx drivers seem to work fine. Install {{AUR|nvidia-275xx}} and {{AUR|nvidia-utils-275xx}}, and possibly {{AUR|lib32-nvidia-utils-275xx}} if you are on x86_64 system and want 32-bits support.<br />
<br />
MacbookPro 5.5 has an NVIDIA 9400m graphics card. This problem might apply to other devices as well.<br />
<br />
==== Touchpad ====<br />
<br />
The touchpad should have basic functionality by default. A true multitouch driver which behaves very similarly to native OSX can be installed from the AUR: {{AUR|xf86-input-multitouch-git}}. It supports 1, 2 and 3 finger gestures, including differentiation between horizontal and vertical 3 finger swipe. Additional details are available at [http://bitmath.org/code/multitouch/ the driver's project page].<br />
<br />
xf86-input-multitouch-git does not support any sort of configuration without editing the driver's source. Some users are also experiencing issues with false clicks from palm touches. There is now a much more configurable fork available as {{AUR|xf86-input-mtrack-git}}. Configuration options are documented in the [https://github.com/BlueDragonX/xf86-input-mtrack readme].<br />
<br />
The following mtrack options work well on a Macbook 7,1:<br />
<br />
Option "Thumbsize" "50"<br />
Option "ScrollDistance" "100"<br />
<br />
Probably you need also to add:<br />
<br />
MatchDevicePath "/dev/input/event10"<br />
<br />
'''Natural scrolling:''' To configure natural two finger scrolling similar to [http://www.apple.com/au/osx/what-is/gestures.html#gallery-gestures-scroll Mac OSX], refer to [[Touchpad Synaptics#Natural scrolling]]. If you are using GNOME, it will override these settings - in this case refer to [[GNOME#Natural_scrolling_touchpad]].<br />
<br />
'''Special Note About Older Macbook Models (confirmed on MacBook 2,1):''' On older Macbook models (pre-multitouch), the touchpad will not function properly until you install the xf86-input-synaptics package. Please see [[Touchpad Synaptics]] for more information on installing and configuring this package.<br />
<br />
'''Note on Macbook Pro(5,5):''' I found it is much simpler to use the {{Pkg|xf86-input-synaptics}} in Extra. Although it does not have much function as 3 finger swipe, this driver provides faster response. {{Pkg|gpointing-device-settings}} also provides a simple GUI config. Below is a Xorg config file /etc/X11/xorgconfig.d/60-synaptics.conf for reference only.<br />
Section "InputClass"<br />
Identifier "touchpad catchall"<br />
Driver "synaptics"<br />
MatchIsTouchpad "on"<br />
MatchDevicePath "/dev/input/event*"<br />
Option "SHMConfig" "on"<br />
Option "TapButton1" "1"<br />
Option "TapButton2" "3"<br />
Option "TapButton3" "2"<br />
Option "PalmDetect" "on"<br />
Option "VertEdgeScroll" "off"<br />
Option "HorizEdgeScroll" "off"<br />
Option "CornerCoasting" "off"<br />
Option "EdgeMotionUseAlways" "off"<br />
Option "AreaLeftEdge" "10"<br />
Option "AreaRightEdge" "1270"<br />
EndSection<br />
'''OS X like MultiTouch Gestures''' ''currently broken due to newer synaptic drivers!'' For users looking to add more of OS X's multitouch gestures to Arch, [https://github.com/iberianpig/xSwipe xSwipe] is a highly customisable, light weight pearl script, which does just that. Once installed and configured (see xSwipe wiki on Github) I would recommend adding xSwipe as a [[Autostarting|start up item]].<br />
<br />
==== Keyboard ====<br />
<br />
MacBook keyboard works by default. For swaping fn keys with Fx keys see [[Apple Keyboard]].<br />
<br />
To enable it you can map with right application like '''xbindkeys''' or through DE preferences; but another very good way, that we recommend, is to install {{AUR|pommed}} from the [[AUR]].<br />
<br />
Edit the {{ic|/etc/pommed.conf}} according to your hardware on MacBook, building<br />
it from {{ic|/etc/pommed.conf.mac}} or {{ic|/etc/pommed.conf.ppc}} example files.<br />
<br />
Note that you can also run it without a configuration file, the defaults may work for you. Then enable and start pommed [[Systemd]] service.<br />
<br />
systemctl enable pommed<br />
systemctl start pommed<br />
<br />
{{Tip|if you are using Gnome or KDE you can easily configure ''3rd level functionality'', ''multimedia key'', etc. in Keyboard Preferences.}}<br />
<br />
{{Note|See the [[Xorg input hotplugging]] page for other configuration information.}}<br />
<br />
===== Keyboard Backlight =====<br />
<br />
The keyboard backlight is controlled by {{ic|/sys/class/leds/smc::kbd_backlight}}. Write the desired value to {{ic|brightness}} in that directory.<br />
<br />
You may also use [https://aur.archlinux.org/packages/kbdlight/ kbdlight] to control keyboard backlight though scripts or by running it via sxhkd or xbindkeys. It has the advantage of allowing keyboard light-level changes without being root.<br />
<br />
====== NVIDIA note ======<br />
<br />
If the brightness does not function correctly through pommed, make sure you have installed the {{AUR|nvidia-bl}} package and insert<br />
<br />
find . -name "*" -exec sed -i 's/mbp_backlight/nvidia_backlight/' '{}' \;<br />
<br />
into the second line of the pommed PKGBUILD build() function and remake the package. From [https://bbs.archlinux.org/viewtopic.php?id=105091 this forum post].<br />
<br />
Another possible solution is to modify the pommed PKGBUILD build():<br />
<br />
find . -name "*" -exec sed -i 's/nvidia_backlight/apple_backlight/' '{}' \;<br />
<br />
If the previous does not work try the following,<br />
<br />
run nvidia-settings, edit the file '/etc/X11/xorg.conf' and add this line into the Device section:<br />
<br />
Option "RegistryDwords" "EnableBrightnessControl=1"<br />
Save and reboot and check backlight buttons work.<br />
More information available at [https://help.ubuntu.com/community/MacBookPro5-5/Precise#LCD ubuntu macbook pro 5,5]<br />
<br />
=== Wi-Fi ===<br />
<br />
Different MacBook models have different wireless cards.<br />
<br />
You can easily check what card do your MacBook have by:<br />
<br />
# lspci | grep Network<br />
<br />
* If you have an Atheros card, all should work out-of-the-box.<br />
<br />
* If you have a Broadcom card, follow the [[Broadcom BCM4312]] page.<br />
<br />
* 5.0 and 6.0 generation MacBooks may have a BCM43xx, follow the instructions for the broadcom-wl driver on the [[Broadcom wireless]] page. The interfaces can swap during reboot so its best to define them in a udev rule (instructions on the [[Broadcom wireless]] page).<br />
<br />
* 8.1 generation MacBooks have BCM4331, for which support is not present in either Linux (3.0 and 3.1) or the proprietary drivers by Broadcom. There is however preliminary support for it in Linux 3.2. To run the drivers on earlier kernels, you will need to use [http://wireless.kernel.org/en/users/Download compat-wireless]<br />
<br />
{{Note|If your connection frequently drops, you may have to turn off Wi-Fi power management. If you are running [[pm-utils]], you may override wireless power management by creating an executable file {{ic|/etc/pm/wireless}} with the lines:<br />
#!/bin/sh<br />
iwconfig wlp2s0 power off<br />
}}<br />
<br />
=== Power management ===<br />
<br />
==== Laptop-mode-tools ====<br />
<br />
Because the MacBook is obviously a laptop, you may wish to control its power management features using something like [[Laptop Mode Tools]].<br />
<br />
However, Laptop Mode Tools is known to disable the keyboard in console mode after being idle for a few seconds (does not happen when using X). If this happens to you set <br />
<br />
CONTROL_USB_AUTOSUSPEND=0<br />
<br />
in {{ic|/etc/laptop-mode/conf.d/usb-autosuspend.conf}}. See this [https://bbs.archlinux.org/viewtopic.php?pid=984831 forum thread] for the original workaround.<br />
<br />
==== Suspend to RAM (kernel suspend) ====<br />
<br />
Suspend (the kernel suspend) should work out of the box (I had a problem in which the machine would "suspend immediately after resume" in certain conditions when suspending by closing the lid. This was solved by de-selecting the option "event_when_closed_battery" in gconf-editor &rarr; gnome-power-manager &rarr; actions).<br />
<br />
For a macbook2,1 (bought in 2007) s2ram works using <br />
s2ram -f -a 3 <br />
To make it work with kde4 you have to create a file named "config" into /etc/pm/config.d containing<br />
SLEEP_MODULE="uswsusp"<br />
S2RAM_OPTS="-f -a 3"<br />
<br />
For a MacBook Pro 3,1 (bought in 2008), the following command should work, both in X and in a console:<br />
s2ram -f -a 1<br />
<br />
Note: If you use pm-utils suspending lead (at least for me) disk freeze. Try changing /etc/pm/config.d/module to<br />
SLEEP_MODULE=tuxonice<br />
<br />
For a macbook5.5, s2ram may work using (be sure to run it in X)<br />
s2ram -f -p -m<br />
<br />
==== Suspend to disk (hibernate) ====<br />
<br />
{{Merge|Swap#Swap file|These part is duplication of Swap file section in Swap. Should check and merge it to Swap.}}<br />
Hibernate should work if you have a swap partition. If you opted for a swap file because of the MBR limitation to 4 primary partitions, you can still get hibernate functionality by following these instructions (this is mostly taken from http://ubuntuforums.org/showthread.php?t=1042946):<br />
<br />
* Create a swapfile (here 2G = bs*count):<br />
# dd if=/dev/zero of=/swapfile bs=1024 count=2M<br />
It is recommended, but not necessary, to create the swapfile on a newly created partition, so that fragmentation is minimum.<br />
# chmod 600 swapfile <br />
# mkswap swapfile <br />
mkswap: swapfile: warning: do not erase bootbits sectors<br />
on whole disk. Use -f to force.<br />
Setting up swapspace version 1, size = 2097148 KiB<br />
no label, UUID=6bf46166-4f9e-433a-aac1-91cb3f5cf8ba<br />
# <br />
Note that we will not use this UUID later.<br />
* Add the swapfile in {{ic|/etc/fstab}}:<br />
/swapfile none swap sw 0 0<br />
* Determine the UUID of partition on which the swapfile is (/usr/bin/blkid is provided by util-linux-ng)<br />
# blkid -g<br />
# blkid<br />
/dev/sda4: UUID="388014d3-1d18-4ca0-980e-ef2f9fdebde4" TYPE="ext3" <br />
388014d3-1d18-4ca0-980e-ef2f9fdebde4 is the number we are looking for.<br />
* Determine the physical offset of the swapfile:<br />
# filefrag -v /swapfile | head<br />
Filesystem type is: ef53<br />
Filesystem cylinder groups is approximately 132<br />
File size of /swapfile is 2147483648 (524288 blocks, blocksize 4096)<br />
ext logical physical expected length flags<br />
0 0 24576 12 merged<br />
1 12 24589 24587 1024 merged<br />
2 1036 25615 25612 1024 merged<br />
3 2060 26640 26638 1024 merged<br />
4 3084 27665 27663 1024 merged<br />
5 4108 28690 28688 1024 merged<br />
$ <br />
Here, 24576 is the number we want.<br />
* Edit {{ic|/boot/grub/grub.cfg}} and add:<br />
resume=/dev/disk/by-uuid/388014d3-1d18-4ca0-980e-ef2f9fdebde4 resume_offset=24576<br />
to your kernel stanza options (or use the kopt method as in the post). Note that the "resume=UUID=" actually did not work for me. I had to use the {{ic|/dev/disk/by-uuid}} syntax.<br />
<br />
Note: "ro" has to be at the end of the line, like this:<br />
kernel /boot/vmlinuz-linux root=/dev/sda4 '''resume=/dev/sda4 resume_offset=24576''' ro<br />
* Nothing to do with update-grub nor mkinitcpio.<br />
* Reboot once<br />
* Try to hibernate<br />
<br />
=== Light sensor ===<br />
<br />
If you want to use the built in light sensor to automatically adjust screen and keyboard backlight brightness check out<br />
'''Lighter''' [https://github.com/Janhouse/lighter] (simple perl script, easy to fine-tune) and '''Lightum''' [https://github.com/poliva/lightum] (Requires Gnome or KDE but is older and more complete than Lighter).<br />
<br />
=== Sound ===<br />
<br />
{{Tip|MBP 5.5: since kernel 2.6.32 this works out of the box - just unmute the front speakers and store the sound level }}<br />
{{Tip| If using [[ALSA]], the internal speaker might not be disabled when using the headphone jack. To solve this, enable "Auto-mute" using {{ic|alsamixer}}}}<br />
<br />
First of all follow [[ALSA]] wiki page, then if something does not work correctly, continue reading this part.<br />
<br />
Edit your {{ic|/etc/modprobe.d/50-sound.conf}} or {{ic|/etc/modprobe.d/modprobe.conf}} appending this line:<br />
<br />
options snd_hda_intel model=intel-mac-auto<br />
<br />
This should automatically specify the codec in your MacBook. Alternatively, for MacBookPro5,X, you can use:<br />
<br />
options snd_hda_intel model=mb5<br />
<br />
(note that the jack output is controlled with "HP").<br />
<br />
If you have an iMac8,1, you should instead use<br />
<br />
options snd-hda-intel model=mbp3 position_fix=2<br />
<br />
You can try to specify other options, that depend on your hardware. All other possible settings are listed in Kernel Documentation, avaible online:<br />
<br />
* [http://www.kernel.org/doc/Documentation/sound/alsa/ALSA-Configuration.txt ALSA-Configuration.txt]<br />
* [http://www.kernel.org/doc/Documentation/sound/alsa/HD-Audio.txt HD-Audio.txt]<br />
* [http://www.kernel.org/doc/Documentation/sound/alsa/HD-Audio-Models.txt HD-Audio-Models.txt].}}<br />
<br />
Then, reboot.<br />
<br />
=== Bluetooth ===<br />
<br />
{{Note|Bluetooth should work out-of-the box. The hid2hci utility is used by default since bluez 4.91}}<br />
<br />
See the article on [[Bluetooth]] to install and configure all software needed.<br />
<br />
=== Webcam ===<br />
<br />
==== iSight ====<br />
<br />
{{Note|Linux kernel from 2.6.26 includes the Linux UVC driver natively. '''MBP 6,2+ (Kernel ~2.6.37+) iSight works out of the box''' without the need to use firmware from OS X. Only use {{ic|isight-firmware-tools}} if it doesn't work normally.}}<br />
<br />
iSight webcams on Macbooks or pre 6,2 MacBook Pros (6,2 came out around 2010) require the Apple's proprietary firmware that cannot be redistributed. It must be extracted from MacOS and loaded onto Arch.<br />
<br />
You will need to install {{ic|1=[https://aur.archlinux.org/packages.php?ID=23525 isight-firmware-tools]}} from the [[AUR]] to extract the firmware. The AUR package also includes a udev rule and ELF binary that are necessary, even once you have extracted the firmware file into {{ic|/lib/firmware/isight.fw}}, for the file to be loaded every time you boot your computer (namely {{ic|/etc/udev/rules.d/isight.rules}} which uses {{ic|/usr/lib/udev/ift-load}}).<br />
<br />
Instructions:<br />
<br />
First you need to get the firmware out of a particular file located on your OS X install. It is located in {{ic|/System/Library/Extensions/IOUSBFamily.kext/Contents/PlugIns/AppleUSBVideoSupport.kext/Contents/MacOS/AppleUSBVideoSupport}}.<br />
<br />
{{ Tip | The {{ic|AppleUSBVideoSupport}} file from a Mac OSX 10.6 (Snow Leopard) installation may not work properly. If possible, use the file from OSX 10.5 or before. }}<br />
<br />
To mount the MacOSX drive if multi-booting:<br />
<br />
# sudo mkdir /media/MacOSX<br />
# sudo mount -t hfsplus /dev/sda2 /media/MacOSX<br />
<br />
Then, install {{ic|1=[https://aur.archlinux.org/packages.php?ID=23525 isight-firmware-tools]}} from the [[AUR]].<br />
<br />
Locate the {{ic|AppleUSBVideoSupport}} file in the OSX directory listed above. Either copy it over to your Arch system (Any OSX installation should do, such as an iMac, not just one specific to your system) or, if multi-booting, mount the OSX drive and navigate to the directory. (On 10.7 (Lion) the directory is {{ic|/System/Library/Extensions/IOUSBFamily.kext/Contents/PlugIns/AppleUSBVideoSupport.kext/Contents/MacOS}}.) In that directory you can go ahead and extract the driver:<br />
<br />
# ift-extract --apple-driver AppleUSBVideoSupport<br />
<br />
When it's done, check that the firmware has been found:<br />
<br />
# ls /lib/firmware/isight.fw<br />
<br />
Once successful, completely '''SHUTDOWN''' your Mac and start it back up again (to clear the hardware state of the camera). Do ''not'' reboot.<br />
<br />
It should be automatically loaded at boot; if it isn't you can load the '''uvcvideo''' module [[Kernel modules|manually or load it at boot]].<br />
<br />
You can use many applications to test the camera:<br />
<br />
* MPlayer<br />
<br />
# mplayer tv:// -tv driver=v4l2:width=320:height=240:device=/dev/video0 -fps 30<br />
<br />
* Cheese<br />
* Skype<br />
* Ekiga<br />
<br />
A simple solution to take snapshots is:<br />
<br />
# mplayer tv:// -vf screenshot<br />
<br />
and the pressing the s key to take a snapshot. Files are of the format {{ic|shot\d\d\d\d.png}} and are reported in the standard output.<br />
<br />
==== Facetime HD ====<br />
The Facetime HD webcam (included on 2013 MBAs onwards) [http://mactaris.blogspot.co.uk/2013/07/webcam-settings-20-will-support.html is no longer UVC device], and therefore, does not work out of the box.<br />
<br />
=== Temperature Sensors ===<br />
<br />
For reading temperature just install and configure '''lm_sensors'''.<br />
See [[Lm sensors]] page.<br />
<br />
=== Color Profile ===<br />
<br />
We can use color profiles from Mac OS.<br />
<br />
First, install {{AUR|xcalib}} from the [[AUR]].<br />
<br />
Second copy pre-saved color profiles placed in {{ic|/Library/ColorSync/Profiles/Displays/}} on Mac OS partition to {{ic|~/colorprofiles/}} for example.<br />
<br />
There are color profile files agree with in MacBook models; select the right one:<br />
<br />
* '''Color LCD-4271800.icc''' for MacBook Pro with CoreDuo CPU<br />
* '''Color LCD-4271880.icc''' for MacBook with Core2Duo<br />
* '''Color LCD-4271780.icc''' for MacBook (not Pro) based on CoreDuo or Core2Duo.<br />
<br />
{{Tip|Also Mac OS allows to save current color profile from ''Displays > Color'' section of the ''Mac OS System Preferences'', in this case file is saved to {{ic|/Users/<username>/Library/ColorSync/Profiles}}.}}<br />
<br />
Finally you can activate it by running<br />
<br />
# xcalib ~/colorprofile.icc<br />
<br />
{{Note|Previous command set the color profile only for the current session; this mean that you must run it every time you login in your system. For automating it you can execute the command by '''Autostart Application''', concording with your DE (or add the command to your login manager's initialization script, e.g. /etc/gdm/Init/Default).}}<br />
<br />
=== Apple Remote ===<br />
<br />
First, to correctly install and configure the '''lirc''' software that control IR see [[Lirc]] wiki.<br />
<br />
Then make LIRC use {{ic|/dev/usb/hiddev0}} (or {{ic|/dev/hiddev0}}) by editing {{ic|/etc/conf.d/lircd}}. Here is how mine look:<br />
<br />
#<br />
# Parameters for lirc daemon<br />
#<br />
LIRC_DEVICE="/dev/usb/hiddev0"<br />
LIRC_DRIVER="macmini"<br />
LIRC_EXTRAOPTS=""<br />
LIRC_CONFIGFILE="/etc/lirc/lircd.conf"<br />
<br />
Use '''irrecord''' (available when installing '''lirc''') to create a configuration file matching your remote control signals (alternatively, you can try to use the {{ic|lircd.conf}} below):<br />
<br />
# irrecord -d /dev/usb/hiddev0 -H macmini output_conf_file<br />
<br />
Start '''lircd''' and use '''irw''' to check if it works.<br />
<br />
Example of an {{ic|/etc/lirc/lircd.conf}}:<br />
<br />
begin remote<br />
<br />
name lircd.conf.macbook<br />
bits 8<br />
eps 30<br />
aeps 100<br />
<br />
one 0 0<br />
zero 0 0<br />
pre_data_bits 24<br />
pre_data 0x87EEFD<br />
gap 211994<br />
toggle_bit_mask 0x87EEFD01<br />
<br />
begin codes<br />
Repeat 0x01<br />
Menu 0x03<br />
Play 0x05<br />
Prev 0x09<br />
Next 0x06<br />
Up 0x0A<br />
Down 0x0C<br />
end codes<br />
<br />
end remote<br />
<br />
=== HFS partition sharing ===<br />
<br />
First, we need {{AUR|hfsprogs}} package from AUR. <br />
<br />
we have to list our partitions. Use<br />
<br />
fdisk -l /dev/sda<br />
<br />
example output:<br />
<br />
# fdisk -l /dev/sda<br />
Device Boot Start End Blocks Id Type<br />
/dev/sda1 1 26 204819 ee GPT<br />
/dev/sda2 26 13602 109051903+ af Unknown<br />
/dev/sda3 * 13602 14478 7031250 83 Linux<br />
/dev/sda4 14478 14594 932832+ 82 Linux swap / Solaris<br />
<br />
As we see, the "Unknown" partition is our OS X partition, which is located in {{ic|/dev/sda2}}.<br />
<br />
Create a "mac" folder in /media:<br />
<br />
# mkdir /media/mac<br />
<br />
Add at the end of ''/etc/fstab'' this line:<br />
<br />
/dev/sda2 /media/mac hfsplus auto,user,rw,exec 0 0<br />
<br />
Mount it :<br />
<br />
mount /media/mac<br />
<br />
and check it:<br />
<br />
ls /media/mac<br />
<br />
=== HFS+ Partitions ===<br />
<br />
HFS+ partitions, now the default in Mac OS X, are not fully supported by Linux and are mounted as read-only by default. In order to write to an HFS+ partition, it is necessary to disable journaling. This can be accomplished using Mac OS X Disk Utility. Refer to this [http://support.apple.com/kb/ht2355 Apple support page] for more information.<br />
<br />
===Home Sharing===<br />
<br />
'''''UID Synchronization'''''<br />
<br />
==== In OS X ====<br />
<br />
{{Note|It is strongly recommended that UID/GID manipulation be done immediately after a new user account is created, in OS X as well as in Arch Linux. If you installed OS X from scratch, then this operation is guaranteed to work after logging into your account for the first time.}}<br />
<br />
===== Step 1: change UID and GID(s) =====<br />
<br />
'''''Pre-Leopard'''''<br />
<br />
# Open '''NetInfo Manager''' located in the ''/Applications/Utilities'' folder.<br />
# If not done for you already, enable access to user account transactions by clicking on the closed lock at the bottom of the window, and entering your account password, or root password if you have created a root account.<br />
# Navigate to ''/users/<new user name>'' where <new user name> is the name of the account that will have read/write access to the folder that will be shared with the primary user in Arch.<br />
# Change the '''UID''' value to 1000 (the value used by default for first user created in Arch).<br />
# Also change the '''GID''' value to 1000 (the value used by default for user account creation in Arch).<br />
# Navigate to {{ic|/groups/<new user name>}}, automatically saving the changes you have made so far.<br />
<br />
{{Note|If you get an error message that the transaction is not allowed, log out and log back in.}}<br />
<br />
'''''Leopard'''''<br />
<br />
In Leopard, the '''NetInfo Manager''' application is not present. A different set of steps is required for UID synchronization:<br />
<br />
# Open '''System Preferences'''.<br />
# Click on '''Users & Groups'''.<br />
# Unlock the pane if not already done so.<br />
# Right-click on the desired user and select '''Advanced Options'''.<br />
# Write down the value of the '''User ID''' field, you will need it later on. Change both the UID and GID to match the UID and GID of the account wished to be shared with in Arch (1000 by default for the first user created in Arch).<br />
<br />
===== Step 2: change "Home" permissions =====<br />
<br />
# Open up '''Terminal''' in the {{ic|/Applications/Utilities}} folder.<br />
<br />
# Enter the following command to reclaim the permission settings of your home folder, replacing <your user name>, <your user group> and <your old UID> with the user name whose UID and GID values you just changed, the group name whose GID value you just changed and the old UID number, respectively.<br />
<br />
# find /User/<your user name> -user <your old UID> -exec chown <your user name>:<your user group> {} \;<br />
<br />
==== In Arch ====<br />
<br />
To synchronize your UID in Arch Linux, you are advised to perform this operation ''while creating a new user account''.<br />
It is therefore recommended that you do this as soon as you install Arch Linux.<br />
<br />
Now you must substitute Arch's home with Mac OS's home, by modify entries of {{ic|/etc/fstab}}.<br />
<br />
=== Avoid long EFI wait before booting ===<br />
<br />
If your Macbook spends 30 seconds with "white screen" before booting you need to tell the firmware where is the booting partition.<br />
<br />
Boot Mac OS X, if do not have it installed, you can use the install DVD (select language, then click Utilities->Terminal), or another MacBook with Mac OS X (connect the two computers via firewire or thunderbolt, start the other Macbook keeping pressed T, boot your MacBook keeping pressed Options).<br />
<br />
Either way, once you got a Mac OS X terminal running on your MacBook you need to execute, as root, a different command if the boot partition is EFI or it is not:<br />
<br />
# bless --device /dev/disk0s1 --setBoot # if the booting partition is EFI<br />
or<br />
# bless --device /dev/disk0s1 --setBoot --legacy # if the booting partition is not EFI<br />
<br />
(given that if your GRUB or EFI is on sda1, /dev/disk1s2 if it is on sdb2, etc). See also https://bbs.archlinux.org/viewtopic.php?pid=833215 and https://support.apple.com/kb/HT1533 .<br />
<br />
=== Mute startup chime ===<br />
<br />
If you forgot to mute before installing, you can still mute again if you have a Mac OS X install disk. Boot from it, select language, then click ''Utilities > Terminal'', and enter<br />
<br />
# /usr/bin/nvram SystemAudioVolume=%01<br />
<br />
(or whatever volume you want).<br />
<br />
== rEFIt ==<br />
<br />
{{Note|<br />
* You probably want to have a look at [http://www.rodsbooks.com/refind/ refind], which is some type of successor of rEFIt.<br />
* This is not a requirement. It only gives you a menu to choose between OS X and Arch Linux upon every boot.<br />
}}<br />
<br />
For more see, [http://refit.sourceforge.net/myths/ refit myths].<br />
<br />
In OS X, download the ".dmg" from [http://refit.sourceforge.net/ Refit Homepage] and install it.<br />
<br />
{{Note|If you have already partitioned your hard disk in preparation for the Arch installation, rEFIt may not be enabled by default. You will have to run the "enable.sh" script installed in /efi/refit/.}}<br />
<br />
Open up '''Terminal''' and enter:<br />
<br />
cd /efi/refit;<br />
./enable.sh<br />
<br />
=== Problems with rEFIt ===<br />
<br />
If you experience problems after the install of Arch or rEFIt, especially is the right OS is not showing up to boot to or if it dumps you at a GRUB prompt stuck like the following:<br />
<br />
GRUB>_<br />
<br />
Then have a look at this link:<br />
<br />
http://mac.linux.be/content/problems-refit-and-grub-after-installation<br />
<br />
It can give you a basic idea on how to boot off the Arch live cd, mount the problem Arch install, chroot, use gptsync, and reinstall GRUB. This is probably for more advanced users who can translate the commands from a debian system to an Arch system and also apply it to the partitions on their machine. Be careful not to install GRUB in the wrong spot.<br />
<br />
If you need a copy of gptsync you can wget it from here:<br />
http://packages.debian.org/sid/gptsync<br />
or try these, for 64 bit:<br />
<br />
wget http://ftp.us.debian.org/debian/pool/main/r/refit/gptsync_0.14-2_amd64.deb<br />
<br />
and for i386:<br />
<br />
wget http://ftp.us.debian.org/debian/pool/main/r/refit/gptsync_0.14-2_i386.deb<br />
<br />
since they are .deb packages you will need the program {{AUR|deb2targz}}.<br />
<br />
==== Mavericks upgrade breaks Arch boot option ====<br />
For some multi-boot users who utilize a separate Linux boot partition, the OSX Mavericks upgrade may overwrite the boot partition with Apple's own recovery boot filesystem. This breaks the Archlinux boot option in rEFIt/rEFInd. The best way to proceed in this situation is to abandon a separate boot partition and use the EFI system partition (ESP) to install the bootloader of your choice. It is also recommended that you use rEFInd instead of rEFIt as development on the latter has halted.<br />
<br />
Assuming grub2 as the bootloader:<br />
<br />
Use the Arch LiveCD to boot to a shell and [[Change Root|chroot]] to your broken Archlinux environment.<br />
<br />
Mount the ESP on /boot.<br />
<br />
Edit the fstab and remove the old boot partition and make ESP the new boot partition. Now mount the ESP as the new /boot parition.<br />
# mount -a<br />
<br />
Reinstall linux.<br />
# pacman -S linux<br />
<br />
Create a new initramfs and vmlinuz in /boot.<br />
# mkinitcpio -p linux<br />
<br />
Install grub.<br />
# grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=grub --recheck --debug<br />
<br />
Create a new grub.cfg file.<br />
# grub-mkconfig -o /boot/EFI/grub/grub.cfg<br />
<br />
Make sure that grub.cfg is in the same directory as grubx64.efi.<br />
<br />
Generate a new refind_linux.conf file in /boot simply by running mkrlconf.sh which comes with rEFInd.<br />
<br />
Exit the chroot environment.<br />
<br />
Reboot. You should see a new entry for Archlinux in rEFInd and it should boot to your Archlinux installation.<br />
<br />
== Model-specific information ==<br />
<br />
=== MacBook ===<br />
<br />
==== Mid 2007 13" - Version 2,1 ====<br />
<br />
{{Note|I used the 201212 ISO image.}}<br />
{{Warning|Current linux-3.8.x packages do not work with their EFI stub and refind-efi. Either use an older package ({{Pkg|linux}} 3.7.10-1 works with {{Pkg|refind-efi}} 0.6.8-1) or you may use a bootloader which does not rely on EFI stub. Similiar issues are reported with {{Pkg|gummiboot}}.}}<br />
<br />
Since older Macbooks have a 32bit EFI running, the usual installation image is not recognized. You need to either remove the UEFI support from the disc ([[Unified_Extensible_Firmware_Interface#Remove_UEFI_boot_support_from_ISO]]) or build a 32bit EFI version of the disc. The paragraphs below will take the first path to success, booting into BIOS mode and its pitfalls. For a try the other way round, read [[Unified_Extensible_Firmware_Interface#Create_UEFI_bootable_USB_from_ISO]] first.<br />
<br />
First prepare your harddisc according to your wishes. In this scenario it was a "Linux only" approach with<br />
<br />
/dev/sda1 HFS+ AF00 200M -> EFI boot system on Apple HFS+ partition<br />
/dev/sda2 ext4 8300 147G -> arch system<br />
/dev/sda3 swap 8200 1G -> swap<br />
<br />
The {{AUR|hfsprogs}} package contains the tools to handle HFS/HFS+ filesystems. The rEFInd bootloader recognizes it on its own. Usually the partition for the EFI bootloader is a FAT32 (vfat) partition. In this case I tried rEFIt first, which apparently needs the HFS+ filesystem to work, and kept it at that.<br />
<br />
The mount points are:<br />
<br />
/dev/sda2 -> /<br />
/dev/sda1 -> /boot/efi<br />
<br />
The bootloader in use was [http://www.rodsbooks.com/refind/index.html rEFInd] instead of rEFIt. To install it, the rEFInd homepage provides a good guide. The pitfall here is, that the system bootet in BIOS compatibility mode and not in EFI mode. You cannot therefore use {{ic|efibootmgr}}, because the EFI variables (even with 'modprobe efivars') are not available. While installing the system get {{AUR|mactel-boot}} from the [[AUR]]. The {{ic|hfs-bless}} utility comes in handy, when blessing the EFI bootloader. This is done by calling e.g.:<br />
<br />
hfs-bless /boot/efi/EFI/refind/refind.efi<br />
<br />
Since the Linux kernel does come with EFI stub enabled, it seemed a good idea to run it through a bootloader first. Especially if it runs not out of the box. But using rEFInd makes GRUB (or any other bootloader) obsolete, because of that.<br />
<br />
Not running out of the box is unfortunately the initial stage for the kernel. Since we installed it in BIOS mode, two modules are missing to grant access to the root partition while booting. Hence the 'initfsram-linux.img' can not be found/loaded. Adding the following modules to your 'MODULES' line in {{ic|/etc/mkinitcpio.conf}} solved this ([https://bbs.archlinux.org/viewtopic.php?pid=1139226#p1139226 original post]).<br />
<br />
{{hc|/etc/mkinitcpio.conf|2=<br />
MODULES="ahci sd_mod"}}<br />
<br />
Rebuild your kernel image:<br />
<br />
mkinitcpio -p linux<br />
<br />
The bootloader rEFInd can scan kernels even out of the '/boot/efi/...' directory and assumes an efi kernel even without the extension '.efi'. If you do not want to try out special kernels, this should work without the hassle to copy each kernel after building to some spot special.<br />
<br />
If you happen to get multiple entries for one boot image, it often results of a previous installation of a bootloader within the MBR. To remove that, try the following - taken from the [http://ubuntuforums.org/showpost.php?p=7828260&postcount=4 original post]. This is valid for GPT partitioned discs, so please check your environment and save your MBR first.<br />
<br />
# dd if=/dev/zero of=/dev/sda bs=440 count=1<br />
<br />
=== MacBook Pro ===<br />
<br />
* [[MacBookPro Retina]].<br />
<br />
=== MacBook Air===<br />
<br />
==== Mid 2013 13" - Version 6,2 ====<br />
[https://bbs.archlinux.org/viewtopic.php?id=165899 Dedicated forum thread]<br />
===== Installing and booting =====<br />
Booting from a normal 2013.6 USB key works fine, but I could not seem to get either GRUB or Syslinux working.<br />
<br />
I was able to boot by first installing Arch Linux following the Macbook guide at the wiki (having a separate FAT32 /boot partition). Skip the bootloader installation. <br />
<br />
Installing [http://www.rodsbooks.com/refind/getting.html rEFInd] from OS X (important!) and installing the EFI stub loader made me able to boot fine.<br />
<br />
[https://bbs.archlinux.org/viewtopic.php?id=165710 Dedicated thread].<br />
<br />
{{Note| Installing [http://www.rodsbooks.com/refind/getting.html rEFInd] from Linux (or from OS X, but to the esp) also works fine}}<br />
<br />
===== Arch Only Installation =====<br />
This method works without refind and uses grub to boot EFI. Partition as follows:<br />
<br />
/dev/sda1 200M Microsoft basic data<br />
/dev/sda2 256M Linux filesystem<br />
/dev/sda3 4G Linux swap<br />
/dev/sda4 108.6G Linux filesystem<br />
<br />
sda1 can also be a HFS+ partition for EFI. This example chooses to use FAT32 (vfat). Although swap is optional, it is highly recommended due to a suspend/resume bug where the monitor can only be displayed at 0% or 100%. Instead of sda4 for root and home, an alternative partition scheme would be to make sda4 as root and sda5 as home.<br />
<br />
Format and mount:<br />
<br />
mkfs.vfat -F 32 /dev/sda1<br />
mkfs.ext2 /dev/sda2<br />
mkswap /dev/sda3<br />
swapon /dev/sda3<br />
mkfs.ext4 /dev/sda4<br />
<br />
mount /dev/sda4 /mnt<br />
mkdir /mnt/boot<br />
mount/dev/sda2 /mnt/boot<br />
mkdir /mnt/boot/efi<br />
mount /dev/sda1 /mnt/boot/efi<br />
<br />
Finish the installation according to the [https://wiki.archlinux.org/index.php/Beginners'_Guide#Select_a_mirror Beginner's Guide] and skip anything after the bootloader. After you have generated your initramfs and set root passwd follow below to setup grub:<br />
<br />
pacman -S grub efibootmgr<br />
mount -t efivarfs efivarfs /sys/firmware/efi/efivars<br />
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=grub --recheck --debug<br />
grub-mkconfig -o /boot/efi/EFI/grub/grub.cfg<br />
cp /boot/efi/EFI/grub/grub.cfg /boot/grub/grub.cfg<br />
cp /boot/efi/EFI/grub/grubx64.efi /boot/efi/EFI/boot/bootx64.efi}}<br />
<br />
Now you can exit/unmount/reboot:<br />
exit<br />
umount -R /mnt<br />
reboot<br />
<br />
===== Stability problems =====<br />
{{Note| Passing {{ic|<nowiki>libata.force=1:noncq</nowiki>}} to the kernel parameters solves the problem.}}<br />
This is the big worry for me. Every now and then my system hangs for a brief moment and everything involving net or disk access just hangs there for a while and then it seems to work. <br />
So far it only seems to happen when I run something disk- or CPU-intensive. Also had an occassion when I could not start X and just got this repeating all over my screen:<br />
<br />
ata1.00: failed command: WRITE FPDMA QUEUED<br />
ata1.00: cmd 61/08:f0:10:8c:c2/00:00:0b:00:00/40 tag 30 ncq 4096 out<br />
res 40/00:00:00:00:00/00:00:00:00:00/00 Emask 0x4 (timeout)<br />
ata1.00: status: { DRDY }<br />
<br />
On the next attempt it worked fine.<br />
I did SMART short and long tests on my disk and they returned fine:<br />
<br />
[http://pastebin.com/vRE4T2Ld smartctl -a]<br />
<br />
There are some messages in my boot that indicate this could be disk and/or ACPI related.<br />
<br />
These are with 2013-06 ISO, 3.9.7-1 2013 x86_64 kernel.<br />
<br />
[http://pastebin.com/mjTJaPFa journalctl -b]<br />
Seems to only work with the headphone jack, not with the speakers.<br />
<br />
[http://pastebin.com/SdAcHuKh dmesg]<br />
<br />
===== Marvell ATA suspend bugs =====<br />
If you have 2013 Macbook Air with a Marvell 128 gig drive, you might get the following ata errors instead after pm-suspend/resumes:<br />
<br />
ata1: exception Emask 0x10 SAct 0x0 SErr 0x10000 action 0xe frozen<br />
ata1: irq_stat 0x00400000, PHY RDY changed<br />
ata1: SError: { PHYRdyChg }<br />
ata1: hard resetting link<br />
ata1: SATA link up 1.5 Gbps (SStatus 113 SControl 310)<br />
ata1.00: unexpected _GTF length (8)<br />
ata1.00: unexpected _GTF length (8)<br />
ata1.00: configured for UDMA/33<br />
ata1: EH complete<br />
<br />
Try what Patrick and Tejun figured out on the [https://bugzilla.kernel.org/show_bug.cgi?id=62351 linux bug]. I followed what Patrick describes with sata_alpm, and I haven't seen the issue since.<br />
<br />
===== Suspend/Resume =====<br />
Brightness is either 0% or 100% after resuming from suspend. Until the kernel is fixed, use patjak's fix by installing {{AUR|mba6x_bl-dkms}}. Patjak's github is at [https://github.com/patjak/mba6x_bl].<br />
===== WiFi =====<br />
WiFi does not work out of the box. Install {{AUR|broadcom-wl-dkms}} to connect to a network. <br />
<br />
===== Touchpad =====<br />
Since 3.10.3 kernel touchpad works perfectly with {{Pkg|xf86-input-synaptics}}.<br />
<br />
===== Audio =====<br />
As of Linux 3.12, sound works out of the box. If you do not get sound with only {{pkg|alsa-utils}}, you may need to create a /etc/asound.conf with below entries:<br />
<br />
defaults.pcm.card 1<br />
defaults.pcm.device 0<br />
defaults.ctl.card 1<br />
<br />
==== Mid 2012 13" — version 5,2 ====<br />
<br />
Kernel panics using default boot media under arch kernel 3.5. Adding <code>intremap=off</code> fixes this. Additionally, there are problems loading the <code>applesmc</code> module (meaning the temperature sensors, fan, and keyboard backlight do not work). These problems are fixed in the linux 3.6-rc4 mainline kernel (I have tested).<br />
<br />
==== Mid 2012 11.5" — Version 5,1 ====<br />
<br />
If you have issues with waking from sleep while in X11 such as a black screen or showing the console with a frozen mouse cursor then remove xf86-input-synaptics and install mtrack-git from aur. This fixed errors such as <br />
(EE) [dix] bcm5974: unable to find touch point 0<br />
and backtraces that causes X11 to crash. This might apply to Version 5,2 assuming they use the same trackpad.<br />
<br />
===== Installing using the Archboot 2012.06 image =====<br />
<br />
Several people have reported problems installing Arch Linux on the MBA version 5,2 (See [https://bbs.archlinux.org/viewtopic.php?id=144089 problems booting archlinux on a MacBook Air Mid 2012]). A common problem is that the screen is not detected and therefore goes black when the installer boots. To fix this problem one has to select the normal install (Not the LTS) during boot and press tab to edit the boot flags. Then add noapic flag to the boot line. This should fix the screen going black. Install the system as you normally would. It may help later in the configuration process if the support packages are installed already at this stage.<br />
<br />
When the install has finished again add the noapic flag to the GRUB boot line (if you use GRUB) and also add i915.diescreaming=1 (or perhaps i915.die). This should keep the screen from going black when booting the new system. After you enter the system the wireless driver should be loaded. If you installed the support packages during installation you should have the wifi-menu command. Run it and select the network you want to use. One could also use wpa_supplicant but wifi-menu is quite fast to use at this stage. Now you are ready to upgrade the system. As of writing there have been a lot of changes to Archlinux since the 2012.06 image of Archboot was released ([https://www.archlinux.org/news/filesystem-upgrade-manual-intervention-required-1/ filesystem] and [https://www.archlinux.org/news/the-lib-directory-becomes-a-symlink/ glibc]). Therefore the upgrade process can be a bit difficult. The current solution has sucessfully upgraded a standart archboot version to a up-to-date version as of October 2012 and this step should be obsolete in future releases of archboot.<br />
<br />
First ignore the new "big" changes to Arch Linux,<br />
<br />
pacman -Suy --ignore glibc,libarchive,curl,filesystem <br />
<br />
If this only upgrades pacman then run the command again. Remember to make sure that pacman is ignoring the packages you do not want upgraded now. Otherwise you may break the system and have to reinstall! Now upgrade to the new filesystem,<br />
<br />
pacman -S filesystem --force<br />
<br />
As described in [[DeveloperWiki:usrlib|Glibc upgrade guide]] there may be conflicts with installed packages that require the /lib directory. Follow the guide and remove any packages that use /lib. The stock 3.4.2 kernel from Archboot should be on this list so first upgrade this,<br />
<br />
pacman -S linux<br />
<br />
This may give some errors saying that the system may not boot because of missing modules. Ignore this warning for now. The stock install may also contain gcc in the /lib directory so also remove this if needed and any other packages that have conflicts. Now Glibc should be the only package in /lib so run the system upgrade and accept all changes, <br />
<br />
pacman -Su<br />
<br />
Finally reinstall the kernel so that it can find the correct modules.<br />
<br />
Now this command should not give any errors like last time. You can also reinstall gcc at this point. After a rebooted the system should startup and the new kernel should have fixed the problem with the screen going black. If want to boot Xorg then you may need to remove the i915.diescreaming=1 line from GRUB. If not then attach a external screen and try to fix the problem that way. Some people have reported commands that may help on the [https://bbs.archlinux.org/viewtopic.php?id=144089 forum].<br />
<br />
==== Mid 2011 — version 4,x ====<br />
<br />
Works out-of-the-box since kernel 3.2. It is recommended to use [[Archboot]], install [[GRUB]] and use EFI.<br />
<br />
==== Early 2008 — version 1,1 ====<br />
<br />
Everything works out of the box though you will need [https://www.archlinux.org/packages/core/x86_64/b43-fwcutter/ b43-fwcutter] (or simply [https://aur.archlinux.org/packages/b43-firmware/ b43-firmware]) for the wireless adapter to work.<br />
<br />
Since this model has only one USB port, you may find it easiest to install Arch with a powered USB hub. Plug a USB network adapter (wireless or ethernet adapter to plug into a USB port) and your Arch installation media into the USB hub.<br />
<br />
If you can't get any result by scanning wireless network after boot, unload modules <code>b43</code> and <code>ssb</code> and load them again:<br />
<br />
rmmod ssb<br />
rmmod b43<br />
modprobe b43<br />
<br />
There is a good chance you will find what's wrong with DMA from the dmesg log.<br />
<br />
Even if you can scan wireless networks after reloading the modules, it's still possible that you will only be able to connect to some networks, but not all of them. According to a more detailed discussion here: http://crunchbang.org/forums/viewtopic.php?id=17368, adding <code>pio=1,qos=0</code> options to the b43 module can solve this problem.<br />
<br />
I tested this for a 13' MacBook Air 1,1 with a BCM4321 chipset, and it works.<br />
<br />
== See also ==<br />
<br />
* http://www.netsoc.tcd.ie/~theorie/interblag/2010/01/30/installing-arch-linux-on-a-mac-pro/<br />
* http://allanmcrae.com/2010/04/installing-arch-on-a-macbook-pro-5-5/<br />
* http://allanmcrae.com/2012/04/installing-arch-on-a-macbook-pro-8-1/<br />
* http://linux-junky.blogspot.com/2011/08/triple-boot-archlinux-windows-7-and-mac.html</div>Wzyboyhttps://wiki.archlinux.org/index.php?title=Benchmarking/Data_storage_devices&diff=302466Benchmarking/Data storage devices2014-02-28T17:18:35Z<p>Wzyboy: /* Samsung 840 Pro 256 GB */</p>
<hr />
<div>[[Category:Storage]]<br />
{{Article summary start}}<br />
{{Article summary text|This article covers several Linux-native apps that benchmark I/O devices such as HDDs, SSDs, USB thumb drives, etc. There is also a "database" section specific to SSDs meant to capture user-entered benchmark results.}}<br />
{{Article summary heading|Related Articles}}<br />
{{Article summary wiki|Solid State Drives}}<br />
{{Article summary wiki|Benchmarking}}<br />
{{Article summary end}}<br />
<br />
==Introduction==<br />
Several I/O benchmark options exist under Linux.<br />
<br />
* Using hddparm with the -Tt switch, one can time sequential reads. This method is '''independent''' of partition alignment!<br />
* There is a graphical benchmark called gnome-disks contained in the {{pkg|gnome-disk-utility}} package that will give min/max/ave reads along with ave access time and a nice graphical display. This method is '''independent''' of partition alignment!'''<br />
* The dd utility can be used to measure both reads and writes. This method is '''dependent''' on partition alignment! In other words, if you failed to properly align your partitions, this fact will be seen here since you're writing and reading to a mounted filesystem.<br />
* [[Benchmarking#Bonnie.2B.2B|Bonnie++]]<br />
<br />
=== Using hdparm ===<br />
<br />
# hdparm -Tt /dev/sdX<br />
/dev/sdX:<br />
Timing cached reads: x MB in y seconds = z MB/sec<br />
Timing buffered disk reads: x MB in y seconds = z MB/sec<br />
<br />
{{Note|One should run the above command 4-5 times and manually average the results for an accurate evaluation of read speed per the hddparm man page.}}<br />
<br />
=== Using gnome-disks ===<br />
<br />
# gnome-disks<br />
<br />
Users will need to navigate through the GUI to the benchmark button ("More actions..." => "Benchmark Volume..."). [http://imgur.com/Ayv1B Example]<br />
<br />
=== Using systemd-analyze ===<br />
<br />
systemd-analyze plot > boot.svg<br />
<br />
Will plot a detailed graphic with the boot sequence: kernel time, userspace time, time taken by each service. [http://imgur.com/4ywt1 Example]<br />
<br />
=== Using dd ===<br />
<br />
{{Note|This method requires the command to be executed from a mounted partition on the device of interest!}}<br />
<br />
First, enter a directory on the SSD with at least 1.1 GB of free space (and one that obviously gives your user wrx permissions) and write a test file to measure write speeds and to give the device something to read:<br />
<br />
$ cd /path/to/SSD<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
w bytes (x GB) copied, y s, z MB/s<br />
<br />
Next, clear the buffer-cache to accurately measure read speeds directly from the device:<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
w bytes (x GB) copied, y s, z MB/s<br />
<br />
Now that the last file is in the buffer, repeat the command to see the speed of the buffer-cache:<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
w bytes (x GB) copied, y s, z GB/s<br />
<br />
{{Note|One should run the above command 4-5 times and manually average the results for an accurate evaluation of the buffer read speed.}}<br />
<br />
Finally, delete the temp file<br />
$ rm tempfile<br />
==== Caveats ====<br />
Some SSD controllers have compression hardware, which may skew benchmark results. See http://www.pugetsystems.com/labs/articles/SSDs-Advertised-vs-Actual-Performance-179/<br />
=== Model Specific Data ===<br />
Please contribute to this section using the template below to post results obtained.<br />
<br />
See [http://www.anandtech.com/bench/SSD/65 here] for a nice database of benchmarks.<br />
<br />
=== Template ===<br />
*SSD:<br />
*Model Number:<br />
*Firmware Version:<br />
*Capacity: x GB<br />
*Controller:<br />
*User:<br />
*Kernel:<br />
[*Filesystem: write something about your FS, optional]<br />
[*Notes: additional Notes, optional]<br />
<br />
# hdparm -Tt /dev/sdx<br />
<br />
Minimum Read Rate: x MB/s<br />
Maximum Read Rate: x MB/s<br />
Average Read Rate: x MS/s<br />
Average Access Time x ms<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
<br />
== Results ==<br />
<br />
=== Table ===<br />
<br />
All values are taken from the [https://wiki.archlinux.org/index.php/SSD_Benchmarking#Using_dd ''dd'' benchmark]. This is just an overview and has no scientific use.<br />
<br />
{| class="wikitable" border="1" cellpadding="5" cellspacing="0"<br />
! User !! Vendor !! Model !! Capacity [GB] !! Write [MB/sec] !! Read [MB/sec] !! Re-Read [MB/sec]<br />
|-<br />
| jac || Crucial || C300 || 128 || 138 || 372 || 6500<br />
|-<br />
| Fraoch || Crucial || M4 || 64 || 114 || 445 || 3800<br />
|-<br />
| lynix || Crucial || M4 || 128 || 193 || 268 || 6800<br />
|-<br />
| wzyboy || Crucial || M4 || 64 || 113 || 276 || 3400<br />
|-<br />
| dundee || Intel || 310 Soda Creek || 40 || 44.2 || 197 || 4200<br />
|-<br />
| bugflux || Intel || 330 || 120 || 44.2 || 242 || 4500<br />
|-<br />
| Cirk || Intel || X18-M (G2) || 160 || 103 || 263 || 2700<br />
|-<br />
| Graysky || Intel || X25-M (G2) || 80 || 80.6 || 268 || 6300<br />
|-<br />
| fackamato || Intel || X25-M (G2) || 160 || 98 || 262 || 3000<br />
|-<br />
| Cirk || Intel || X25-M (G2) || 80 || 70 || 208 || 4200<br />
|-<br />
| timo.hardebusch || Intel || X25-M (G2) || 120 || 106 || 265 || 2900<br />
|-<br />
| Musikolo || OCZ || Vertex 4 SATA 3 || 128 || 233 || 392 || 3600<br />
|-<br />
| Graysky || OCZ || Vertex 4 SATA 3 || 128 || 228 || 394 || -<br />
|-<br />
| Graysky || OCZ || Vertex 4 SATA 2 || 128 || 251 || 284 || -<br />
|-<br />
| Surfed || OCZ || Vertex || 60 || 142 || 236 || 5200<br />
|-<br />
| Sputnick || OCZ || Vertex 3 || 120 || 245 || 225 || 4600<br />
|-<br />
| ScottKidder || OCZ || Vertex Turbo || 30 || 49 || 115 || 2600<br />
|-<br />
| longint || OCZ || Vertex 2 || 240 || 852? || 241 || 3400<br />
|-<br />
| muflone || OCZ || Vertex 3 || 120 || 377 || 291 || 10300<br />
|-<br />
| bardo || OCZ || Agility 3 || 120 || 445 || 455 || 8200<br />
|-<br />
| Cirk || Samsung || MMCQE28GFMUP-MVA || 128 || 45 || 99 || 2300<br />
|-<br />
| skylinux || Samsung || 470 || 64 || 188 || 204 || 1000<br />
|-<br />
| kevincodux || Samsung || 830 || 128 || 313 || 525 || 9000<br />
|-<br />
| Earlz || Samsung || 840 || 250 || 242 || 282 || 9800<br />
|-<br />
| Ricky || Samsung || 840 evo|| 128 || 223 || 281 || 2200<br />
|-<br />
| wzyboy || Samsung || 840 Pro || 256 || 481 || 547 || 7100<br />
|-<br />
| Dani || Sandisk || Extreme || 240 || 481 || 414 || 6000<br />
|-<br />
| kozaki || Sandisk || Extreme || 120 || 458 || 403 || 8200<br />
|-<br />
| Roshless || Sandisk || Ultra Plus || 64 || 150 || 193 || 1500<br />
|- <br />
| Fraoch || Seagate || 600 || 240 || 432 || 526 || 3700<br />
|-<br />
| Artsibash || Kingston || HyperX || 120 || 451 || 431 || 8600<br />
|- <br />
| WonderWoofy || Kingston || HyperX 3k || 120 || 518 || 316 || 7200<br />
|-<br />
| Tuxe || Kingston || SSDNow V+100 || 128 || 110 || 232 || 3300<br />
|-<br />
| Ricky || Kingston || SSDNow V300 || 128 || 216 || 234 || 2400<br />
|-<br />
| thof || Kingston || SNV425-S2BD || 128 || 164 || 260 || 3000<br />
|-<br />
| WonderWoofy || Mushkin || Atlas (mSATA II) || 128 || 262 || 242 || 7300<br />
|-<br />
| AleksMK || Liteon || M3S || 256 || 336 || 432 || 4200<br />
|-<br />
| AsmundEr || WD mechanical drive || over gigE network (NFS) || 3000 || 48 || 117 || 7700<br />
|}<br />
<br />
=== Baseline: mechanical drive over ethernet ===<br />
*HDD: WD AV-GP 3TB (SATA 2)<br />
*Model number: WD30EURS<br />
*Firmware version: ?<br />
*Capacity: 2.7 TB<br />
*User: AsmundEr<br />
*Kernel: 3.9.9<br />
*Filesystem: ZFS (native) with mirroring onto two drives (i.e. RAID-1)<br />
*Notes: filesystem mounted over gigabit LAN network using NFSv4.<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 22.2138 s, 48.3 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 9.20926 s, 117 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.13901 s, 7.7 GB/s<br />
<br />
=== Corsair ===<br />
==== Corsair Force 3 ====<br />
*SSD: Corsair Force 3 120gb (SATA 3)<br />
*Model Number: Corsair Force 3 SSD<br />
*Firmware Version: 1.3.3 <br />
*Capacity: 120 GB<br />
*User: bserem<br />
*Kernel: 3.4.9<br />
*Filesystem: BTRFS<br />
*Notes: , Systemd, UEFI (with a small FAT uefi partition at the beggining of the disk)<br />
<br />
# hdparm -Tt /dev/sda<br />
/dev/sda:<br />
Timing cached reads: 28232 MB in 2.00 seconds = 14137.02 MB/sec<br />
Timing buffered disk reads: 1164 MB in 3.01 seconds = 387.33 MB/sec<br />
<br />
Minimum Read Rate: 388.04 MB/s<br />
Maximum Read Rate: 387.13 MB/s<br />
Average Read Rate: 387.252 MS/s<br />
<br />
<br />
=== Crucial ===<br />
==== Crucial C300 ====<br />
*SSD: Crucial C300 (SATA 3: 6Gb/s)<br />
*Model Number: CTFDDAC128MAG-1G1<br />
*Capacity: 128 GB<br />
*User: jac<br />
<br />
# hdparm -Tt /dev/sdb<br />
/dev/sda:<br />
Timing cached reads: 24112 MB in 2.00 seconds = 12072.84 MB/sec<br />
Timing buffered disk reads: 1056 MB in 3.00 seconds = 351.58 MB/sec<br />
<br />
Minimum Read Rate: 350.88 MB/s<br />
Maximum Read Rate: 351.58 MB/s<br />
Average Read Rate: 351.264 MB/s<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 7.77883 s, 138 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 2.88752 s, 372 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.164471 s, 6.5 GB/s<br />
<br />
==== Crucial M4 ====<br />
*SSD: Crucial M4 (SATA 3: 6Gb/s)<br />
*Model Number: M4-CT128M4SSD2 (Firmware: 0009)<br />
*Capacity: 128 GB<br />
*User: lynix<br />
*Filesystem: ext4 on LVM<br />
*Notes: connected to SATAII 3Gb/s port while benchmarking. firmware matters!<br />
<br />
# hdparm -Tt /dev/sde<br />
/dev/sde:<br />
Timing cached reads: 19094 MB in 2.00 seconds = 9559.40 MB/sec<br />
Timing buffered disk reads: 786 MB in 3.00 seconds = 261.63 MB/sec<br />
<br />
Minimum Read Rate: 271.7 MB/s<br />
Maximum Read Rate: 381.7 MB/s<br />
Average Read Rate: 279.0 MB/s<br />
<br />
Minimum Write Rate: 58.6 MB/s<br />
Maximum Write Rate: 258.9 MB/s<br />
Average Write Rate: 194.8 MB/s<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 5.57478 s, 193 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 4.00688 s, 268 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.157567 s, 6.8 GB/s<br />
<br />
*SSD: Crucial M4 (SATA III)<br />
*Model Number: M4-CT064M4SSD2<br />
*Firmware Version: 070H<br />
*Capacity: 64 GB<br />
*Controller: AMD SB950<br />
*User: Fraoch<br />
*Kernel: 3.8.0<br />
*Filesystem: ext4<br />
<br />
# hdparm -Tt /dev/sdb<br />
Timing cached reads: 7532 MB in 2.00 seconds = 3767.26 MB/sec<br />
Timing buffered disk reads: 1294 MB in 3.00 seconds = 431.20 MB/sec<br />
<br />
Average Read Rate: 506.9 MB/s<br />
Average Access Time: 0.08 ms<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 9.44004 s, 114 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 2.41524 s, 445 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.295721 s, 3.6 GB/s<br />
<br />
=== Intel ===<br />
==== Intel 310 Soda Creek ====<br />
*SSD: Intel 310 Soda Creek<br />
*Model Number: SSDMAEMC040G2<br />
*Firmware Version: 2CV1023M<br />
*Capacity: 40 GB<br />
*User: dundee<br />
*Filesystem: ext4<br />
<br />
# hdparm -Tt /dev/sdb<br />
/dev/sdb:<br />
Timing cached reads: 6278 MB in 2.00 seconds = 3141.39 MB/sec<br />
Timing buffered disk reads: 784 MB in 3.00 seconds = 260.96 MB/sec<br />
<br />
Minimum Read Rate: 189.7 MB/s<br />
Maximum Read Rate: 281.1 MB/s<br />
Average Read Rate: 277.1 MS/s<br />
Minimum Write Rate: 30.3 MB/s<br />
Maximum Write Rate: 44.6 MB/s<br />
Average Write Rate: 43.8 MS/s<br />
<br />
Average Access Time 0.1 ms<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 24.3013 s, 44.2 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 5.45325 s, 197 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.255569 s, 4.2 GB/s<br />
<br />
==== Intel 330 ====<br />
*SSD: Intel 330<br />
*Model Number: SSDSC2CT120A3<br />
*Firmware Version: 300i<br />
*Capacity: 120 GB<br />
*User: bugflux<br />
*Filesystem: ext4<br />
*'''Note''': Sata II computer<br />
<br />
# hdparm -tT /dev/sda<br />
/dev/sda:<br />
Timing cached reads: 9222 MB in 2.00 seconds = 4612.61 MB/sec<br />
Timing buffered disk reads: 672 MB in 3.01 seconds = 223.40 MB/sec<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 24.3013 s, 44.2 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 4.43827 s, 242 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.240778 s, 4.5 GB/s<br />
<br />
==== Intel X18-M (G2) ====<br />
*SSD: Intel X18-M Generation 2<br />
*Model Number: SSDSA1M1602GN<br />
*Capacity: 160 GB<br />
*User: Cirk<br />
<br />
# hdparm -Tt /dev/sda<br />
Timing cached reads: 2826 MB in 2.00 seconds = 1414.39 MB/sec<br />
Timing buffered disk reads: 694 MB in 3.00 seconds = 231.14 MB/sec<br />
<br />
Minimum Read Rate: 216.1 MB/s<br />
Maximum Read Rate: 283.5 MB/s<br />
Average Read Rate: 271.2 MB/s<br />
Average Access Time 0.1 ms<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 10.4608 s, 103 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 4.0866 s, 263 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.403244 s, 2.7 GB/s<br />
<br />
==== Intel X25-M (G2) ====<br />
*SSD: Intel X25-M Generation 2<br />
*Model Number: SSDSA2MH080G2R5<br />
*Capacity: 80 GB<br />
*User: Graysky<br />
<br />
# hdparm -Tt /dev/sdb<br />
/dev/sdb:<br />
Timing cached reads: 15644 MB in 1.99 seconds = 7845.48 MB/sec<br />
Timing buffered disk reads: 788 MB in 3.00 seconds = 262.52 MB/sec<br />
<br />
Minimum Read Rate: 253.6 MB/s<br />
Maximum Read Rate: 286.1 MB/s<br />
Average Read Rate: 282.6 MB/s<br />
Average Access Time 0.1 ms<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 13.3236 s, 80.6 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 4.00297 s, 268 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.169713 s, 6.3 GB/s<br />
<br />
==== Intel X25-M (G2) ====<br />
*SSD: Intel X25-M Generation 2<br />
*Model Number: SSDSA2M160G2GC<br />
*Capacity: 160 GB<br />
*User: fackamato<br />
<br />
# hdparm -Tt /dev/sda<br />
Timing cached reads: 2890 MB in 2.00 seconds = 1445.86 MB/sec<br />
Timing buffered disk reads: 738 MB in 3.00 seconds = 245.69 MB/sec<br />
<br />
Minimum Read Rate: 244.3 MB/s<br />
Maximum Read Rate: 278.6 MB/s<br />
Average Read Rate: 273.3 MB/s<br />
Average Access Time 0.1 ms<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 10.8582 s, 98.9 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 4.09679 s, 262 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.363709 s, 3.0 GB/s<br />
<br />
==== Intel X25-M (G2) ====<br />
*SSD: Intel X25-M Generation 2<br />
*Model Number: SSDSA2M080G2C<br />
*Capacity: 80 GB<br />
*User: Cirk<br />
<br />
# hdparm -Tt /dev/sda<br />
Timing cached reads: 9384 MB in 2.00 seconds = 4694.29 MB/sec<br />
Timing buffered disk reads: 808 MB in 3.01 seconds = 268.64 MB/sec<br />
<br />
Minimum Read Rate: 229.9 MB/s<br />
Maximum Read Rate: 281.6 MB/s<br />
Average Read Rate: 272.4 MB/s<br />
Average Access Time 0.1 ms<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 15.1671 s, 70.8 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 5.15237 s, 208 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.256211 s, 4.2 GB/s<br />
<br />
==== Intel X25-M (G2) ====<br />
*SSD: Intel X25-M Generation 2<br />
*Model Number: SSDSA2MH120G2K5<br />
*Capacity: 120 GB<br />
*User: timo.hardebusch<br />
<br />
# hdparm -Tt /dev/sdb<br />
/dev/sdb:<br />
Timing cached reads: 4358 MB in 2.00 seconds = 2178.89 MB/sec<br />
Timing buffered disk reads: 752 MB in 3.01 seconds = 250.07 MB/sec<br />
<br />
Minimum Read Rate: 259.1 MB/s<br />
Maximum Read Rate: 283.3 MB/s<br />
Average Read Rate: 280.6 MB/s<br />
Average Access Time 0.1 ms<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 10.1452 s, 106 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 4.05181 s, 265 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.369308 s, 2.9 GB/s<br />
<br />
=== OCZ ===<br />
==== OCZ-VERTEX 4 128 GB ====<br />
*SSD:OCZ Vertex 4<br />
*Model Number: VTX4-25SAT3<br />
*Firmware Version: 1.5<br />
*Capacity: 128 GB<br />
*Controller: Marvell Technology Group Ltd. 88SE9128 PCIe SATA 6 Gb/s RAID controller (rev 11)<br />
*Kernel: 3.6.11-1<br />
*User: Musikolo<br />
*Notes: <br />
** Filesystem: ext4 with options ''defaults,relatime,discard''. <br />
** Partition: aligned (fist sector 2048 / 1MiB free space at the beginning). Additional info [https://bbs.archlinux.org/viewtopic.php?pid=1211245#p1211245 here].<br />
** Scheduler: deadline. Additional info [https://wiki.archlinux.org/index.php/Solid_State_Drives#Using_udev_for_one_device_or_HDD.2FSSD_mixed_environment here].<br />
<br />
# hdparm -Tt /dev/sda<br />
/dev/sda:<br />
Timing cached reads: 7752 MB in 2.00 seconds = 3877.19 MB/sec<br />
Timing buffered disk reads: 1122 MB in 3.00 seconds = 373.78 MB/sec<br />
<br />
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 4.60766 s, 233 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 2.74071 s, 392 MB/s<br />
<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.302118 s, 3.6 GB/s<br />
<br />
==== OCZ-VERTEX 4 128 GB ====<br />
*SSD:OCZ Vertex 4<br />
*Model Number: VTX4-25SAT3 - '''firmware 1.5'''<br />
*Capacity: 128 GB<br />
*User: [[User:Graysky]]<br />
===== In SATA 6.0 Gb/s Controller =====<br />
# hdparm -Tt /dev/sda<br />
<br />
/dev/sda:<br />
Timing cached reads: 33756 MB in 2.00 seconds = 16902.49 MB/sec<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 2.9279 s, 367 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 2.49942 s, 430 MB/s<br />
<br />
===== In SATA 3.0 Gb/s Controller =====<br />
# hdparm -Tt /dev/sda<br />
<br />
/dev/sda:<br />
Timing cached reads: 15842 MB in 2.00 seconds = 7930.79 MB/sec<br />
Timing buffered disk reads: 814 MB in 3.00 seconds = 271.02 MB/sec<br />
<br />
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 4.28493 s, 251 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 3.78546 s, 284 MB/s<br />
<br />
==== OCZ-VERTEX 60gb ====<br />
*SSD:OCZ-VERTEX<br />
*Model Number:Firmware 1.5<br />
*Capacity: 60 GB<br />
*User:Surfed<br />
<br />
# hdparm -Tt /dev/sda<br />
/dev/sda:<br />
Timing cached reads: 16306 MB in 2.00 seconds = 8162.55 MB/sec<br />
Timing buffered disk reads: 646 MB in 3.00 seconds = 215.09 MB/sec<br />
<br />
<br />
Minimum Read Rate: 226.7 MB/s<br />
Maximum Read Rate: 275.2 MB/s<br />
Average Read Rate: 256.9 MB/s<br />
Average Access Time 0.1 ms<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 7.5581 s, 142 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 4.55881 s, 236 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.205299 s, 5.2 GB/s<br />
<br />
==== OCZ-VERTEX3 120 ====<br />
*SSD:OCZ-VERTEX3<br />
*Firmware Version:<br />
*Capacity: 6Gb/s SATA III<br />
*User:[[User:pingpong]]<br />
<br />
# hdpram -Tt /dev/sda<br />
<br />
/dev/sda:<br />
Timing cached reads: 11180 MB in 2.00 seconds = 5594.15 MB/sec<br />
Timing buffered disk reads: 736 MB in 3.00 seconds = 245.27 MB/sec<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 4.20024 s, 256 MB/s<br />
<br />
#echo 3 > /proc/sys/vm/drop_caches<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 4.12454 s, 260 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.172948 s, 6.2 GB/s<br />
<br />
==== OCZ-VERTEX3 120GO ====<br />
*SSD:OCZ-VERTEX3<br />
*Firmware Version:2.06<br />
*Capacity: 6Gb/s SATA III<br />
*User:[[User:Sputnick]]<br />
*Notes: tested on '''SATA II 3Gb/s Dell Optiplex 780 motherboard''' 0C27VV <br />
<br />
# hdparm -Tt /dev/sdc<br />
<br />
/dev/sdc:<br />
Timing cached reads: 13702 MB in 2.00 seconds = 6859.89 MB/sec<br />
Timing buffered disk reads: 644 MB in 3.00 seconds = 214.40 MB/sec<br />
<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 enregistrements lus<br />
1024+0 enregistrements écrits<br />
1073741824 octets (1,1 GB) copiés, 4,37831 s, 245 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 enregistrements lus<br />
1024+0 enregistrements écrits<br />
1073741824 octets (1,1 GB) copiés, 4,76932 s, 225 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 enregistrements lus<br />
1024+0 enregistrements écrits<br />
1073741824 octets (1,1 GB) copiés, 0,234682 s, 4,6 GB/s<br />
<br />
==== OCZ-VERTEX-TURBO 30gb ====<br />
*SSD:OCZ-VERTEX-TURBO<br />
*Model Number:Firmware 1.5<br />
*Capacity: 30 GB<br />
*User:ScottKidder<br />
<br />
# hdparm -Tt /dev/sda<br />
/dev/sda:<br />
Timing cached reads: 6286 MB in 2.00 seconds = 3149.62 MB/sec<br />
Timing buffered disk reads: 630 MB in 3.01 seconds = 209.10 MB/sec<br />
<br />
Minimum Read Rate: 211.8 MB/s<br />
Maximum Read Rate: 254.1 MB/s<br />
Average Read Rate: 249.2 MB/s<br />
Average Access Time 0.1 ms<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 21.5437 s, 49.8 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 9.34704 s, 115 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.40667 s, 2.6 GB/s<br />
<br />
==== OCZ-VERTEX2 240GB ====<br />
*SSD: OCZ<br />
*Model Number: Vertex2<br />
*Capacity: 240GB<br />
*User: longint<br />
*Filesystem: btrfs compression=lzo,space_cache<br />
<br />
# hdparm -Tt /dev/sda<br />
/dev/sda:<br />
Timing cached reads: 10972 MB in 2.00 seconds = 5489.70 MB/sec<br />
Timing buffered disk reads: 648 MB in 3.00 seconds = 215.96 MB/sec<br />
<br />
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 1.26013 s, 852 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 4.45112 s, 241 MB/s<br />
<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.320492 s, 3.4 GB/s<br />
<br />
==== OCZ-VERTEX3 120GB ====<br />
*SSD:OCZ-VERTEX3 SATA III<br />
*Firmware Version:2.13<br />
*Capacity: 120 GB<br />
*Filesystem: ext4 with discard and commit=60<br />
*[[User:muflone]]<br />
<br />
# hdparm -Tt /dev/sdc<br />
/dev/sdc:<br />
Timing cached reads: 23870 MB in 2.00 seconds = 11950.12 MB/sec<br />
Timing buffered disk reads: 866 MB in 3.00 seconds = 288.36 MB/sec<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 2.85159 s, 377 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 3.6931 s, 291 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.10383 s, 10.3 GB/s<br />
<br />
==== OCZ-AGILITY3 120GB ====<br />
*SSD:OCZ-AGILITY3 SATA III<br />
*Firmware Version:2.15<br />
*Capacity: 120 GB<br />
*Filesystem: ext4 with discard<br />
*[[User:bardo]]<br />
<br />
# hdparm -Tt /dev/sda<br />
/dev/sda:<br />
Timing cached reads: 27738 MB in 2.00 seconds = 13889.38 MB/sec<br />
Timing buffered disk reads: 1158 MB in 3.01 seconds = 385.08 MB/sec<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 2.41537 s, 445 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 2.35961 s, 455 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.130664 s, 8.2 GB/s<br />
<br />
=== Samsung ===<br />
==== SAMSUNG 128GB / SATAII ====<br />
*SSD: SAMSUNG 128GB / SATAII<br />
*Model Number: MMCQE28GFMUP-MVA<br />
*Capacity: 128 GB<br />
*User: Cirk<br />
<br />
# hdparm -Tt /dev/sda<br />
Timing cached reads: 2612 MB in 2.00 seconds = 1307.40 MB/sec<br />
Timing buffered disk reads: 294 MB in 3.01 seconds = 97.67 MB/sec<br />
<br />
Minimum Read Rate: 108.7 MB/s<br />
Maximum Read Rate: 114.5 MB/s<br />
Average Read Rate: 113.7 MB/s<br />
Average Access Time 0.2 ms<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 23.7352 s, 45.2 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 10.7563 s, 99.8 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.464824 s, 2.3 GB/s<br />
<br />
==== SAMSUNG 470 64GB ====<br />
*SSD: SAMSUNG 470 64GB<br />
*Model Number: MZ-5PA064/US<br />
*Firmware: AXM070Q1<br />
*Capacity: 64 GB<br />
*User: skylinux<br />
<br />
# hdparm -Tt /dev/sda<br />
Timing cached reads: 1736 MB in 2.00 seconds = 868.62 MB/sec<br />
Timing buffered disk reads: 516 MB in 3.00 seconds = 171.87 MB/sec<br />
<br />
Minimum Read Rate: 276.5 MB/s<br />
Maximum Read Rate: 278.8 MB/s<br />
Average Read Rate: 278.2 MB/s<br />
Average Access Time 0.2 ms<br />
<br />
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 5.69714 s, 188 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 5.25116 s, 204 MB/s<br />
<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 1.05824 s, 1.0 GB/s<br />
<br />
==== SAMSUNG 830 128GB SATAII ====<br />
*SSD: SAMSUNG 830 128GB<br />
*Model Number: MZ-7PC128D<br />
*Firmware: CXM03B1Q<br />
*Capacity: 128 GB<br />
*[[User: lockheed]]<br />
*Filesystem: ext4 defaults,noatime,commit=60<br />
*Notes: SATA II, partitions aligned, with swap, C2D 2.5 GHz<br />
<br />
# hdparm -Tt /dev/sda<br />
Timing cached reads: 12616 MB in 1.99 seconds = 6334.84 MB/sec<br />
Timing buffered disk reads: 802 MB in 3.01 seconds = 266.78 MB/sec<br />
<br />
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 4.82496 s, 226 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 3.84014 s, 280 MB/s<br />
<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.300189 s, 3.6 GB/s<br />
<br />
==== SAMSUNG 830 128GB ====<br />
*SSD: SAMSUNG 830 128GB<br />
*Model Number: MZ-7PC128D<br />
*Firmware: CXM03B1Q<br />
*Capacity: 128 GB<br />
*[[User: kevincodux]]<br />
*Filesystem: ext4,discard,noatime<br />
*Notes: SATAIII, partitions aligned and no swap<br />
<br />
# hdparm -Tt /dev/sda<br />
Timing cached reads: 22130 MB in 2.00 seconds = 11080.54 MB/sec<br />
Timing buffered disk reads: 1500 MB in 3.00 seconds = 499.38 MB/sec<br />
<br />
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 3.42567 s, 313 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 2.04691 s, 525 MB/s<br />
<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.119695 s, 9.0 GB/s<br />
<br />
==== SAMSUNG 830 256GB ====<br />
*SSD: SAMSUNG 830 256GB<br />
*Model Number: MZ-7PC256<br />
*Firmware Version: CXM03B1Q<br />
*Capacity: 256 GB<br />
*User: Revelation<br />
*Kernel: 3.5.4<br />
*Filesystem: ext4<br />
<br />
# hdparm -Tt /dev/sda<br />
Timing cached reads: 15888 MB in 2.00 seconds = 7952.13 MB/sec<br />
Timing buffered disk reads: 1464 MB in 3.00 seconds = 488.00 MB/sec<br />
<br />
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 3,15782 s, 340 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 2,08421 s, 515 MB/s<br />
<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.119695 s, 6.2 GB/s<br />
<br />
====SAMSUNG 840 120GB ====<br />
<br />
*SSD: Samsung SSD 840 Series<br />
*Model Number: 840 (non Pro)<br />
*Firmware Version: DXT08B0Q<br />
*Capacity: 120 GB<br />
*User: willybilly0101<br />
*Kernel: 3.10.10-1-ARCH #1 SMP PREEMPT<br />
*Filesystem: Btrfs - defaults,noatime,compress=lzo<br />
<br />
# hdparm -Tt /dev/sda<br />
/dev/sda:<br />
Timing cached reads: 11346 MB in 2.00 seconds = 5677.40 MB/sec<br />
Timing buffered disk reads: 1534 MB in 3.00 seconds = 511.24 MB/sec<br />
<br />
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 2.05137 s, 523 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 1.08204 s, 992 MB/s<br />
<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.232285 s, 4.6 GB/s<br />
<br />
<br />
==== SAMSUNG 840 250GB ====<br />
<br />
*SSD: SAMSUNG 840 250GB<br />
*Firmware: DXT07B0Q<br />
*Capacity: 250 GB<br />
*Filesystem: XFS(defaults,relatime,discard)<br />
*Kernel: 3.7.7-1-ARCH<br />
*Other details: SATA3 motherboard and hookups. Configured with hdparm to reserve 20% of the drive for over-provisioning<br />
*[[User: Earlz]]<br />
<br />
# hdparm -Tt /dev/sdc<br />
/dev/sdc:<br />
Timing cached reads: 21380 MB in 2.00 seconds = 10703.38 MB/sec<br />
Timing buffered disk reads: 810 MB in 3.00 seconds = 269.74 MB/sec<br />
<br />
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 4.44147 s, 242 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 3.80874 s, 282 MB/s<br />
<br />
Notes:<br />
Firmware updating was a pain because they don't make it obvious you can update without using their Windows-only magician software. Go [http://www.samsung.com/global/business/semiconductor/samsungssd/downloads.html here] for ISO images of the updates pre-made and ready to download.<br />
<br />
==== SAMSUNG 840 evo 128GB ====<br />
*SSD: SAMSUNG 840 evo 128GB<br />
*Model Number: Samsung SSD 840 EVO 120GB<br />
*Firmware: EXT0BB6Q<br />
*Capacity: 128 GB<br />
*[[User: Ricky]]<br />
*Filesystem: ext4,discard,noatime<br />
*Notes: SATAII, partitions aligned, 10% over-provisioning and no swap<br />
<br />
# hdparm -Tt /dev/sda<br />
Timing cached reads: 4588 MB in 1.99 seconds = 2299.87 MB/sec<br />
Timing buffered disk reads: 808 MB in 3.01 seconds = 268.80 MB/sec<br />
<br />
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 4.82364 s, 223 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 3.8185 s, 281 MB/s<br />
<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.496013 s, 2.2 GB/s<br />
<br />
==== SAMSUNG 840 Pro 256 GB ====<br />
* SSD: Samsung 840 Pro 256 GB<br />
* Model Number: Samsung SSD 840 PRO Series<br />
* Firmware Version: DXM05B0Q<br />
* Capacity: 256 GB<br />
* Controller: SATA III<br />
* User: wzyboy<br />
* Kernel: 3.13.5-1-ARCH<br />
* Filesystem: Ext4 on aligned GPT, "discard" parameter enabled, no swap<br />
* Platform: ThinkPad X240s, i7-4500U, 8 GiB RAM<br />
<br />
# hdparm -Tt /dev/sda<br />
/dev/sda:<br />
Timing cached reads: 19334 MB in 2.00 seconds = 9677.52 MB/sec<br />
Timing buffered disk reads: 1562 MB in 3.00 seconds = 520.56 MB/sec<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 Datensätze ein<br />
1024+0 Datensätze aus<br />
1073741824 Bytes (1,1 GB) kopiert, 2,23356 s, 481 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 Datensätze ein<br />
1024+0 Datensätze aus<br />
1073741824 Bytes (1,1 GB) kopiert, 1,96205 s, 547 MB/s<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 Datensätze ein<br />
1024+0 Datensätze aus<br />
1073741824 Bytes (1,1 GB) kopiert, 0,15168 s, 7,1 GB/s<br />
<br />
=== Sandisk ===<br />
==== Sandisk Extreme 240 GB ====<br />
*SSD: Sandisk Extreme (SATA 3: 6Gb/s)<br />
*Model Number: SDSSDX240GG25<br />
*Capacity: 240 GB<br />
*User: Dani<br />
<br />
# sudo hdparm -Tt /dev/sda<br />
/dev/sda:<br />
Timing cached reads: 11596 MB in 2.00 seconds = 5802.26 MB/sec<br />
Timing buffered disk reads: 1190 MB in 3.00 seconds = 396.16 MB/sec<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 2.23003 s, 481 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 2.5909 s, 414 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.177952 s, 6.0 GB/s<br />
<br />
==== Sandisk Extreme 120 GB ====<br />
* SSD: Sandisk Extreme 120 GB (SATA 3: 6 GB/s)<br />
* Model Number: SDSSDX-120G-G25<br />
* Firmware Version: R201<br />
* Capacity: 120 GB<br />
* User: ''hsngrms''<br />
* Kernel: 3.6.3-1-ARCH x86_64<br />
* Filesystem: EXT4<br />
<br />
# hdparm -Tt /dev/sda<br />
/dev/sda:<br />
Timing cached reads: 6824 MB in 2.00 seconds = 3413.53 MB/sec<br />
Timing buffered disk reads: 1332 MB in 3.00 seconds = 443.99 MB/sec <br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1,1 GB) copied, 2,44496 s, 439 MB/s <br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1,1 GB) copied, 2,64944 s, 405 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1,1 GB) copied, 0,163495 s, 6,6 GB/s<br />
<br />
* SSD: Sandisk Extreme 120 GB<br />
* Model Number: SDSSDX-120G-G25<br />
* Firmware Version: R211<br />
* Capacity: 120 GB<br />
* Controller: SATA controller: Intel Corporation 7 Series/C210 Series Chipset Family 6-port [AHCI mode] (rev 04)<br />
* User: kozaki<br />
* Kernel: 3.7.4-1-ARCH x86_64<br />
* Filesystem: EXT4 (Arch 201301 Default: fstab: default)<br />
* Notes: SataIII, GPT partitions aligned on sectors, LVM2 (--dataalignment 1m), cfq I/O scheduler, Asrock B75Pro mobo<br />
<br />
# hdparm -Tt /dev/sda<br />
/dev/sda:<br />
Timing cached reads: 16913 MB in 2.00 seconds = 8464.76 MB/sec<br />
Timing buffered disk reads: 1414 MB in 3.00 seconds = 470.85 MB/sec <br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1,1 GB) copied, 2.3301 s, 461.33 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1,1 GB) copied, 2.65322 s, 403.67 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1,1 GB) copied, 0.137885 s, 7.87 GB/s<br />
<br />
* Note: Same model and config, but with the Filesystem mount options and the deadline I/O scheduler<br />
* Filesystem: EXT4 (fstab: noatime,discard)<br />
<br />
# hdparm -Tt /dev/sda<br />
/dev/sda:<br />
Timing cached reads: 17162 MB in 2.00 seconds = 8588.88 MB/sec<br />
Timing buffered disk reads: 1416 MB in 3.00 seconds = 471.76 MB/sec <br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1,1 GB) copied, 2.3486 s, 458 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1,1 GB) copied, 2.6593 s, 403.33 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1,1 GB) copied, 0.1312 s, 8.2 GB/sec<br />
<br />
====Sandisk Ultra Plus 64 GB====<br />
<br />
*SSD: Sandisk Ultra Plus 64GB SATA3<br />
*Model Number: SDSSDHP-064G-G25<br />
*Capacity: 64 GB<br />
*User: Roshless<br />
*Kernel: 3.12.9-2-ck<br />
*Filesystem: ext4 - defaults,noatime,discard<br />
*Notes: deadline scheduler, Dell 0M7CYJ mobo, notebook<br />
<br />
# hdparm -Tt /dev/sda<br />
/dev/sda:<br />
Timing cached reads: 2116 MB in 2.00 seconds = 1058.95 MB/sec<br />
Timing buffered disk reads: 582 MB in 3.00 seconds = 193.84 MB/sec<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 7.17104 s, 150 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 5.5608 s, 193 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.707444 s, 1.5 GB/s<br />
<br />
=== Seagate ===<br />
==== 600 ====<br />
<br />
* SSD: Seagate 600<br />
* Model Number: ST240HM000<br />
* Firmware Version: C675<br />
* Capacity: 240 GB<br />
* Controller: AMD SB950<br />
* User: Fraoch<br />
* Kernel: 3.11.0<br />
* Filesystem: ext4<br />
<br />
# hdparm -Tt /dev/sda<br />
/dev/sda:<br />
Timing cached reads: 7436 MB in 2.00 seconds = 3719.76 MB/sec<br />
Timing buffered disk reads: 1526 MB in 3.00 seconds = 508.66 MB/sec<br />
<br />
Average read rate: 506.6 MB/s<br />
Average write rate: 299.3 MB/s<br />
Average access time: 0.13 ms<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 2.48651 s, 432 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 2.03941 s, 526 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.308517 s, 3.5 GB/s<br />
<br />
=== Kingston ===<br />
==== Kingston HyperX 120 GB ====<br />
*SSD: Kingston HyperX 120 GB<br />
*Model Number: SH100S3120G<br />
*Firmware: 320ABBF0<br />
*Capacity: 120 GB<br />
*User: Artsibash<br />
<br />
# hdparm -Tt /dev/sda<br />
Timing cached reads: 26564 MB in 2.00 seconds = 13296.53 MB/sec<br />
Timing buffered disk reads: 1130 MB in 3.00 seconds = 376.16 MB/sec<br />
<br />
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 2.37858 s, 451 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches <br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 2.48961 s, 431 MB/s<br />
<br />
# dd if=/tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.125463 s, 8.6 GB/s<br />
<br />
==== Kingston HyperX 3K 120GB ====<br />
*SSD: Kingston HyperX 3K 120GB (MLC/Intel synchronous ONFi NAND/LSI SandForce SF-2281 25nm controller/SATA3/2.5")<br />
*Model Number: SH103S3120G<br />
*Firmware: 501ABBF0<br />
*Capacity: 120 GB<br />
*Misc: Intel DQ77MK mobo SATA3 port, linux 3.5.4-1, ext4 (has_journal + discard,noatime)<br />
*[[User: MajorTom]]<br />
<br />
# hdparm -Tt /dev/sda<br />
Timing cached reads: 15382 MB in 2.00 seconds = 7702.01 MB/sec<br />
Timing buffered disk reads: 1442 MB in 3.00 seconds = 480.39 MB/sec<br />
<br />
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 2.06937 s, 519 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches <br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 2.58996 s, 415 MB/s<br />
<br />
# dd if=/tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.207434 s, 5.2 GB/s<br />
<br />
==== Kingston HyperX 3K 120GB ====<br />
*SSD: Kingston HyperX 3K 120GB<br />
*Model Number: SH103S3120G<br />
*Firmware: 503ABBF0<br />
*Capacity: 120 GB<br />
*Misc: SATA3 port, linux 3.6.4-1-ck, ext4 <br />
*User: WonderWoofy<br />
<br />
# hdparm -Tt /dev/sda<br />
/dev/sda:<br />
Timing cached reads: 16562 MB in 2.00 seconds = 8289.47 MB/sec<br />
Timing buffered disk reads: 1078 MB in 3.01 seconds = 358.53 MB/sec<br />
<br />
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 2.07445 s, 518 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches <br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 3.40264 s, 316 MB/s<br />
<br />
# dd if=/tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.149056 s, 7.2 GB/s<br />
<br />
==== Kingston SSDNow V+100 128 GB ====<br />
*SSD: Kingston SSDNow v+100 128 GB<br />
*Model Number: SVP100S2128G<br />
*Firmware: CJRA0202<br />
*Capacity: 128 GB<br />
*User: Tuxe<br />
<br />
# hdparm -Tt /dev/sda<br />
Timing cached reads: 11598 MB in 1.99 seconds = 5822.73 MB/sec<br />
Timing buffered disk reads: 598 MB in 3.01 seconds = 198.90 MB/sec<br />
<br />
Minimum Read Rate: 145.8 MB/s<br />
Maximum Read Rate: 259.2 MB/s<br />
Average Read Rate: 243.5 MB/s<br />
Average Access Time 0.1 ms<br />
<br />
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 9.74199 s, 110 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches <br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 4.62165 s, 232 MB/s<br />
<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.330142 s, 3.3 GB/s<br />
<br />
==== Kingston SSDNow V300 128 GB ====<br />
*SSD: Kingston SSDNow V100 128 GB<br />
*Model Number: SV300S37A120G<br />
*Firmware: 521ABBF0<br />
*Capacity: 128 GB<br />
*User: Ricky<br />
<br />
# hdparm -Tt /dev/sda<br />
/dev/sda:<br />
Timing cached reads: 4970 MB in 1.99 seconds = 2491.32 MB/sec<br />
Timing buffered disk reads: 660 MB in 3.01 seconds = 219.53 MB/sec<br />
<br />
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out <br />
1073741824 bytes (1.1 GB) copied, 4.96045 s, 216 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches <br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out <br />
1073741824 bytes (1.1 GB) copied, 4.58932 s, 234 MB/s<br />
<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out <br />
1073741824 bytes (1.1 GB) copied, 0.45147 s, 2.4 GB/s<br />
<br />
==== Kingston SNV425-S2BD 128GB ====<br />
*SSD: Kingston SNV425-S2BD/128GB<br />
*Model Number: SNV425S2128GB<br />
*Firmware: C09112a6<br />
*Capacity: 128 GB<br />
*User: thof<br />
*Filesystem: ext4<br />
*Kernel: 3.3.4<br />
<br />
# hdparm -Tt /dev/sda<br />
Timing cached reads: 3614 MB in 2.00 seconds = 1808.83 MB/sec<br />
Timing buffered disk reads: 736 MB in 3.01 seconds = 244.91 MB/sec<br />
<br />
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 6.5301 s, 164 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches <br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 4.1377 s, 260 MB/s<br />
<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.363142 s, 3.0 GB/s<br />
<br />
===Mushkin===<br />
==== Mushkin mSATA Atlas 128GB ====<br />
*SSD: Mushkin Atlas 128GB SATA III<br />
*Model Number: MKNSSDAT120GB-DX <br />
*Firmware: 504ABBF0<br />
*Capacity: 120 GB<br />
*Misc: SATA II Port (mSATA), linux 3.6.4-1-ck, ext4, Sandforce, <br />
*User: WonderWoofy<br />
<br />
# hdparm -Tt /dev/sda<br />
/dev/sdb:<br />
Timing cached reads: 16116 MB in 2.00 seconds = 8065.82 MB/sec<br />
Timing buffered disk reads: 458 MB in 3.00 seconds = 152.53 MB/sec<br />
<br />
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 4.09965 s, 262 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches <br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 4.4438 s, 242 MB/s<br />
<br />
# dd if=/tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.143544 s, 7.5 GB/s<br />
<br />
===Liteon===<br />
====Liteon M3S====<br />
*SSD: Liteon M3S 256GB SATA III<br />
*Model Number: LCT-256M3S <br />
*Firmware: VRDC<br />
*Capacity: 256 GB<br />
*User: AleksMK<br />
<br />
# hdparm -Tt /dev/sda<br />
/dev/sda:<br />
Timing cached reads: 8406 MB in 2.00 seconds = 4206.12 MB/sec<br />
Timing buffered disk reads: 1212 MB in 3.00 seconds = 403.81 MB/sec<br />
<br />
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 3.2338 s, 332 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches <br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 2.48531 s, 432 MB/s<br />
<br />
# dd if=/tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.24457 s, 4.4 GB/s<br />
<br />
<br />
===IBM===<br />
==== IBM MLC 128GB ====<br />
*[[User: darkol]]<br />
*SSD: IBM 128GB SATA 2.5" MLC HS Enterprise Value SSD<br />
*Model Number: 90Y8648<br />
*Firmware Version: <br />
*Capacity: 128 GB<br />
*User: darkol<br />
*Kernel:<br />
*Filesystem: ext4<br />
*System: IBM x3650 M4<br />
<br />
# RAID1<br />
# hdparm -Tt /dev/sda<br />
/dev/sda:<br />
Timing cached reads: 17260 MB in 2.00 seconds = 8642.01 MB/sec<br />
Timing buffered disk reads: 1262 MB in 3.00 seconds = 420.27 MB/sec<br />
<br />
# RAID5<br />
# hdparm -Tt /dev/sdb<br />
/dev/sda:<br />
Timing cached reads: 17108 MB in 2.00 seconds = 8565.69 MB/sec<br />
Timing buffered disk reads: 3986 MB in 3.00 seconds = 1328.38 MB/sec<br />
<br />
= Encrypted Partitions =<br />
<br />
This section should show some data for encrypted partitions.<br />
<br />
== dm-crypt with AES ==<br />
<br />
Please list your CPU and if you are using AES-NI. Without AES-NI support in the CPU, the processor will be the bottleneck long before you touch the >500MB/s SSD speeds. <br />
<br />
'''i7-620M Benchmark'''<br />
*~570 MB/s :With AES-NI<br />
*~100 MB/s :Without AES-NI<br />
<br />
'''i5-3210M'''<br />
*~500 MB/s :With AES-NI<br />
*~200 MB/s :Without AES-NI<br />
<br />
=== Crucial ===<br />
<br />
The crucial drive does not use any compression to reach its speeds, so it is expected to be fast.<br />
<br />
==== Crucial M4 256 Gb ====<br />
<br />
* User: crobe<br />
* Filesystem: ext4 on dm-crypt<br />
* Running Sata 6 Gbit/s on an older 3 Gbit/s controller<br />
* Comment: The drive is faster on writing ( on fresh space ), which has been observed on the internet. Maybe this is the maximum of my machine.<br />
<br />
# cryptsetup status<br />
type: LUKS1<br />
cipher: aes-xts-plain<br />
keysize: 256 bits<br />
<br />
# hdparm -Tt /dev/sda<br />
/dev/sda:<br />
Timing cached reads: 3012 MB in 2.00 seconds = 1507.62 MB/sec<br />
Timing buffered disk reads: 558 MB in 3.00 seconds = 185.93 MB/sec<br />
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 Datensätze ein<br />
1024+0 Datensätze aus<br />
1073741824 Bytes (1,1 GB) kopiert, 7,86539 s, 137 MB/s<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 Datensätze ein<br />
1024+0 Datensätze aus<br />
1073741824 Bytes (1,1 GB) kopiert, 9,78325 s, 110 MB/s<br />
<br />
=== OCZ ===<br />
<br />
The OCZ Drives use compression on Data, so with uncompressible encrypted Data, speeds are expected to be way lower. Still, seek times should be as low as ever and the drive shouldn't get slower when it gets full, so there should be enough speed.<br />
<br />
==== OCZ-VERTEX2 180GB ====<br />
<br />
* SSD: OCZ <br />
* Model Number: Vertex2 <br />
* Capacity: 180Gb <br />
* User: crobe<br />
* Filesystem: ext4 on dm-crypt with AES, essiv, sha256<br />
* The bottleneck for the read/write speeds is definately the drive<br />
<br />
# hdparm -Tt /dev/sda<br />
/dev/sda:<br />
Timing cached reads: 2842 MB in 2.00 seconds = 1422.61 MB/sec<br />
Timing buffered disk reads: 550 MB in 3.00 seconds = 183.26 MB/sec<br />
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 Datensätze ein<br />
1024+0 Datensätze aus<br />
1073741824 Bytes (1,1 GB) kopiert, 16,9194 s, 63,5 MB/s<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 Datensätze ein<br />
1024+0 Datensätze aus<br />
1073741824 Bytes (1,1 GB) kopiert, 14,5509 s, 73,8 MB/s<br />
<br />
Same values for bonnie++.<br />
<br />
=== Samsung ===<br />
<br />
==== SAMSUNG 470 128GB ====<br />
<br />
*SSD: SAMSUNG 470 128GB<br />
*Firmware: AXM09B1Q<br />
*Capacity: 128 GB<br />
*User: FredericChopin<br />
<br />
# cryptsetup status<br />
type: LUKS1<br />
cipher: aes-xts-plain<br />
keysize: 512 bits<br />
offset: 8192 sectors<br />
<br />
# hdparm -Tt /dev/sda<br />
/dev/sda:<br />
Timing cached reads: 3226 MB in 2.00 seconds = 1614.42 MB/sec<br />
Timing buffered disk reads: 570 MB in 3.00 seconds = 189.84 MB/sec<br />
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 9.62518 s, 112 MB/s<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 9.34282 s, 115 MB/s<br />
<br />
==== SAMSUNG 830 256GB ====<br />
<br />
*SSD: Samsung 830 256GB<br />
*Model Number: MZ-7PC256B/WW<br />
*Firmware Version: CXM03BQ1<br />
*Capacity: 256 GB<br />
*User: stefseel<br />
*Kernel: 3.4.6-1-ARCH (with aesni_intel module)<br />
*Filesystem: ext4 (relatime,discard) over LVM2 over dm-crypt/LUKS (allow-discards)<br />
*System: Lenovo ThinkPad T430 (i5-3210M)<br />
<br />
# hdparm -Tt /dev/sda<br />
/dev/sda:<br />
Timing cached reads: 15000 MB in 2.00 seconds = 7500 MB/sec<br />
Timing buffered disk reads: 1470 MB in 3.00 seconds = 490 MB/sec<br />
<br />
With default Arch settings with installed pm-utils: JOURNAL_COMMIT_TIME_AC=0, DRIVE_READAHEAD_AC=256<br />
<br />
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 3.62668 s, 300 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 4.07337 s, 170 MB/s<br />
<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.154298 s, 7.0 GB/s<br />
<br />
What annoyed me was the poor read performance. I observed that in battery mode with unplugged AC the read rate was 500 MB/s. I did some research and found out that pm-utils is to blame. In AC mode it sets journal commit time to zero and readahead to 256 whereas in battery mode it sets journal commit time to 600 and readahead to 3072. See scripts /usr/lib/pm-utils/power.d/journal-commit and /usr/lib/pm-utils/power.d/readahead. So I added a custom config to set journal commit time always to 600 and readahead always to 4096, the result made me happy :)<br />
<br />
# cat /etc/pm/config.d/config<br />
DRIVE_READAHEAD_AC=4096<br />
DRIVE_READAHEAD_BAT=4096<br />
JOURNAL_COMMIT_TIME_AC=600<br />
JOURNAL_COMMIT_TIME_BAT=600<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 2.15534 s, 500 MB/s<br />
<br />
However there is still an issue: after resuming from suspend read rate goes down to 270 MB/s.<br />
<br />
<br />
==== SAMSUNG 830 256GB ====<br />
*[[User: hunterthompson]]<br />
*SSD: SAMSUNG 830 256GB<br />
*Firmware: CXM03B1Q<br />
*Capacity: 256 GB<br />
*System: Thinkpad X230, 16GB PC-1600 CL9 Kingston HyperX<br />
*CPU: i7-3520M, AES-NI, Hyper-Threaded, 2.9GHz-3.6GHz, Steady 3.4GHz with all 4 threads 100%<br />
*Kernel: x86_64 linux-grsec 3.5.4-1-grsec (Desktop, Virt, Host, KVM, Security)<br />
*Encryption: Full Disk, LVM2 on LUKS dm-crypt, Allow-Discards<br />
*Cryptsetup: -h sha512 -c aes-xts-plain64 -y -s 512 luksFormat --align-payload=8192<br />
*Filesystem: mkfs.ext4 -b 4096 -E stride=128,stripe-width=128 /dev/mapper/VolGroup00-lvolhome<br />
*fstab: ext4,rw,noatime,nodiratime,discard,stripe=128,data=ordered,errors=remount-ro<br />
*Notes: SATAIII, partitions aligned and no swap<br />
<br />
% dd bs=1M count=1024 if=7600_Retail_Ultimate_DVD.iso of=/dev/null conv=fdatasync<br />
dd: fsync failed for ‘/dev/null’: Invalid argument<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 3.42075 s, 314 MB/s<br />
<br />
% dd bs=1M count=1024 if=/dev/zero of=test conv=fdatasync<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 3.48574 s, 308 MB/s<br />
<br />
% dd bs=1M count=1024 if=/dev/zero of=test conv=fdatasync<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 3.45361 s, 311 MB/s<br />
<br />
% dd bs=1M count=1024 if=/dev/zero of=test conv=fdatasync<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 3.44276 s, 312 MB/s<br />
<br />
== Truecrypt ==<br />
<br />
= Comparison - high end SCSI RAID 0 hard drive benchmark =<br />
== LSI 320-2X Megaraid SCSI == <br />
<br />
* SSD: N/A<br />
* Model Number: LSI MegaRAID 320-2x RAID 0 x 2 Seagate Cheetah ST373455LC 15,000 RPM 146GB drives<br />
* Capacity: 292Gb <br />
* User: rabinnh<br />
* Filesystem: ext4 on x86_64<br />
* Comment: No, this is not an SSD, but Googlers should have a reasonable basis for comparison to a high end hard drive system, and you won't get much higher end for an individual workstation. The cost of this disk subsystem is conservatively $760, and it gives at best half the performance of most SSDs.<br />
<br />
<pre>$sudo hdparm -Tt /dev/sda2<br />
/dev/sda2:<br />
Timing cached reads: 6344 MB in 2.00 seconds = 3174.02 MB/sec<br />
Timing buffered disk reads: 442 MB in 3.01 seconds = 146.97 MB/sec</pre><br />
<br />
<pre>$dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 7.13482 s, 150 MB/s<br />
</pre><br />
<pre><br />
$echo 3 > /proc/sys/vm/drop_caches<br />
$dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 7.24267 s, 148 MB/s</pre><br />
<br />
<pre>$dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.459814 s, 2.3 GB/s</pre></div>Wzyboyhttps://wiki.archlinux.org/index.php?title=Benchmarking/Data_storage_devices&diff=302450Benchmarking/Data storage devices2014-02-28T16:51:07Z<p>Wzyboy: /* Samsung */</p>
<hr />
<div>[[Category:Storage]]<br />
{{Article summary start}}<br />
{{Article summary text|This article covers several Linux-native apps that benchmark I/O devices such as HDDs, SSDs, USB thumb drives, etc. There is also a "database" section specific to SSDs meant to capture user-entered benchmark results.}}<br />
{{Article summary heading|Related Articles}}<br />
{{Article summary wiki|Solid State Drives}}<br />
{{Article summary wiki|Benchmarking}}<br />
{{Article summary end}}<br />
<br />
==Introduction==<br />
Several I/O benchmark options exist under Linux.<br />
<br />
* Using hddparm with the -Tt switch, one can time sequential reads. This method is '''independent''' of partition alignment!<br />
* There is a graphical benchmark called gnome-disks contained in the {{pkg|gnome-disk-utility}} package that will give min/max/ave reads along with ave access time and a nice graphical display. This method is '''independent''' of partition alignment!'''<br />
* The dd utility can be used to measure both reads and writes. This method is '''dependent''' on partition alignment! In other words, if you failed to properly align your partitions, this fact will be seen here since you're writing and reading to a mounted filesystem.<br />
* [[Benchmarking#Bonnie.2B.2B|Bonnie++]]<br />
<br />
=== Using hdparm ===<br />
<br />
# hdparm -Tt /dev/sdX<br />
/dev/sdX:<br />
Timing cached reads: x MB in y seconds = z MB/sec<br />
Timing buffered disk reads: x MB in y seconds = z MB/sec<br />
<br />
{{Note|One should run the above command 4-5 times and manually average the results for an accurate evaluation of read speed per the hddparm man page.}}<br />
<br />
=== Using gnome-disks ===<br />
<br />
# gnome-disks<br />
<br />
Users will need to navigate through the GUI to the benchmark button ("More actions..." => "Benchmark Volume..."). [http://imgur.com/Ayv1B Example]<br />
<br />
=== Using systemd-analyze ===<br />
<br />
systemd-analyze plot > boot.svg<br />
<br />
Will plot a detailed graphic with the boot sequence: kernel time, userspace time, time taken by each service. [http://imgur.com/4ywt1 Example]<br />
<br />
=== Using dd ===<br />
<br />
{{Note|This method requires the command to be executed from a mounted partition on the device of interest!}}<br />
<br />
First, enter a directory on the SSD with at least 1.1 GB of free space (and one that obviously gives your user wrx permissions) and write a test file to measure write speeds and to give the device something to read:<br />
<br />
$ cd /path/to/SSD<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
w bytes (x GB) copied, y s, z MB/s<br />
<br />
Next, clear the buffer-cache to accurately measure read speeds directly from the device:<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
w bytes (x GB) copied, y s, z MB/s<br />
<br />
Now that the last file is in the buffer, repeat the command to see the speed of the buffer-cache:<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
w bytes (x GB) copied, y s, z GB/s<br />
<br />
{{Note|One should run the above command 4-5 times and manually average the results for an accurate evaluation of the buffer read speed.}}<br />
<br />
Finally, delete the temp file<br />
$ rm tempfile<br />
==== Caveats ====<br />
Some SSD controllers have compression hardware, which may skew benchmark results. See http://www.pugetsystems.com/labs/articles/SSDs-Advertised-vs-Actual-Performance-179/<br />
=== Model Specific Data ===<br />
Please contribute to this section using the template below to post results obtained.<br />
<br />
See [http://www.anandtech.com/bench/SSD/65 here] for a nice database of benchmarks.<br />
<br />
=== Template ===<br />
*SSD:<br />
*Model Number:<br />
*Firmware Version:<br />
*Capacity: x GB<br />
*Controller:<br />
*User:<br />
*Kernel:<br />
[*Filesystem: write something about your FS, optional]<br />
[*Notes: additional Notes, optional]<br />
<br />
# hdparm -Tt /dev/sdx<br />
<br />
Minimum Read Rate: x MB/s<br />
Maximum Read Rate: x MB/s<br />
Average Read Rate: x MS/s<br />
Average Access Time x ms<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
<br />
== Results ==<br />
<br />
=== Table ===<br />
<br />
All values are taken from the [https://wiki.archlinux.org/index.php/SSD_Benchmarking#Using_dd ''dd'' benchmark]. This is just an overview and has no scientific use.<br />
<br />
{| class="wikitable" border="1" cellpadding="5" cellspacing="0"<br />
! User !! Vendor !! Model !! Capacity [GB] !! Write [MB/sec] !! Read [MB/sec] !! Re-Read [MB/sec]<br />
|-<br />
| jac || Crucial || C300 || 128 || 138 || 372 || 6500<br />
|-<br />
| Fraoch || Crucial || M4 || 64 || 114 || 445 || 3800<br />
|-<br />
| lynix || Crucial || M4 || 128 || 193 || 268 || 6800<br />
|-<br />
| wzyboy || Crucial || M4 || 64 || 113 || 276 || 3400<br />
|-<br />
| dundee || Intel || 310 Soda Creek || 40 || 44.2 || 197 || 4200<br />
|-<br />
| bugflux || Intel || 330 || 120 || 44.2 || 242 || 4500<br />
|-<br />
| Cirk || Intel || X18-M (G2) || 160 || 103 || 263 || 2700<br />
|-<br />
| Graysky || Intel || X25-M (G2) || 80 || 80.6 || 268 || 6300<br />
|-<br />
| fackamato || Intel || X25-M (G2) || 160 || 98 || 262 || 3000<br />
|-<br />
| Cirk || Intel || X25-M (G2) || 80 || 70 || 208 || 4200<br />
|-<br />
| timo.hardebusch || Intel || X25-M (G2) || 120 || 106 || 265 || 2900<br />
|-<br />
| Musikolo || OCZ || Vertex 4 SATA 3 || 128 || 233 || 392 || 3600<br />
|-<br />
| Graysky || OCZ || Vertex 4 SATA 3 || 128 || 228 || 394 || -<br />
|-<br />
| Graysky || OCZ || Vertex 4 SATA 2 || 128 || 251 || 284 || -<br />
|-<br />
| Surfed || OCZ || Vertex || 60 || 142 || 236 || 5200<br />
|-<br />
| Sputnick || OCZ || Vertex 3 || 120 || 245 || 225 || 4600<br />
|-<br />
| ScottKidder || OCZ || Vertex Turbo || 30 || 49 || 115 || 2600<br />
|-<br />
| longint || OCZ || Vertex 2 || 240 || 852? || 241 || 3400<br />
|-<br />
| muflone || OCZ || Vertex 3 || 120 || 377 || 291 || 10300<br />
|-<br />
| bardo || OCZ || Agility 3 || 120 || 445 || 455 || 8200<br />
|-<br />
| Cirk || Samsung || MMCQE28GFMUP-MVA || 128 || 45 || 99 || 2300<br />
|-<br />
| skylinux || Samsung || 470 || 64 || 188 || 204 || 1000<br />
|-<br />
| kevincodux || Samsung || 830 || 128 || 313 || 525 || 9000<br />
|-<br />
| Earlz || Samsung || 840 || 250 || 242 || 282 || 9800<br />
|-<br />
| Ricky || Samsung || 840 evo|| 128 || 223 || 281 || 2200<br />
|-<br />
| wzyboy || Samsung || 840 Pro || 256 || 481 || 547 || 7100<br />
|-<br />
| Dani || Sandisk || Extreme || 240 || 481 || 414 || 6000<br />
|-<br />
| kozaki || Sandisk || Extreme || 120 || 458 || 403 || 8200<br />
|-<br />
| Roshless || Sandisk || Ultra Plus || 64 || 150 || 193 || 1500<br />
|- <br />
| Fraoch || Seagate || 600 || 240 || 432 || 526 || 3700<br />
|-<br />
| Artsibash || Kingston || HyperX || 120 || 451 || 431 || 8600<br />
|- <br />
| WonderWoofy || Kingston || HyperX 3k || 120 || 518 || 316 || 7200<br />
|-<br />
| Tuxe || Kingston || SSDNow V+100 || 128 || 110 || 232 || 3300<br />
|-<br />
| Ricky || Kingston || SSDNow V300 || 128 || 216 || 234 || 2400<br />
|-<br />
| thof || Kingston || SNV425-S2BD || 128 || 164 || 260 || 3000<br />
|-<br />
| WonderWoofy || Mushkin || Atlas (mSATA II) || 128 || 262 || 242 || 7300<br />
|-<br />
| AleksMK || Liteon || M3S || 256 || 336 || 432 || 4200<br />
|-<br />
| AsmundEr || WD mechanical drive || over gigE network (NFS) || 3000 || 48 || 117 || 7700<br />
|}<br />
<br />
=== Baseline: mechanical drive over ethernet ===<br />
*HDD: WD AV-GP 3TB (SATA 2)<br />
*Model number: WD30EURS<br />
*Firmware version: ?<br />
*Capacity: 2.7 TB<br />
*User: AsmundEr<br />
*Kernel: 3.9.9<br />
*Filesystem: ZFS (native) with mirroring onto two drives (i.e. RAID-1)<br />
*Notes: filesystem mounted over gigabit LAN network using NFSv4.<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 22.2138 s, 48.3 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 9.20926 s, 117 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.13901 s, 7.7 GB/s<br />
<br />
=== Corsair ===<br />
==== Corsair Force 3 ====<br />
*SSD: Corsair Force 3 120gb (SATA 3)<br />
*Model Number: Corsair Force 3 SSD<br />
*Firmware Version: 1.3.3 <br />
*Capacity: 120 GB<br />
*User: bserem<br />
*Kernel: 3.4.9<br />
*Filesystem: BTRFS<br />
*Notes: , Systemd, UEFI (with a small FAT uefi partition at the beggining of the disk)<br />
<br />
# hdparm -Tt /dev/sda<br />
/dev/sda:<br />
Timing cached reads: 28232 MB in 2.00 seconds = 14137.02 MB/sec<br />
Timing buffered disk reads: 1164 MB in 3.01 seconds = 387.33 MB/sec<br />
<br />
Minimum Read Rate: 388.04 MB/s<br />
Maximum Read Rate: 387.13 MB/s<br />
Average Read Rate: 387.252 MS/s<br />
<br />
<br />
=== Crucial ===<br />
==== Crucial C300 ====<br />
*SSD: Crucial C300 (SATA 3: 6Gb/s)<br />
*Model Number: CTFDDAC128MAG-1G1<br />
*Capacity: 128 GB<br />
*User: jac<br />
<br />
# hdparm -Tt /dev/sdb<br />
/dev/sda:<br />
Timing cached reads: 24112 MB in 2.00 seconds = 12072.84 MB/sec<br />
Timing buffered disk reads: 1056 MB in 3.00 seconds = 351.58 MB/sec<br />
<br />
Minimum Read Rate: 350.88 MB/s<br />
Maximum Read Rate: 351.58 MB/s<br />
Average Read Rate: 351.264 MB/s<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 7.77883 s, 138 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 2.88752 s, 372 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.164471 s, 6.5 GB/s<br />
<br />
==== Crucial M4 ====<br />
*SSD: Crucial M4 (SATA 3: 6Gb/s)<br />
*Model Number: M4-CT128M4SSD2 (Firmware: 0009)<br />
*Capacity: 128 GB<br />
*User: lynix<br />
*Filesystem: ext4 on LVM<br />
*Notes: connected to SATAII 3Gb/s port while benchmarking. firmware matters!<br />
<br />
# hdparm -Tt /dev/sde<br />
/dev/sde:<br />
Timing cached reads: 19094 MB in 2.00 seconds = 9559.40 MB/sec<br />
Timing buffered disk reads: 786 MB in 3.00 seconds = 261.63 MB/sec<br />
<br />
Minimum Read Rate: 271.7 MB/s<br />
Maximum Read Rate: 381.7 MB/s<br />
Average Read Rate: 279.0 MB/s<br />
<br />
Minimum Write Rate: 58.6 MB/s<br />
Maximum Write Rate: 258.9 MB/s<br />
Average Write Rate: 194.8 MB/s<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 5.57478 s, 193 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 4.00688 s, 268 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.157567 s, 6.8 GB/s<br />
<br />
*SSD: Crucial M4 (SATA III)<br />
*Model Number: M4-CT064M4SSD2<br />
*Firmware Version: 070H<br />
*Capacity: 64 GB<br />
*Controller: AMD SB950<br />
*User: Fraoch<br />
*Kernel: 3.8.0<br />
*Filesystem: ext4<br />
<br />
# hdparm -Tt /dev/sdb<br />
Timing cached reads: 7532 MB in 2.00 seconds = 3767.26 MB/sec<br />
Timing buffered disk reads: 1294 MB in 3.00 seconds = 431.20 MB/sec<br />
<br />
Average Read Rate: 506.9 MB/s<br />
Average Access Time: 0.08 ms<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 9.44004 s, 114 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 2.41524 s, 445 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.295721 s, 3.6 GB/s<br />
<br />
=== Intel ===<br />
==== Intel 310 Soda Creek ====<br />
*SSD: Intel 310 Soda Creek<br />
*Model Number: SSDMAEMC040G2<br />
*Firmware Version: 2CV1023M<br />
*Capacity: 40 GB<br />
*User: dundee<br />
*Filesystem: ext4<br />
<br />
# hdparm -Tt /dev/sdb<br />
/dev/sdb:<br />
Timing cached reads: 6278 MB in 2.00 seconds = 3141.39 MB/sec<br />
Timing buffered disk reads: 784 MB in 3.00 seconds = 260.96 MB/sec<br />
<br />
Minimum Read Rate: 189.7 MB/s<br />
Maximum Read Rate: 281.1 MB/s<br />
Average Read Rate: 277.1 MS/s<br />
Minimum Write Rate: 30.3 MB/s<br />
Maximum Write Rate: 44.6 MB/s<br />
Average Write Rate: 43.8 MS/s<br />
<br />
Average Access Time 0.1 ms<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 24.3013 s, 44.2 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 5.45325 s, 197 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.255569 s, 4.2 GB/s<br />
<br />
==== Intel 330 ====<br />
*SSD: Intel 330<br />
*Model Number: SSDSC2CT120A3<br />
*Firmware Version: 300i<br />
*Capacity: 120 GB<br />
*User: bugflux<br />
*Filesystem: ext4<br />
*'''Note''': Sata II computer<br />
<br />
# hdparm -tT /dev/sda<br />
/dev/sda:<br />
Timing cached reads: 9222 MB in 2.00 seconds = 4612.61 MB/sec<br />
Timing buffered disk reads: 672 MB in 3.01 seconds = 223.40 MB/sec<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 24.3013 s, 44.2 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 4.43827 s, 242 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.240778 s, 4.5 GB/s<br />
<br />
==== Intel X18-M (G2) ====<br />
*SSD: Intel X18-M Generation 2<br />
*Model Number: SSDSA1M1602GN<br />
*Capacity: 160 GB<br />
*User: Cirk<br />
<br />
# hdparm -Tt /dev/sda<br />
Timing cached reads: 2826 MB in 2.00 seconds = 1414.39 MB/sec<br />
Timing buffered disk reads: 694 MB in 3.00 seconds = 231.14 MB/sec<br />
<br />
Minimum Read Rate: 216.1 MB/s<br />
Maximum Read Rate: 283.5 MB/s<br />
Average Read Rate: 271.2 MB/s<br />
Average Access Time 0.1 ms<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 10.4608 s, 103 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 4.0866 s, 263 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.403244 s, 2.7 GB/s<br />
<br />
==== Intel X25-M (G2) ====<br />
*SSD: Intel X25-M Generation 2<br />
*Model Number: SSDSA2MH080G2R5<br />
*Capacity: 80 GB<br />
*User: Graysky<br />
<br />
# hdparm -Tt /dev/sdb<br />
/dev/sdb:<br />
Timing cached reads: 15644 MB in 1.99 seconds = 7845.48 MB/sec<br />
Timing buffered disk reads: 788 MB in 3.00 seconds = 262.52 MB/sec<br />
<br />
Minimum Read Rate: 253.6 MB/s<br />
Maximum Read Rate: 286.1 MB/s<br />
Average Read Rate: 282.6 MB/s<br />
Average Access Time 0.1 ms<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 13.3236 s, 80.6 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 4.00297 s, 268 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.169713 s, 6.3 GB/s<br />
<br />
==== Intel X25-M (G2) ====<br />
*SSD: Intel X25-M Generation 2<br />
*Model Number: SSDSA2M160G2GC<br />
*Capacity: 160 GB<br />
*User: fackamato<br />
<br />
# hdparm -Tt /dev/sda<br />
Timing cached reads: 2890 MB in 2.00 seconds = 1445.86 MB/sec<br />
Timing buffered disk reads: 738 MB in 3.00 seconds = 245.69 MB/sec<br />
<br />
Minimum Read Rate: 244.3 MB/s<br />
Maximum Read Rate: 278.6 MB/s<br />
Average Read Rate: 273.3 MB/s<br />
Average Access Time 0.1 ms<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 10.8582 s, 98.9 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 4.09679 s, 262 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.363709 s, 3.0 GB/s<br />
<br />
==== Intel X25-M (G2) ====<br />
*SSD: Intel X25-M Generation 2<br />
*Model Number: SSDSA2M080G2C<br />
*Capacity: 80 GB<br />
*User: Cirk<br />
<br />
# hdparm -Tt /dev/sda<br />
Timing cached reads: 9384 MB in 2.00 seconds = 4694.29 MB/sec<br />
Timing buffered disk reads: 808 MB in 3.01 seconds = 268.64 MB/sec<br />
<br />
Minimum Read Rate: 229.9 MB/s<br />
Maximum Read Rate: 281.6 MB/s<br />
Average Read Rate: 272.4 MB/s<br />
Average Access Time 0.1 ms<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 15.1671 s, 70.8 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 5.15237 s, 208 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.256211 s, 4.2 GB/s<br />
<br />
==== Intel X25-M (G2) ====<br />
*SSD: Intel X25-M Generation 2<br />
*Model Number: SSDSA2MH120G2K5<br />
*Capacity: 120 GB<br />
*User: timo.hardebusch<br />
<br />
# hdparm -Tt /dev/sdb<br />
/dev/sdb:<br />
Timing cached reads: 4358 MB in 2.00 seconds = 2178.89 MB/sec<br />
Timing buffered disk reads: 752 MB in 3.01 seconds = 250.07 MB/sec<br />
<br />
Minimum Read Rate: 259.1 MB/s<br />
Maximum Read Rate: 283.3 MB/s<br />
Average Read Rate: 280.6 MB/s<br />
Average Access Time 0.1 ms<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 10.1452 s, 106 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 4.05181 s, 265 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.369308 s, 2.9 GB/s<br />
<br />
=== OCZ ===<br />
==== OCZ-VERTEX 4 128 GB ====<br />
*SSD:OCZ Vertex 4<br />
*Model Number: VTX4-25SAT3<br />
*Firmware Version: 1.5<br />
*Capacity: 128 GB<br />
*Controller: Marvell Technology Group Ltd. 88SE9128 PCIe SATA 6 Gb/s RAID controller (rev 11)<br />
*Kernel: 3.6.11-1<br />
*User: Musikolo<br />
*Notes: <br />
** Filesystem: ext4 with options ''defaults,relatime,discard''. <br />
** Partition: aligned (fist sector 2048 / 1MiB free space at the beginning). Additional info [https://bbs.archlinux.org/viewtopic.php?pid=1211245#p1211245 here].<br />
** Scheduler: deadline. Additional info [https://wiki.archlinux.org/index.php/Solid_State_Drives#Using_udev_for_one_device_or_HDD.2FSSD_mixed_environment here].<br />
<br />
# hdparm -Tt /dev/sda<br />
/dev/sda:<br />
Timing cached reads: 7752 MB in 2.00 seconds = 3877.19 MB/sec<br />
Timing buffered disk reads: 1122 MB in 3.00 seconds = 373.78 MB/sec<br />
<br />
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 4.60766 s, 233 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 2.74071 s, 392 MB/s<br />
<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.302118 s, 3.6 GB/s<br />
<br />
==== OCZ-VERTEX 4 128 GB ====<br />
*SSD:OCZ Vertex 4<br />
*Model Number: VTX4-25SAT3 - '''firmware 1.5'''<br />
*Capacity: 128 GB<br />
*User: [[User:Graysky]]<br />
===== In SATA 6.0 Gb/s Controller =====<br />
# hdparm -Tt /dev/sda<br />
<br />
/dev/sda:<br />
Timing cached reads: 33756 MB in 2.00 seconds = 16902.49 MB/sec<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 2.9279 s, 367 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 2.49942 s, 430 MB/s<br />
<br />
===== In SATA 3.0 Gb/s Controller =====<br />
# hdparm -Tt /dev/sda<br />
<br />
/dev/sda:<br />
Timing cached reads: 15842 MB in 2.00 seconds = 7930.79 MB/sec<br />
Timing buffered disk reads: 814 MB in 3.00 seconds = 271.02 MB/sec<br />
<br />
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 4.28493 s, 251 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 3.78546 s, 284 MB/s<br />
<br />
==== OCZ-VERTEX 60gb ====<br />
*SSD:OCZ-VERTEX<br />
*Model Number:Firmware 1.5<br />
*Capacity: 60 GB<br />
*User:Surfed<br />
<br />
# hdparm -Tt /dev/sda<br />
/dev/sda:<br />
Timing cached reads: 16306 MB in 2.00 seconds = 8162.55 MB/sec<br />
Timing buffered disk reads: 646 MB in 3.00 seconds = 215.09 MB/sec<br />
<br />
<br />
Minimum Read Rate: 226.7 MB/s<br />
Maximum Read Rate: 275.2 MB/s<br />
Average Read Rate: 256.9 MB/s<br />
Average Access Time 0.1 ms<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 7.5581 s, 142 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 4.55881 s, 236 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.205299 s, 5.2 GB/s<br />
<br />
==== OCZ-VERTEX3 120 ====<br />
*SSD:OCZ-VERTEX3<br />
*Firmware Version:<br />
*Capacity: 6Gb/s SATA III<br />
*User:[[User:pingpong]]<br />
<br />
# hdpram -Tt /dev/sda<br />
<br />
/dev/sda:<br />
Timing cached reads: 11180 MB in 2.00 seconds = 5594.15 MB/sec<br />
Timing buffered disk reads: 736 MB in 3.00 seconds = 245.27 MB/sec<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 4.20024 s, 256 MB/s<br />
<br />
#echo 3 > /proc/sys/vm/drop_caches<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 4.12454 s, 260 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.172948 s, 6.2 GB/s<br />
<br />
==== OCZ-VERTEX3 120GO ====<br />
*SSD:OCZ-VERTEX3<br />
*Firmware Version:2.06<br />
*Capacity: 6Gb/s SATA III<br />
*User:[[User:Sputnick]]<br />
*Notes: tested on '''SATA II 3Gb/s Dell Optiplex 780 motherboard''' 0C27VV <br />
<br />
# hdparm -Tt /dev/sdc<br />
<br />
/dev/sdc:<br />
Timing cached reads: 13702 MB in 2.00 seconds = 6859.89 MB/sec<br />
Timing buffered disk reads: 644 MB in 3.00 seconds = 214.40 MB/sec<br />
<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 enregistrements lus<br />
1024+0 enregistrements écrits<br />
1073741824 octets (1,1 GB) copiés, 4,37831 s, 245 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 enregistrements lus<br />
1024+0 enregistrements écrits<br />
1073741824 octets (1,1 GB) copiés, 4,76932 s, 225 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 enregistrements lus<br />
1024+0 enregistrements écrits<br />
1073741824 octets (1,1 GB) copiés, 0,234682 s, 4,6 GB/s<br />
<br />
==== OCZ-VERTEX-TURBO 30gb ====<br />
*SSD:OCZ-VERTEX-TURBO<br />
*Model Number:Firmware 1.5<br />
*Capacity: 30 GB<br />
*User:ScottKidder<br />
<br />
# hdparm -Tt /dev/sda<br />
/dev/sda:<br />
Timing cached reads: 6286 MB in 2.00 seconds = 3149.62 MB/sec<br />
Timing buffered disk reads: 630 MB in 3.01 seconds = 209.10 MB/sec<br />
<br />
Minimum Read Rate: 211.8 MB/s<br />
Maximum Read Rate: 254.1 MB/s<br />
Average Read Rate: 249.2 MB/s<br />
Average Access Time 0.1 ms<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 21.5437 s, 49.8 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 9.34704 s, 115 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.40667 s, 2.6 GB/s<br />
<br />
==== OCZ-VERTEX2 240GB ====<br />
*SSD: OCZ<br />
*Model Number: Vertex2<br />
*Capacity: 240GB<br />
*User: longint<br />
*Filesystem: btrfs compression=lzo,space_cache<br />
<br />
# hdparm -Tt /dev/sda<br />
/dev/sda:<br />
Timing cached reads: 10972 MB in 2.00 seconds = 5489.70 MB/sec<br />
Timing buffered disk reads: 648 MB in 3.00 seconds = 215.96 MB/sec<br />
<br />
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 1.26013 s, 852 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 4.45112 s, 241 MB/s<br />
<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.320492 s, 3.4 GB/s<br />
<br />
==== OCZ-VERTEX3 120GB ====<br />
*SSD:OCZ-VERTEX3 SATA III<br />
*Firmware Version:2.13<br />
*Capacity: 120 GB<br />
*Filesystem: ext4 with discard and commit=60<br />
*[[User:muflone]]<br />
<br />
# hdparm -Tt /dev/sdc<br />
/dev/sdc:<br />
Timing cached reads: 23870 MB in 2.00 seconds = 11950.12 MB/sec<br />
Timing buffered disk reads: 866 MB in 3.00 seconds = 288.36 MB/sec<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 2.85159 s, 377 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 3.6931 s, 291 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.10383 s, 10.3 GB/s<br />
<br />
==== OCZ-AGILITY3 120GB ====<br />
*SSD:OCZ-AGILITY3 SATA III<br />
*Firmware Version:2.15<br />
*Capacity: 120 GB<br />
*Filesystem: ext4 with discard<br />
*[[User:bardo]]<br />
<br />
# hdparm -Tt /dev/sda<br />
/dev/sda:<br />
Timing cached reads: 27738 MB in 2.00 seconds = 13889.38 MB/sec<br />
Timing buffered disk reads: 1158 MB in 3.01 seconds = 385.08 MB/sec<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 2.41537 s, 445 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 2.35961 s, 455 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.130664 s, 8.2 GB/s<br />
<br />
=== Samsung ===<br />
==== SAMSUNG 128GB / SATAII ====<br />
*SSD: SAMSUNG 128GB / SATAII<br />
*Model Number: MMCQE28GFMUP-MVA<br />
*Capacity: 128 GB<br />
*User: Cirk<br />
<br />
# hdparm -Tt /dev/sda<br />
Timing cached reads: 2612 MB in 2.00 seconds = 1307.40 MB/sec<br />
Timing buffered disk reads: 294 MB in 3.01 seconds = 97.67 MB/sec<br />
<br />
Minimum Read Rate: 108.7 MB/s<br />
Maximum Read Rate: 114.5 MB/s<br />
Average Read Rate: 113.7 MB/s<br />
Average Access Time 0.2 ms<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 23.7352 s, 45.2 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 10.7563 s, 99.8 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.464824 s, 2.3 GB/s<br />
<br />
==== SAMSUNG 470 64GB ====<br />
*SSD: SAMSUNG 470 64GB<br />
*Model Number: MZ-5PA064/US<br />
*Firmware: AXM070Q1<br />
*Capacity: 64 GB<br />
*User: skylinux<br />
<br />
# hdparm -Tt /dev/sda<br />
Timing cached reads: 1736 MB in 2.00 seconds = 868.62 MB/sec<br />
Timing buffered disk reads: 516 MB in 3.00 seconds = 171.87 MB/sec<br />
<br />
Minimum Read Rate: 276.5 MB/s<br />
Maximum Read Rate: 278.8 MB/s<br />
Average Read Rate: 278.2 MB/s<br />
Average Access Time 0.2 ms<br />
<br />
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 5.69714 s, 188 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 5.25116 s, 204 MB/s<br />
<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 1.05824 s, 1.0 GB/s<br />
<br />
==== SAMSUNG 830 128GB SATAII ====<br />
*SSD: SAMSUNG 830 128GB<br />
*Model Number: MZ-7PC128D<br />
*Firmware: CXM03B1Q<br />
*Capacity: 128 GB<br />
*[[User: lockheed]]<br />
*Filesystem: ext4 defaults,noatime,commit=60<br />
*Notes: SATA II, partitions aligned, with swap, C2D 2.5 GHz<br />
<br />
# hdparm -Tt /dev/sda<br />
Timing cached reads: 12616 MB in 1.99 seconds = 6334.84 MB/sec<br />
Timing buffered disk reads: 802 MB in 3.01 seconds = 266.78 MB/sec<br />
<br />
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 4.82496 s, 226 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 3.84014 s, 280 MB/s<br />
<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.300189 s, 3.6 GB/s<br />
<br />
==== SAMSUNG 830 128GB ====<br />
*SSD: SAMSUNG 830 128GB<br />
*Model Number: MZ-7PC128D<br />
*Firmware: CXM03B1Q<br />
*Capacity: 128 GB<br />
*[[User: kevincodux]]<br />
*Filesystem: ext4,discard,noatime<br />
*Notes: SATAIII, partitions aligned and no swap<br />
<br />
# hdparm -Tt /dev/sda<br />
Timing cached reads: 22130 MB in 2.00 seconds = 11080.54 MB/sec<br />
Timing buffered disk reads: 1500 MB in 3.00 seconds = 499.38 MB/sec<br />
<br />
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 3.42567 s, 313 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 2.04691 s, 525 MB/s<br />
<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.119695 s, 9.0 GB/s<br />
<br />
==== SAMSUNG 830 256GB ====<br />
*SSD: SAMSUNG 830 256GB<br />
*Model Number: MZ-7PC256<br />
*Firmware Version: CXM03B1Q<br />
*Capacity: 256 GB<br />
*User: Revelation<br />
*Kernel: 3.5.4<br />
*Filesystem: ext4<br />
<br />
# hdparm -Tt /dev/sda<br />
Timing cached reads: 15888 MB in 2.00 seconds = 7952.13 MB/sec<br />
Timing buffered disk reads: 1464 MB in 3.00 seconds = 488.00 MB/sec<br />
<br />
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 3,15782 s, 340 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 2,08421 s, 515 MB/s<br />
<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.119695 s, 6.2 GB/s<br />
<br />
====SAMSUNG 840 120GB ====<br />
<br />
*SSD: Samsung SSD 840 Series<br />
*Model Number: 840 (non Pro)<br />
*Firmware Version: DXT08B0Q<br />
*Capacity: 120 GB<br />
*User: willybilly0101<br />
*Kernel: 3.10.10-1-ARCH #1 SMP PREEMPT<br />
*Filesystem: Btrfs - defaults,noatime,compress=lzo<br />
<br />
# hdparm -Tt /dev/sda<br />
/dev/sda:<br />
Timing cached reads: 11346 MB in 2.00 seconds = 5677.40 MB/sec<br />
Timing buffered disk reads: 1534 MB in 3.00 seconds = 511.24 MB/sec<br />
<br />
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 2.05137 s, 523 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 1.08204 s, 992 MB/s<br />
<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.232285 s, 4.6 GB/s<br />
<br />
<br />
==== SAMSUNG 840 250GB ====<br />
<br />
*SSD: SAMSUNG 840 250GB<br />
*Firmware: DXT07B0Q<br />
*Capacity: 250 GB<br />
*Filesystem: XFS(defaults,relatime,discard)<br />
*Kernel: 3.7.7-1-ARCH<br />
*Other details: SATA3 motherboard and hookups. Configured with hdparm to reserve 20% of the drive for over-provisioning<br />
*[[User: Earlz]]<br />
<br />
# hdparm -Tt /dev/sdc<br />
/dev/sdc:<br />
Timing cached reads: 21380 MB in 2.00 seconds = 10703.38 MB/sec<br />
Timing buffered disk reads: 810 MB in 3.00 seconds = 269.74 MB/sec<br />
<br />
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 4.44147 s, 242 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 3.80874 s, 282 MB/s<br />
<br />
Notes:<br />
Firmware updating was a pain because they don't make it obvious you can update without using their Windows-only magician software. Go [http://www.samsung.com/global/business/semiconductor/samsungssd/downloads.html here] for ISO images of the updates pre-made and ready to download.<br />
<br />
==== SAMSUNG 840 evo 128GB ====<br />
*SSD: SAMSUNG 840 evo 128GB<br />
*Model Number: Samsung SSD 840 EVO 120GB<br />
*Firmware: EXT0BB6Q<br />
*Capacity: 128 GB<br />
*[[User: Ricky]]<br />
*Filesystem: ext4,discard,noatime<br />
*Notes: SATAII, partitions aligned, 10% over-provisioning and no swap<br />
<br />
# hdparm -Tt /dev/sda<br />
Timing cached reads: 4588 MB in 1.99 seconds = 2299.87 MB/sec<br />
Timing buffered disk reads: 808 MB in 3.01 seconds = 268.80 MB/sec<br />
<br />
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 4.82364 s, 223 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 3.8185 s, 281 MB/s<br />
<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.496013 s, 2.2 GB/s<br />
<br />
==== Samsung 840 Pro 256 GB ====<br />
* SSD: Samsung 840 Pro 256 GB<br />
* Model Number: Samsung SSD 840 PRO Series<br />
* Firmware Version: DXM05B0Q<br />
* Capacity: 256 GB<br />
* Controller: SATA III<br />
* User: wzyboy<br />
* Kernel: 3.13.5-1-ARCH<br />
* Filesystem: Ext4 on aligned GPT, "discard" parameter enabled, no swap<br />
* Platform: ThinkPad X240s, i7-4500U, 8 GiB RAM<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 Datensätze ein<br />
1024+0 Datensätze aus<br />
1073741824 Bytes (1,1 GB) kopiert, 2,23356 s, 481 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 Datensätze ein<br />
1024+0 Datensätze aus<br />
1073741824 Bytes (1,1 GB) kopiert, 1,96205 s, 547 MB/s<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 Datensätze ein<br />
1024+0 Datensätze aus<br />
1073741824 Bytes (1,1 GB) kopiert, 0,15168 s, 7,1 GB/s<br />
<br />
=== Sandisk ===<br />
==== Sandisk Extreme 240 GB ====<br />
*SSD: Sandisk Extreme (SATA 3: 6Gb/s)<br />
*Model Number: SDSSDX240GG25<br />
*Capacity: 240 GB<br />
*User: Dani<br />
<br />
# sudo hdparm -Tt /dev/sda<br />
/dev/sda:<br />
Timing cached reads: 11596 MB in 2.00 seconds = 5802.26 MB/sec<br />
Timing buffered disk reads: 1190 MB in 3.00 seconds = 396.16 MB/sec<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 2.23003 s, 481 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 2.5909 s, 414 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.177952 s, 6.0 GB/s<br />
<br />
==== Sandisk Extreme 120 GB ====<br />
* SSD: Sandisk Extreme 120 GB (SATA 3: 6 GB/s)<br />
* Model Number: SDSSDX-120G-G25<br />
* Firmware Version: R201<br />
* Capacity: 120 GB<br />
* User: ''hsngrms''<br />
* Kernel: 3.6.3-1-ARCH x86_64<br />
* Filesystem: EXT4<br />
<br />
# hdparm -Tt /dev/sda<br />
/dev/sda:<br />
Timing cached reads: 6824 MB in 2.00 seconds = 3413.53 MB/sec<br />
Timing buffered disk reads: 1332 MB in 3.00 seconds = 443.99 MB/sec <br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1,1 GB) copied, 2,44496 s, 439 MB/s <br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1,1 GB) copied, 2,64944 s, 405 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1,1 GB) copied, 0,163495 s, 6,6 GB/s<br />
<br />
* SSD: Sandisk Extreme 120 GB<br />
* Model Number: SDSSDX-120G-G25<br />
* Firmware Version: R211<br />
* Capacity: 120 GB<br />
* Controller: SATA controller: Intel Corporation 7 Series/C210 Series Chipset Family 6-port [AHCI mode] (rev 04)<br />
* User: kozaki<br />
* Kernel: 3.7.4-1-ARCH x86_64<br />
* Filesystem: EXT4 (Arch 201301 Default: fstab: default)<br />
* Notes: SataIII, GPT partitions aligned on sectors, LVM2 (--dataalignment 1m), cfq I/O scheduler, Asrock B75Pro mobo<br />
<br />
# hdparm -Tt /dev/sda<br />
/dev/sda:<br />
Timing cached reads: 16913 MB in 2.00 seconds = 8464.76 MB/sec<br />
Timing buffered disk reads: 1414 MB in 3.00 seconds = 470.85 MB/sec <br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1,1 GB) copied, 2.3301 s, 461.33 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1,1 GB) copied, 2.65322 s, 403.67 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1,1 GB) copied, 0.137885 s, 7.87 GB/s<br />
<br />
* Note: Same model and config, but with the Filesystem mount options and the deadline I/O scheduler<br />
* Filesystem: EXT4 (fstab: noatime,discard)<br />
<br />
# hdparm -Tt /dev/sda<br />
/dev/sda:<br />
Timing cached reads: 17162 MB in 2.00 seconds = 8588.88 MB/sec<br />
Timing buffered disk reads: 1416 MB in 3.00 seconds = 471.76 MB/sec <br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1,1 GB) copied, 2.3486 s, 458 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1,1 GB) copied, 2.6593 s, 403.33 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1,1 GB) copied, 0.1312 s, 8.2 GB/sec<br />
<br />
====Sandisk Ultra Plus 64 GB====<br />
<br />
*SSD: Sandisk Ultra Plus 64GB SATA3<br />
*Model Number: SDSSDHP-064G-G25<br />
*Capacity: 64 GB<br />
*User: Roshless<br />
*Kernel: 3.12.9-2-ck<br />
*Filesystem: ext4 - defaults,noatime,discard<br />
*Notes: deadline scheduler, Dell 0M7CYJ mobo, notebook<br />
<br />
# hdparm -Tt /dev/sda<br />
/dev/sda:<br />
Timing cached reads: 2116 MB in 2.00 seconds = 1058.95 MB/sec<br />
Timing buffered disk reads: 582 MB in 3.00 seconds = 193.84 MB/sec<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 7.17104 s, 150 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 5.5608 s, 193 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.707444 s, 1.5 GB/s<br />
<br />
=== Seagate ===<br />
==== 600 ====<br />
<br />
* SSD: Seagate 600<br />
* Model Number: ST240HM000<br />
* Firmware Version: C675<br />
* Capacity: 240 GB<br />
* Controller: AMD SB950<br />
* User: Fraoch<br />
* Kernel: 3.11.0<br />
* Filesystem: ext4<br />
<br />
# hdparm -Tt /dev/sda<br />
/dev/sda:<br />
Timing cached reads: 7436 MB in 2.00 seconds = 3719.76 MB/sec<br />
Timing buffered disk reads: 1526 MB in 3.00 seconds = 508.66 MB/sec<br />
<br />
Average read rate: 506.6 MB/s<br />
Average write rate: 299.3 MB/s<br />
Average access time: 0.13 ms<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 2.48651 s, 432 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 2.03941 s, 526 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.308517 s, 3.5 GB/s<br />
<br />
=== Kingston ===<br />
==== Kingston HyperX 120 GB ====<br />
*SSD: Kingston HyperX 120 GB<br />
*Model Number: SH100S3120G<br />
*Firmware: 320ABBF0<br />
*Capacity: 120 GB<br />
*User: Artsibash<br />
<br />
# hdparm -Tt /dev/sda<br />
Timing cached reads: 26564 MB in 2.00 seconds = 13296.53 MB/sec<br />
Timing buffered disk reads: 1130 MB in 3.00 seconds = 376.16 MB/sec<br />
<br />
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 2.37858 s, 451 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches <br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 2.48961 s, 431 MB/s<br />
<br />
# dd if=/tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.125463 s, 8.6 GB/s<br />
<br />
==== Kingston HyperX 3K 120GB ====<br />
*SSD: Kingston HyperX 3K 120GB (MLC/Intel synchronous ONFi NAND/LSI SandForce SF-2281 25nm controller/SATA3/2.5")<br />
*Model Number: SH103S3120G<br />
*Firmware: 501ABBF0<br />
*Capacity: 120 GB<br />
*Misc: Intel DQ77MK mobo SATA3 port, linux 3.5.4-1, ext4 (has_journal + discard,noatime)<br />
*[[User: MajorTom]]<br />
<br />
# hdparm -Tt /dev/sda<br />
Timing cached reads: 15382 MB in 2.00 seconds = 7702.01 MB/sec<br />
Timing buffered disk reads: 1442 MB in 3.00 seconds = 480.39 MB/sec<br />
<br />
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 2.06937 s, 519 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches <br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 2.58996 s, 415 MB/s<br />
<br />
# dd if=/tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.207434 s, 5.2 GB/s<br />
<br />
==== Kingston HyperX 3K 120GB ====<br />
*SSD: Kingston HyperX 3K 120GB<br />
*Model Number: SH103S3120G<br />
*Firmware: 503ABBF0<br />
*Capacity: 120 GB<br />
*Misc: SATA3 port, linux 3.6.4-1-ck, ext4 <br />
*User: WonderWoofy<br />
<br />
# hdparm -Tt /dev/sda<br />
/dev/sda:<br />
Timing cached reads: 16562 MB in 2.00 seconds = 8289.47 MB/sec<br />
Timing buffered disk reads: 1078 MB in 3.01 seconds = 358.53 MB/sec<br />
<br />
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 2.07445 s, 518 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches <br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 3.40264 s, 316 MB/s<br />
<br />
# dd if=/tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.149056 s, 7.2 GB/s<br />
<br />
==== Kingston SSDNow V+100 128 GB ====<br />
*SSD: Kingston SSDNow v+100 128 GB<br />
*Model Number: SVP100S2128G<br />
*Firmware: CJRA0202<br />
*Capacity: 128 GB<br />
*User: Tuxe<br />
<br />
# hdparm -Tt /dev/sda<br />
Timing cached reads: 11598 MB in 1.99 seconds = 5822.73 MB/sec<br />
Timing buffered disk reads: 598 MB in 3.01 seconds = 198.90 MB/sec<br />
<br />
Minimum Read Rate: 145.8 MB/s<br />
Maximum Read Rate: 259.2 MB/s<br />
Average Read Rate: 243.5 MB/s<br />
Average Access Time 0.1 ms<br />
<br />
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 9.74199 s, 110 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches <br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 4.62165 s, 232 MB/s<br />
<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.330142 s, 3.3 GB/s<br />
<br />
==== Kingston SSDNow V300 128 GB ====<br />
*SSD: Kingston SSDNow V100 128 GB<br />
*Model Number: SV300S37A120G<br />
*Firmware: 521ABBF0<br />
*Capacity: 128 GB<br />
*User: Ricky<br />
<br />
# hdparm -Tt /dev/sda<br />
/dev/sda:<br />
Timing cached reads: 4970 MB in 1.99 seconds = 2491.32 MB/sec<br />
Timing buffered disk reads: 660 MB in 3.01 seconds = 219.53 MB/sec<br />
<br />
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out <br />
1073741824 bytes (1.1 GB) copied, 4.96045 s, 216 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches <br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out <br />
1073741824 bytes (1.1 GB) copied, 4.58932 s, 234 MB/s<br />
<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out <br />
1073741824 bytes (1.1 GB) copied, 0.45147 s, 2.4 GB/s<br />
<br />
==== Kingston SNV425-S2BD 128GB ====<br />
*SSD: Kingston SNV425-S2BD/128GB<br />
*Model Number: SNV425S2128GB<br />
*Firmware: C09112a6<br />
*Capacity: 128 GB<br />
*User: thof<br />
*Filesystem: ext4<br />
*Kernel: 3.3.4<br />
<br />
# hdparm -Tt /dev/sda<br />
Timing cached reads: 3614 MB in 2.00 seconds = 1808.83 MB/sec<br />
Timing buffered disk reads: 736 MB in 3.01 seconds = 244.91 MB/sec<br />
<br />
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 6.5301 s, 164 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches <br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 4.1377 s, 260 MB/s<br />
<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.363142 s, 3.0 GB/s<br />
<br />
===Mushkin===<br />
==== Mushkin mSATA Atlas 128GB ====<br />
*SSD: Mushkin Atlas 128GB SATA III<br />
*Model Number: MKNSSDAT120GB-DX <br />
*Firmware: 504ABBF0<br />
*Capacity: 120 GB<br />
*Misc: SATA II Port (mSATA), linux 3.6.4-1-ck, ext4, Sandforce, <br />
*User: WonderWoofy<br />
<br />
# hdparm -Tt /dev/sda<br />
/dev/sdb:<br />
Timing cached reads: 16116 MB in 2.00 seconds = 8065.82 MB/sec<br />
Timing buffered disk reads: 458 MB in 3.00 seconds = 152.53 MB/sec<br />
<br />
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 4.09965 s, 262 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches <br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 4.4438 s, 242 MB/s<br />
<br />
# dd if=/tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.143544 s, 7.5 GB/s<br />
<br />
===Liteon===<br />
====Liteon M3S====<br />
*SSD: Liteon M3S 256GB SATA III<br />
*Model Number: LCT-256M3S <br />
*Firmware: VRDC<br />
*Capacity: 256 GB<br />
*User: AleksMK<br />
<br />
# hdparm -Tt /dev/sda<br />
/dev/sda:<br />
Timing cached reads: 8406 MB in 2.00 seconds = 4206.12 MB/sec<br />
Timing buffered disk reads: 1212 MB in 3.00 seconds = 403.81 MB/sec<br />
<br />
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 3.2338 s, 332 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches <br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 2.48531 s, 432 MB/s<br />
<br />
# dd if=/tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.24457 s, 4.4 GB/s<br />
<br />
<br />
===IBM===<br />
==== IBM MLC 128GB ====<br />
*[[User: darkol]]<br />
*SSD: IBM 128GB SATA 2.5" MLC HS Enterprise Value SSD<br />
*Model Number: 90Y8648<br />
*Firmware Version: <br />
*Capacity: 128 GB<br />
*User: darkol<br />
*Kernel:<br />
*Filesystem: ext4<br />
*System: IBM x3650 M4<br />
<br />
# RAID1<br />
# hdparm -Tt /dev/sda<br />
/dev/sda:<br />
Timing cached reads: 17260 MB in 2.00 seconds = 8642.01 MB/sec<br />
Timing buffered disk reads: 1262 MB in 3.00 seconds = 420.27 MB/sec<br />
<br />
# RAID5<br />
# hdparm -Tt /dev/sdb<br />
/dev/sda:<br />
Timing cached reads: 17108 MB in 2.00 seconds = 8565.69 MB/sec<br />
Timing buffered disk reads: 3986 MB in 3.00 seconds = 1328.38 MB/sec<br />
<br />
= Encrypted Partitions =<br />
<br />
This section should show some data for encrypted partitions.<br />
<br />
== dm-crypt with AES ==<br />
<br />
Please list your CPU and if you are using AES-NI. Without AES-NI support in the CPU, the processor will be the bottleneck long before you touch the >500MB/s SSD speeds. <br />
<br />
'''i7-620M Benchmark'''<br />
*~570 MB/s :With AES-NI<br />
*~100 MB/s :Without AES-NI<br />
<br />
'''i5-3210M'''<br />
*~500 MB/s :With AES-NI<br />
*~200 MB/s :Without AES-NI<br />
<br />
=== Crucial ===<br />
<br />
The crucial drive does not use any compression to reach its speeds, so it is expected to be fast.<br />
<br />
==== Crucial M4 256 Gb ====<br />
<br />
* User: crobe<br />
* Filesystem: ext4 on dm-crypt<br />
* Running Sata 6 Gbit/s on an older 3 Gbit/s controller<br />
* Comment: The drive is faster on writing ( on fresh space ), which has been observed on the internet. Maybe this is the maximum of my machine.<br />
<br />
# cryptsetup status<br />
type: LUKS1<br />
cipher: aes-xts-plain<br />
keysize: 256 bits<br />
<br />
# hdparm -Tt /dev/sda<br />
/dev/sda:<br />
Timing cached reads: 3012 MB in 2.00 seconds = 1507.62 MB/sec<br />
Timing buffered disk reads: 558 MB in 3.00 seconds = 185.93 MB/sec<br />
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 Datensätze ein<br />
1024+0 Datensätze aus<br />
1073741824 Bytes (1,1 GB) kopiert, 7,86539 s, 137 MB/s<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 Datensätze ein<br />
1024+0 Datensätze aus<br />
1073741824 Bytes (1,1 GB) kopiert, 9,78325 s, 110 MB/s<br />
<br />
=== OCZ ===<br />
<br />
The OCZ Drives use compression on Data, so with uncompressible encrypted Data, speeds are expected to be way lower. Still, seek times should be as low as ever and the drive shouldn't get slower when it gets full, so there should be enough speed.<br />
<br />
==== OCZ-VERTEX2 180GB ====<br />
<br />
* SSD: OCZ <br />
* Model Number: Vertex2 <br />
* Capacity: 180Gb <br />
* User: crobe<br />
* Filesystem: ext4 on dm-crypt with AES, essiv, sha256<br />
* The bottleneck for the read/write speeds is definately the drive<br />
<br />
# hdparm -Tt /dev/sda<br />
/dev/sda:<br />
Timing cached reads: 2842 MB in 2.00 seconds = 1422.61 MB/sec<br />
Timing buffered disk reads: 550 MB in 3.00 seconds = 183.26 MB/sec<br />
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 Datensätze ein<br />
1024+0 Datensätze aus<br />
1073741824 Bytes (1,1 GB) kopiert, 16,9194 s, 63,5 MB/s<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 Datensätze ein<br />
1024+0 Datensätze aus<br />
1073741824 Bytes (1,1 GB) kopiert, 14,5509 s, 73,8 MB/s<br />
<br />
Same values for bonnie++.<br />
<br />
=== Samsung ===<br />
<br />
==== SAMSUNG 470 128GB ====<br />
<br />
*SSD: SAMSUNG 470 128GB<br />
*Firmware: AXM09B1Q<br />
*Capacity: 128 GB<br />
*User: FredericChopin<br />
<br />
# cryptsetup status<br />
type: LUKS1<br />
cipher: aes-xts-plain<br />
keysize: 512 bits<br />
offset: 8192 sectors<br />
<br />
# hdparm -Tt /dev/sda<br />
/dev/sda:<br />
Timing cached reads: 3226 MB in 2.00 seconds = 1614.42 MB/sec<br />
Timing buffered disk reads: 570 MB in 3.00 seconds = 189.84 MB/sec<br />
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 9.62518 s, 112 MB/s<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 9.34282 s, 115 MB/s<br />
<br />
==== SAMSUNG 830 256GB ====<br />
<br />
*SSD: Samsung 830 256GB<br />
*Model Number: MZ-7PC256B/WW<br />
*Firmware Version: CXM03BQ1<br />
*Capacity: 256 GB<br />
*User: stefseel<br />
*Kernel: 3.4.6-1-ARCH (with aesni_intel module)<br />
*Filesystem: ext4 (relatime,discard) over LVM2 over dm-crypt/LUKS (allow-discards)<br />
*System: Lenovo ThinkPad T430 (i5-3210M)<br />
<br />
# hdparm -Tt /dev/sda<br />
/dev/sda:<br />
Timing cached reads: 15000 MB in 2.00 seconds = 7500 MB/sec<br />
Timing buffered disk reads: 1470 MB in 3.00 seconds = 490 MB/sec<br />
<br />
With default Arch settings with installed pm-utils: JOURNAL_COMMIT_TIME_AC=0, DRIVE_READAHEAD_AC=256<br />
<br />
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 3.62668 s, 300 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 4.07337 s, 170 MB/s<br />
<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.154298 s, 7.0 GB/s<br />
<br />
What annoyed me was the poor read performance. I observed that in battery mode with unplugged AC the read rate was 500 MB/s. I did some research and found out that pm-utils is to blame. In AC mode it sets journal commit time to zero and readahead to 256 whereas in battery mode it sets journal commit time to 600 and readahead to 3072. See scripts /usr/lib/pm-utils/power.d/journal-commit and /usr/lib/pm-utils/power.d/readahead. So I added a custom config to set journal commit time always to 600 and readahead always to 4096, the result made me happy :)<br />
<br />
# cat /etc/pm/config.d/config<br />
DRIVE_READAHEAD_AC=4096<br />
DRIVE_READAHEAD_BAT=4096<br />
JOURNAL_COMMIT_TIME_AC=600<br />
JOURNAL_COMMIT_TIME_BAT=600<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 2.15534 s, 500 MB/s<br />
<br />
However there is still an issue: after resuming from suspend read rate goes down to 270 MB/s.<br />
<br />
<br />
==== SAMSUNG 830 256GB ====<br />
*[[User: hunterthompson]]<br />
*SSD: SAMSUNG 830 256GB<br />
*Firmware: CXM03B1Q<br />
*Capacity: 256 GB<br />
*System: Thinkpad X230, 16GB PC-1600 CL9 Kingston HyperX<br />
*CPU: i7-3520M, AES-NI, Hyper-Threaded, 2.9GHz-3.6GHz, Steady 3.4GHz with all 4 threads 100%<br />
*Kernel: x86_64 linux-grsec 3.5.4-1-grsec (Desktop, Virt, Host, KVM, Security)<br />
*Encryption: Full Disk, LVM2 on LUKS dm-crypt, Allow-Discards<br />
*Cryptsetup: -h sha512 -c aes-xts-plain64 -y -s 512 luksFormat --align-payload=8192<br />
*Filesystem: mkfs.ext4 -b 4096 -E stride=128,stripe-width=128 /dev/mapper/VolGroup00-lvolhome<br />
*fstab: ext4,rw,noatime,nodiratime,discard,stripe=128,data=ordered,errors=remount-ro<br />
*Notes: SATAIII, partitions aligned and no swap<br />
<br />
% dd bs=1M count=1024 if=7600_Retail_Ultimate_DVD.iso of=/dev/null conv=fdatasync<br />
dd: fsync failed for ‘/dev/null’: Invalid argument<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 3.42075 s, 314 MB/s<br />
<br />
% dd bs=1M count=1024 if=/dev/zero of=test conv=fdatasync<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 3.48574 s, 308 MB/s<br />
<br />
% dd bs=1M count=1024 if=/dev/zero of=test conv=fdatasync<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 3.45361 s, 311 MB/s<br />
<br />
% dd bs=1M count=1024 if=/dev/zero of=test conv=fdatasync<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 3.44276 s, 312 MB/s<br />
<br />
== Truecrypt ==<br />
<br />
= Comparison - high end SCSI RAID 0 hard drive benchmark =<br />
== LSI 320-2X Megaraid SCSI == <br />
<br />
* SSD: N/A<br />
* Model Number: LSI MegaRAID 320-2x RAID 0 x 2 Seagate Cheetah ST373455LC 15,000 RPM 146GB drives<br />
* Capacity: 292Gb <br />
* User: rabinnh<br />
* Filesystem: ext4 on x86_64<br />
* Comment: No, this is not an SSD, but Googlers should have a reasonable basis for comparison to a high end hard drive system, and you won't get much higher end for an individual workstation. The cost of this disk subsystem is conservatively $760, and it gives at best half the performance of most SSDs.<br />
<br />
<pre>$sudo hdparm -Tt /dev/sda2<br />
/dev/sda2:<br />
Timing cached reads: 6344 MB in 2.00 seconds = 3174.02 MB/sec<br />
Timing buffered disk reads: 442 MB in 3.01 seconds = 146.97 MB/sec</pre><br />
<br />
<pre>$dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 7.13482 s, 150 MB/s<br />
</pre><br />
<pre><br />
$echo 3 > /proc/sys/vm/drop_caches<br />
$dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 7.24267 s, 148 MB/s</pre><br />
<br />
<pre>$dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.459814 s, 2.3 GB/s</pre></div>Wzyboyhttps://wiki.archlinux.org/index.php?title=Benchmarking/Data_storage_devices&diff=302441Benchmarking/Data storage devices2014-02-28T16:29:49Z<p>Wzyboy: /* Table */ added 840 Pro</p>
<hr />
<div>[[Category:Storage]]<br />
{{Article summary start}}<br />
{{Article summary text|This article covers several Linux-native apps that benchmark I/O devices such as HDDs, SSDs, USB thumb drives, etc. There is also a "database" section specific to SSDs meant to capture user-entered benchmark results.}}<br />
{{Article summary heading|Related Articles}}<br />
{{Article summary wiki|Solid State Drives}}<br />
{{Article summary wiki|Benchmarking}}<br />
{{Article summary end}}<br />
<br />
==Introduction==<br />
Several I/O benchmark options exist under Linux.<br />
<br />
* Using hddparm with the -Tt switch, one can time sequential reads. This method is '''independent''' of partition alignment!<br />
* There is a graphical benchmark called gnome-disks contained in the {{pkg|gnome-disk-utility}} package that will give min/max/ave reads along with ave access time and a nice graphical display. This method is '''independent''' of partition alignment!'''<br />
* The dd utility can be used to measure both reads and writes. This method is '''dependent''' on partition alignment! In other words, if you failed to properly align your partitions, this fact will be seen here since you're writing and reading to a mounted filesystem.<br />
* [[Benchmarking#Bonnie.2B.2B|Bonnie++]]<br />
<br />
=== Using hdparm ===<br />
<br />
# hdparm -Tt /dev/sdX<br />
/dev/sdX:<br />
Timing cached reads: x MB in y seconds = z MB/sec<br />
Timing buffered disk reads: x MB in y seconds = z MB/sec<br />
<br />
{{Note|One should run the above command 4-5 times and manually average the results for an accurate evaluation of read speed per the hddparm man page.}}<br />
<br />
=== Using gnome-disks ===<br />
<br />
# gnome-disks<br />
<br />
Users will need to navigate through the GUI to the benchmark button ("More actions..." => "Benchmark Volume..."). [http://imgur.com/Ayv1B Example]<br />
<br />
=== Using systemd-analyze ===<br />
<br />
systemd-analyze plot > boot.svg<br />
<br />
Will plot a detailed graphic with the boot sequence: kernel time, userspace time, time taken by each service. [http://imgur.com/4ywt1 Example]<br />
<br />
=== Using dd ===<br />
<br />
{{Note|This method requires the command to be executed from a mounted partition on the device of interest!}}<br />
<br />
First, enter a directory on the SSD with at least 1.1 GB of free space (and one that obviously gives your user wrx permissions) and write a test file to measure write speeds and to give the device something to read:<br />
<br />
$ cd /path/to/SSD<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
w bytes (x GB) copied, y s, z MB/s<br />
<br />
Next, clear the buffer-cache to accurately measure read speeds directly from the device:<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
w bytes (x GB) copied, y s, z MB/s<br />
<br />
Now that the last file is in the buffer, repeat the command to see the speed of the buffer-cache:<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
w bytes (x GB) copied, y s, z GB/s<br />
<br />
{{Note|One should run the above command 4-5 times and manually average the results for an accurate evaluation of the buffer read speed.}}<br />
<br />
Finally, delete the temp file<br />
$ rm tempfile<br />
==== Caveats ====<br />
Some SSD controllers have compression hardware, which may skew benchmark results. See http://www.pugetsystems.com/labs/articles/SSDs-Advertised-vs-Actual-Performance-179/<br />
=== Model Specific Data ===<br />
Please contribute to this section using the template below to post results obtained.<br />
<br />
See [http://www.anandtech.com/bench/SSD/65 here] for a nice database of benchmarks.<br />
<br />
=== Template ===<br />
*SSD:<br />
*Model Number:<br />
*Firmware Version:<br />
*Capacity: x GB<br />
*Controller:<br />
*User:<br />
*Kernel:<br />
[*Filesystem: write something about your FS, optional]<br />
[*Notes: additional Notes, optional]<br />
<br />
# hdparm -Tt /dev/sdx<br />
<br />
Minimum Read Rate: x MB/s<br />
Maximum Read Rate: x MB/s<br />
Average Read Rate: x MS/s<br />
Average Access Time x ms<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
<br />
== Results ==<br />
<br />
=== Table ===<br />
<br />
All values are taken from the [https://wiki.archlinux.org/index.php/SSD_Benchmarking#Using_dd ''dd'' benchmark]. This is just an overview and has no scientific use.<br />
<br />
{| class="wikitable" border="1" cellpadding="5" cellspacing="0"<br />
! User !! Vendor !! Model !! Capacity [GB] !! Write [MB/sec] !! Read [MB/sec] !! Re-Read [MB/sec]<br />
|-<br />
| jac || Crucial || C300 || 128 || 138 || 372 || 6500<br />
|-<br />
| Fraoch || Crucial || M4 || 64 || 114 || 445 || 3800<br />
|-<br />
| lynix || Crucial || M4 || 128 || 193 || 268 || 6800<br />
|-<br />
| wzyboy || Crucial || M4 || 64 || 113 || 276 || 3400<br />
|-<br />
| dundee || Intel || 310 Soda Creek || 40 || 44.2 || 197 || 4200<br />
|-<br />
| bugflux || Intel || 330 || 120 || 44.2 || 242 || 4500<br />
|-<br />
| Cirk || Intel || X18-M (G2) || 160 || 103 || 263 || 2700<br />
|-<br />
| Graysky || Intel || X25-M (G2) || 80 || 80.6 || 268 || 6300<br />
|-<br />
| fackamato || Intel || X25-M (G2) || 160 || 98 || 262 || 3000<br />
|-<br />
| Cirk || Intel || X25-M (G2) || 80 || 70 || 208 || 4200<br />
|-<br />
| timo.hardebusch || Intel || X25-M (G2) || 120 || 106 || 265 || 2900<br />
|-<br />
| Musikolo || OCZ || Vertex 4 SATA 3 || 128 || 233 || 392 || 3600<br />
|-<br />
| Graysky || OCZ || Vertex 4 SATA 3 || 128 || 228 || 394 || -<br />
|-<br />
| Graysky || OCZ || Vertex 4 SATA 2 || 128 || 251 || 284 || -<br />
|-<br />
| Surfed || OCZ || Vertex || 60 || 142 || 236 || 5200<br />
|-<br />
| Sputnick || OCZ || Vertex 3 || 120 || 245 || 225 || 4600<br />
|-<br />
| ScottKidder || OCZ || Vertex Turbo || 30 || 49 || 115 || 2600<br />
|-<br />
| longint || OCZ || Vertex 2 || 240 || 852? || 241 || 3400<br />
|-<br />
| muflone || OCZ || Vertex 3 || 120 || 377 || 291 || 10300<br />
|-<br />
| bardo || OCZ || Agility 3 || 120 || 445 || 455 || 8200<br />
|-<br />
| Cirk || Samsung || MMCQE28GFMUP-MVA || 128 || 45 || 99 || 2300<br />
|-<br />
| skylinux || Samsung || 470 || 64 || 188 || 204 || 1000<br />
|-<br />
| kevincodux || Samsung || 830 || 128 || 313 || 525 || 9000<br />
|-<br />
| Earlz || Samsung || 840 || 250 || 242 || 282 || 9800<br />
|-<br />
| Ricky || Samsung || 840 evo|| 128 || 223 || 281 || 2200<br />
|-<br />
| wzyboy || Samsung || 840 Pro || 256 || 481 || 547 || 7100<br />
|-<br />
| Dani || Sandisk || Extreme || 240 || 481 || 414 || 6000<br />
|-<br />
| kozaki || Sandisk || Extreme || 120 || 458 || 403 || 8200<br />
|-<br />
| Roshless || Sandisk || Ultra Plus || 64 || 150 || 193 || 1500<br />
|- <br />
| Fraoch || Seagate || 600 || 240 || 432 || 526 || 3700<br />
|-<br />
| Artsibash || Kingston || HyperX || 120 || 451 || 431 || 8600<br />
|- <br />
| WonderWoofy || Kingston || HyperX 3k || 120 || 518 || 316 || 7200<br />
|-<br />
| Tuxe || Kingston || SSDNow V+100 || 128 || 110 || 232 || 3300<br />
|-<br />
| Ricky || Kingston || SSDNow V300 || 128 || 216 || 234 || 2400<br />
|-<br />
| thof || Kingston || SNV425-S2BD || 128 || 164 || 260 || 3000<br />
|-<br />
| WonderWoofy || Mushkin || Atlas (mSATA II) || 128 || 262 || 242 || 7300<br />
|-<br />
| AleksMK || Liteon || M3S || 256 || 336 || 432 || 4200<br />
|-<br />
| AsmundEr || WD mechanical drive || over gigE network (NFS) || 3000 || 48 || 117 || 7700<br />
|}<br />
<br />
=== Baseline: mechanical drive over ethernet ===<br />
*HDD: WD AV-GP 3TB (SATA 2)<br />
*Model number: WD30EURS<br />
*Firmware version: ?<br />
*Capacity: 2.7 TB<br />
*User: AsmundEr<br />
*Kernel: 3.9.9<br />
*Filesystem: ZFS (native) with mirroring onto two drives (i.e. RAID-1)<br />
*Notes: filesystem mounted over gigabit LAN network using NFSv4.<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 22.2138 s, 48.3 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 9.20926 s, 117 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.13901 s, 7.7 GB/s<br />
<br />
=== Corsair ===<br />
==== Corsair Force 3 ====<br />
*SSD: Corsair Force 3 120gb (SATA 3)<br />
*Model Number: Corsair Force 3 SSD<br />
*Firmware Version: 1.3.3 <br />
*Capacity: 120 GB<br />
*User: bserem<br />
*Kernel: 3.4.9<br />
*Filesystem: BTRFS<br />
*Notes: , Systemd, UEFI (with a small FAT uefi partition at the beggining of the disk)<br />
<br />
# hdparm -Tt /dev/sda<br />
/dev/sda:<br />
Timing cached reads: 28232 MB in 2.00 seconds = 14137.02 MB/sec<br />
Timing buffered disk reads: 1164 MB in 3.01 seconds = 387.33 MB/sec<br />
<br />
Minimum Read Rate: 388.04 MB/s<br />
Maximum Read Rate: 387.13 MB/s<br />
Average Read Rate: 387.252 MS/s<br />
<br />
<br />
=== Crucial ===<br />
==== Crucial C300 ====<br />
*SSD: Crucial C300 (SATA 3: 6Gb/s)<br />
*Model Number: CTFDDAC128MAG-1G1<br />
*Capacity: 128 GB<br />
*User: jac<br />
<br />
# hdparm -Tt /dev/sdb<br />
/dev/sda:<br />
Timing cached reads: 24112 MB in 2.00 seconds = 12072.84 MB/sec<br />
Timing buffered disk reads: 1056 MB in 3.00 seconds = 351.58 MB/sec<br />
<br />
Minimum Read Rate: 350.88 MB/s<br />
Maximum Read Rate: 351.58 MB/s<br />
Average Read Rate: 351.264 MB/s<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 7.77883 s, 138 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 2.88752 s, 372 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.164471 s, 6.5 GB/s<br />
<br />
==== Crucial M4 ====<br />
*SSD: Crucial M4 (SATA 3: 6Gb/s)<br />
*Model Number: M4-CT128M4SSD2 (Firmware: 0009)<br />
*Capacity: 128 GB<br />
*User: lynix<br />
*Filesystem: ext4 on LVM<br />
*Notes: connected to SATAII 3Gb/s port while benchmarking. firmware matters!<br />
<br />
# hdparm -Tt /dev/sde<br />
/dev/sde:<br />
Timing cached reads: 19094 MB in 2.00 seconds = 9559.40 MB/sec<br />
Timing buffered disk reads: 786 MB in 3.00 seconds = 261.63 MB/sec<br />
<br />
Minimum Read Rate: 271.7 MB/s<br />
Maximum Read Rate: 381.7 MB/s<br />
Average Read Rate: 279.0 MB/s<br />
<br />
Minimum Write Rate: 58.6 MB/s<br />
Maximum Write Rate: 258.9 MB/s<br />
Average Write Rate: 194.8 MB/s<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 5.57478 s, 193 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 4.00688 s, 268 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.157567 s, 6.8 GB/s<br />
<br />
*SSD: Crucial M4 (SATA III)<br />
*Model Number: M4-CT064M4SSD2<br />
*Firmware Version: 070H<br />
*Capacity: 64 GB<br />
*Controller: AMD SB950<br />
*User: Fraoch<br />
*Kernel: 3.8.0<br />
*Filesystem: ext4<br />
<br />
# hdparm -Tt /dev/sdb<br />
Timing cached reads: 7532 MB in 2.00 seconds = 3767.26 MB/sec<br />
Timing buffered disk reads: 1294 MB in 3.00 seconds = 431.20 MB/sec<br />
<br />
Average Read Rate: 506.9 MB/s<br />
Average Access Time: 0.08 ms<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 9.44004 s, 114 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 2.41524 s, 445 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.295721 s, 3.6 GB/s<br />
<br />
=== Intel ===<br />
==== Intel 310 Soda Creek ====<br />
*SSD: Intel 310 Soda Creek<br />
*Model Number: SSDMAEMC040G2<br />
*Firmware Version: 2CV1023M<br />
*Capacity: 40 GB<br />
*User: dundee<br />
*Filesystem: ext4<br />
<br />
# hdparm -Tt /dev/sdb<br />
/dev/sdb:<br />
Timing cached reads: 6278 MB in 2.00 seconds = 3141.39 MB/sec<br />
Timing buffered disk reads: 784 MB in 3.00 seconds = 260.96 MB/sec<br />
<br />
Minimum Read Rate: 189.7 MB/s<br />
Maximum Read Rate: 281.1 MB/s<br />
Average Read Rate: 277.1 MS/s<br />
Minimum Write Rate: 30.3 MB/s<br />
Maximum Write Rate: 44.6 MB/s<br />
Average Write Rate: 43.8 MS/s<br />
<br />
Average Access Time 0.1 ms<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 24.3013 s, 44.2 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 5.45325 s, 197 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.255569 s, 4.2 GB/s<br />
<br />
==== Intel 330 ====<br />
*SSD: Intel 330<br />
*Model Number: SSDSC2CT120A3<br />
*Firmware Version: 300i<br />
*Capacity: 120 GB<br />
*User: bugflux<br />
*Filesystem: ext4<br />
*'''Note''': Sata II computer<br />
<br />
# hdparm -tT /dev/sda<br />
/dev/sda:<br />
Timing cached reads: 9222 MB in 2.00 seconds = 4612.61 MB/sec<br />
Timing buffered disk reads: 672 MB in 3.01 seconds = 223.40 MB/sec<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 24.3013 s, 44.2 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 4.43827 s, 242 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.240778 s, 4.5 GB/s<br />
<br />
==== Intel X18-M (G2) ====<br />
*SSD: Intel X18-M Generation 2<br />
*Model Number: SSDSA1M1602GN<br />
*Capacity: 160 GB<br />
*User: Cirk<br />
<br />
# hdparm -Tt /dev/sda<br />
Timing cached reads: 2826 MB in 2.00 seconds = 1414.39 MB/sec<br />
Timing buffered disk reads: 694 MB in 3.00 seconds = 231.14 MB/sec<br />
<br />
Minimum Read Rate: 216.1 MB/s<br />
Maximum Read Rate: 283.5 MB/s<br />
Average Read Rate: 271.2 MB/s<br />
Average Access Time 0.1 ms<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 10.4608 s, 103 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 4.0866 s, 263 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.403244 s, 2.7 GB/s<br />
<br />
==== Intel X25-M (G2) ====<br />
*SSD: Intel X25-M Generation 2<br />
*Model Number: SSDSA2MH080G2R5<br />
*Capacity: 80 GB<br />
*User: Graysky<br />
<br />
# hdparm -Tt /dev/sdb<br />
/dev/sdb:<br />
Timing cached reads: 15644 MB in 1.99 seconds = 7845.48 MB/sec<br />
Timing buffered disk reads: 788 MB in 3.00 seconds = 262.52 MB/sec<br />
<br />
Minimum Read Rate: 253.6 MB/s<br />
Maximum Read Rate: 286.1 MB/s<br />
Average Read Rate: 282.6 MB/s<br />
Average Access Time 0.1 ms<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 13.3236 s, 80.6 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 4.00297 s, 268 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.169713 s, 6.3 GB/s<br />
<br />
==== Intel X25-M (G2) ====<br />
*SSD: Intel X25-M Generation 2<br />
*Model Number: SSDSA2M160G2GC<br />
*Capacity: 160 GB<br />
*User: fackamato<br />
<br />
# hdparm -Tt /dev/sda<br />
Timing cached reads: 2890 MB in 2.00 seconds = 1445.86 MB/sec<br />
Timing buffered disk reads: 738 MB in 3.00 seconds = 245.69 MB/sec<br />
<br />
Minimum Read Rate: 244.3 MB/s<br />
Maximum Read Rate: 278.6 MB/s<br />
Average Read Rate: 273.3 MB/s<br />
Average Access Time 0.1 ms<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 10.8582 s, 98.9 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 4.09679 s, 262 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.363709 s, 3.0 GB/s<br />
<br />
==== Intel X25-M (G2) ====<br />
*SSD: Intel X25-M Generation 2<br />
*Model Number: SSDSA2M080G2C<br />
*Capacity: 80 GB<br />
*User: Cirk<br />
<br />
# hdparm -Tt /dev/sda<br />
Timing cached reads: 9384 MB in 2.00 seconds = 4694.29 MB/sec<br />
Timing buffered disk reads: 808 MB in 3.01 seconds = 268.64 MB/sec<br />
<br />
Minimum Read Rate: 229.9 MB/s<br />
Maximum Read Rate: 281.6 MB/s<br />
Average Read Rate: 272.4 MB/s<br />
Average Access Time 0.1 ms<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 15.1671 s, 70.8 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 5.15237 s, 208 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.256211 s, 4.2 GB/s<br />
<br />
==== Intel X25-M (G2) ====<br />
*SSD: Intel X25-M Generation 2<br />
*Model Number: SSDSA2MH120G2K5<br />
*Capacity: 120 GB<br />
*User: timo.hardebusch<br />
<br />
# hdparm -Tt /dev/sdb<br />
/dev/sdb:<br />
Timing cached reads: 4358 MB in 2.00 seconds = 2178.89 MB/sec<br />
Timing buffered disk reads: 752 MB in 3.01 seconds = 250.07 MB/sec<br />
<br />
Minimum Read Rate: 259.1 MB/s<br />
Maximum Read Rate: 283.3 MB/s<br />
Average Read Rate: 280.6 MB/s<br />
Average Access Time 0.1 ms<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 10.1452 s, 106 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 4.05181 s, 265 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.369308 s, 2.9 GB/s<br />
<br />
=== OCZ ===<br />
==== OCZ-VERTEX 4 128 GB ====<br />
*SSD:OCZ Vertex 4<br />
*Model Number: VTX4-25SAT3<br />
*Firmware Version: 1.5<br />
*Capacity: 128 GB<br />
*Controller: Marvell Technology Group Ltd. 88SE9128 PCIe SATA 6 Gb/s RAID controller (rev 11)<br />
*Kernel: 3.6.11-1<br />
*User: Musikolo<br />
*Notes: <br />
** Filesystem: ext4 with options ''defaults,relatime,discard''. <br />
** Partition: aligned (fist sector 2048 / 1MiB free space at the beginning). Additional info [https://bbs.archlinux.org/viewtopic.php?pid=1211245#p1211245 here].<br />
** Scheduler: deadline. Additional info [https://wiki.archlinux.org/index.php/Solid_State_Drives#Using_udev_for_one_device_or_HDD.2FSSD_mixed_environment here].<br />
<br />
# hdparm -Tt /dev/sda<br />
/dev/sda:<br />
Timing cached reads: 7752 MB in 2.00 seconds = 3877.19 MB/sec<br />
Timing buffered disk reads: 1122 MB in 3.00 seconds = 373.78 MB/sec<br />
<br />
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 4.60766 s, 233 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 2.74071 s, 392 MB/s<br />
<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.302118 s, 3.6 GB/s<br />
<br />
==== OCZ-VERTEX 4 128 GB ====<br />
*SSD:OCZ Vertex 4<br />
*Model Number: VTX4-25SAT3 - '''firmware 1.5'''<br />
*Capacity: 128 GB<br />
*User: [[User:Graysky]]<br />
===== In SATA 6.0 Gb/s Controller =====<br />
# hdparm -Tt /dev/sda<br />
<br />
/dev/sda:<br />
Timing cached reads: 33756 MB in 2.00 seconds = 16902.49 MB/sec<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 2.9279 s, 367 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 2.49942 s, 430 MB/s<br />
<br />
===== In SATA 3.0 Gb/s Controller =====<br />
# hdparm -Tt /dev/sda<br />
<br />
/dev/sda:<br />
Timing cached reads: 15842 MB in 2.00 seconds = 7930.79 MB/sec<br />
Timing buffered disk reads: 814 MB in 3.00 seconds = 271.02 MB/sec<br />
<br />
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 4.28493 s, 251 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 3.78546 s, 284 MB/s<br />
<br />
==== OCZ-VERTEX 60gb ====<br />
*SSD:OCZ-VERTEX<br />
*Model Number:Firmware 1.5<br />
*Capacity: 60 GB<br />
*User:Surfed<br />
<br />
# hdparm -Tt /dev/sda<br />
/dev/sda:<br />
Timing cached reads: 16306 MB in 2.00 seconds = 8162.55 MB/sec<br />
Timing buffered disk reads: 646 MB in 3.00 seconds = 215.09 MB/sec<br />
<br />
<br />
Minimum Read Rate: 226.7 MB/s<br />
Maximum Read Rate: 275.2 MB/s<br />
Average Read Rate: 256.9 MB/s<br />
Average Access Time 0.1 ms<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 7.5581 s, 142 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 4.55881 s, 236 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.205299 s, 5.2 GB/s<br />
<br />
==== OCZ-VERTEX3 120 ====<br />
*SSD:OCZ-VERTEX3<br />
*Firmware Version:<br />
*Capacity: 6Gb/s SATA III<br />
*User:[[User:pingpong]]<br />
<br />
# hdpram -Tt /dev/sda<br />
<br />
/dev/sda:<br />
Timing cached reads: 11180 MB in 2.00 seconds = 5594.15 MB/sec<br />
Timing buffered disk reads: 736 MB in 3.00 seconds = 245.27 MB/sec<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 4.20024 s, 256 MB/s<br />
<br />
#echo 3 > /proc/sys/vm/drop_caches<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 4.12454 s, 260 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.172948 s, 6.2 GB/s<br />
<br />
==== OCZ-VERTEX3 120GO ====<br />
*SSD:OCZ-VERTEX3<br />
*Firmware Version:2.06<br />
*Capacity: 6Gb/s SATA III<br />
*User:[[User:Sputnick]]<br />
*Notes: tested on '''SATA II 3Gb/s Dell Optiplex 780 motherboard''' 0C27VV <br />
<br />
# hdparm -Tt /dev/sdc<br />
<br />
/dev/sdc:<br />
Timing cached reads: 13702 MB in 2.00 seconds = 6859.89 MB/sec<br />
Timing buffered disk reads: 644 MB in 3.00 seconds = 214.40 MB/sec<br />
<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 enregistrements lus<br />
1024+0 enregistrements écrits<br />
1073741824 octets (1,1 GB) copiés, 4,37831 s, 245 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 enregistrements lus<br />
1024+0 enregistrements écrits<br />
1073741824 octets (1,1 GB) copiés, 4,76932 s, 225 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 enregistrements lus<br />
1024+0 enregistrements écrits<br />
1073741824 octets (1,1 GB) copiés, 0,234682 s, 4,6 GB/s<br />
<br />
==== OCZ-VERTEX-TURBO 30gb ====<br />
*SSD:OCZ-VERTEX-TURBO<br />
*Model Number:Firmware 1.5<br />
*Capacity: 30 GB<br />
*User:ScottKidder<br />
<br />
# hdparm -Tt /dev/sda<br />
/dev/sda:<br />
Timing cached reads: 6286 MB in 2.00 seconds = 3149.62 MB/sec<br />
Timing buffered disk reads: 630 MB in 3.01 seconds = 209.10 MB/sec<br />
<br />
Minimum Read Rate: 211.8 MB/s<br />
Maximum Read Rate: 254.1 MB/s<br />
Average Read Rate: 249.2 MB/s<br />
Average Access Time 0.1 ms<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 21.5437 s, 49.8 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 9.34704 s, 115 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.40667 s, 2.6 GB/s<br />
<br />
==== OCZ-VERTEX2 240GB ====<br />
*SSD: OCZ<br />
*Model Number: Vertex2<br />
*Capacity: 240GB<br />
*User: longint<br />
*Filesystem: btrfs compression=lzo,space_cache<br />
<br />
# hdparm -Tt /dev/sda<br />
/dev/sda:<br />
Timing cached reads: 10972 MB in 2.00 seconds = 5489.70 MB/sec<br />
Timing buffered disk reads: 648 MB in 3.00 seconds = 215.96 MB/sec<br />
<br />
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 1.26013 s, 852 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 4.45112 s, 241 MB/s<br />
<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.320492 s, 3.4 GB/s<br />
<br />
==== OCZ-VERTEX3 120GB ====<br />
*SSD:OCZ-VERTEX3 SATA III<br />
*Firmware Version:2.13<br />
*Capacity: 120 GB<br />
*Filesystem: ext4 with discard and commit=60<br />
*[[User:muflone]]<br />
<br />
# hdparm -Tt /dev/sdc<br />
/dev/sdc:<br />
Timing cached reads: 23870 MB in 2.00 seconds = 11950.12 MB/sec<br />
Timing buffered disk reads: 866 MB in 3.00 seconds = 288.36 MB/sec<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 2.85159 s, 377 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 3.6931 s, 291 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.10383 s, 10.3 GB/s<br />
<br />
==== OCZ-AGILITY3 120GB ====<br />
*SSD:OCZ-AGILITY3 SATA III<br />
*Firmware Version:2.15<br />
*Capacity: 120 GB<br />
*Filesystem: ext4 with discard<br />
*[[User:bardo]]<br />
<br />
# hdparm -Tt /dev/sda<br />
/dev/sda:<br />
Timing cached reads: 27738 MB in 2.00 seconds = 13889.38 MB/sec<br />
Timing buffered disk reads: 1158 MB in 3.01 seconds = 385.08 MB/sec<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 2.41537 s, 445 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 2.35961 s, 455 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.130664 s, 8.2 GB/s<br />
<br />
=== Samsung ===<br />
==== SAMSUNG 128GB / SATAII ====<br />
*SSD: SAMSUNG 128GB / SATAII<br />
*Model Number: MMCQE28GFMUP-MVA<br />
*Capacity: 128 GB<br />
*User: Cirk<br />
<br />
# hdparm -Tt /dev/sda<br />
Timing cached reads: 2612 MB in 2.00 seconds = 1307.40 MB/sec<br />
Timing buffered disk reads: 294 MB in 3.01 seconds = 97.67 MB/sec<br />
<br />
Minimum Read Rate: 108.7 MB/s<br />
Maximum Read Rate: 114.5 MB/s<br />
Average Read Rate: 113.7 MB/s<br />
Average Access Time 0.2 ms<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 23.7352 s, 45.2 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 10.7563 s, 99.8 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.464824 s, 2.3 GB/s<br />
<br />
==== SAMSUNG 470 64GB ====<br />
*SSD: SAMSUNG 470 64GB<br />
*Model Number: MZ-5PA064/US<br />
*Firmware: AXM070Q1<br />
*Capacity: 64 GB<br />
*User: skylinux<br />
<br />
# hdparm -Tt /dev/sda<br />
Timing cached reads: 1736 MB in 2.00 seconds = 868.62 MB/sec<br />
Timing buffered disk reads: 516 MB in 3.00 seconds = 171.87 MB/sec<br />
<br />
Minimum Read Rate: 276.5 MB/s<br />
Maximum Read Rate: 278.8 MB/s<br />
Average Read Rate: 278.2 MB/s<br />
Average Access Time 0.2 ms<br />
<br />
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 5.69714 s, 188 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 5.25116 s, 204 MB/s<br />
<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 1.05824 s, 1.0 GB/s<br />
<br />
==== SAMSUNG 830 128GB SATAII ====<br />
*SSD: SAMSUNG 830 128GB<br />
*Model Number: MZ-7PC128D<br />
*Firmware: CXM03B1Q<br />
*Capacity: 128 GB<br />
*[[User: lockheed]]<br />
*Filesystem: ext4 defaults,noatime,commit=60<br />
*Notes: SATA II, partitions aligned, with swap, C2D 2.5 GHz<br />
<br />
# hdparm -Tt /dev/sda<br />
Timing cached reads: 12616 MB in 1.99 seconds = 6334.84 MB/sec<br />
Timing buffered disk reads: 802 MB in 3.01 seconds = 266.78 MB/sec<br />
<br />
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 4.82496 s, 226 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 3.84014 s, 280 MB/s<br />
<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.300189 s, 3.6 GB/s<br />
<br />
==== SAMSUNG 830 128GB ====<br />
*SSD: SAMSUNG 830 128GB<br />
*Model Number: MZ-7PC128D<br />
*Firmware: CXM03B1Q<br />
*Capacity: 128 GB<br />
*[[User: kevincodux]]<br />
*Filesystem: ext4,discard,noatime<br />
*Notes: SATAIII, partitions aligned and no swap<br />
<br />
# hdparm -Tt /dev/sda<br />
Timing cached reads: 22130 MB in 2.00 seconds = 11080.54 MB/sec<br />
Timing buffered disk reads: 1500 MB in 3.00 seconds = 499.38 MB/sec<br />
<br />
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 3.42567 s, 313 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 2.04691 s, 525 MB/s<br />
<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.119695 s, 9.0 GB/s<br />
<br />
==== SAMSUNG 830 256GB ====<br />
*SSD: SAMSUNG 830 256GB<br />
*Model Number: MZ-7PC256<br />
*Firmware Version: CXM03B1Q<br />
*Capacity: 256 GB<br />
*User: Revelation<br />
*Kernel: 3.5.4<br />
*Filesystem: ext4<br />
<br />
# hdparm -Tt /dev/sda<br />
Timing cached reads: 15888 MB in 2.00 seconds = 7952.13 MB/sec<br />
Timing buffered disk reads: 1464 MB in 3.00 seconds = 488.00 MB/sec<br />
<br />
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 3,15782 s, 340 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 2,08421 s, 515 MB/s<br />
<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.119695 s, 6.2 GB/s<br />
<br />
====SAMSUNG 840 120GB ====<br />
<br />
*SSD: Samsung SSD 840 Series<br />
*Model Number: 840 (non Pro)<br />
*Firmware Version: DXT08B0Q<br />
*Capacity: 120 GB<br />
*User: willybilly0101<br />
*Kernel: 3.10.10-1-ARCH #1 SMP PREEMPT<br />
*Filesystem: Btrfs - defaults,noatime,compress=lzo<br />
<br />
# hdparm -Tt /dev/sda<br />
/dev/sda:<br />
Timing cached reads: 11346 MB in 2.00 seconds = 5677.40 MB/sec<br />
Timing buffered disk reads: 1534 MB in 3.00 seconds = 511.24 MB/sec<br />
<br />
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 2.05137 s, 523 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 1.08204 s, 992 MB/s<br />
<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.232285 s, 4.6 GB/s<br />
<br />
<br />
==== SAMSUNG 840 250GB ====<br />
<br />
*SSD: SAMSUNG 840 250GB<br />
*Firmware: DXT07B0Q<br />
*Capacity: 250 GB<br />
*Filesystem: XFS(defaults,relatime,discard)<br />
*Kernel: 3.7.7-1-ARCH<br />
*Other details: SATA3 motherboard and hookups. Configured with hdparm to reserve 20% of the drive for over-provisioning<br />
*[[User: Earlz]]<br />
<br />
# hdparm -Tt /dev/sdc<br />
/dev/sdc:<br />
Timing cached reads: 21380 MB in 2.00 seconds = 10703.38 MB/sec<br />
Timing buffered disk reads: 810 MB in 3.00 seconds = 269.74 MB/sec<br />
<br />
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 4.44147 s, 242 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 3.80874 s, 282 MB/s<br />
<br />
Notes:<br />
Firmware updating was a pain because they don't make it obvious you can update without using their Windows-only magician software. Go [http://www.samsung.com/global/business/semiconductor/samsungssd/downloads.html here] for ISO images of the updates pre-made and ready to download.<br />
<br />
==== SAMSUNG 840 evo 128GB ====<br />
*SSD: SAMSUNG 840 evo 128GB<br />
*Model Number: Samsung SSD 840 EVO 120GB<br />
*Firmware: EXT0BB6Q<br />
*Capacity: 128 GB<br />
*[[User: Ricky]]<br />
*Filesystem: ext4,discard,noatime<br />
*Notes: SATAII, partitions aligned, 10% over-provisioning and no swap<br />
<br />
# hdparm -Tt /dev/sda<br />
Timing cached reads: 4588 MB in 1.99 seconds = 2299.87 MB/sec<br />
Timing buffered disk reads: 808 MB in 3.01 seconds = 268.80 MB/sec<br />
<br />
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 4.82364 s, 223 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 3.8185 s, 281 MB/s<br />
<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.496013 s, 2.2 GB/s<br />
<br />
=== Sandisk ===<br />
==== Sandisk Extreme 240 GB ====<br />
*SSD: Sandisk Extreme (SATA 3: 6Gb/s)<br />
*Model Number: SDSSDX240GG25<br />
*Capacity: 240 GB<br />
*User: Dani<br />
<br />
# sudo hdparm -Tt /dev/sda<br />
/dev/sda:<br />
Timing cached reads: 11596 MB in 2.00 seconds = 5802.26 MB/sec<br />
Timing buffered disk reads: 1190 MB in 3.00 seconds = 396.16 MB/sec<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 2.23003 s, 481 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 2.5909 s, 414 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.177952 s, 6.0 GB/s<br />
<br />
==== Sandisk Extreme 120 GB ====<br />
* SSD: Sandisk Extreme 120 GB (SATA 3: 6 GB/s)<br />
* Model Number: SDSSDX-120G-G25<br />
* Firmware Version: R201<br />
* Capacity: 120 GB<br />
* User: ''hsngrms''<br />
* Kernel: 3.6.3-1-ARCH x86_64<br />
* Filesystem: EXT4<br />
<br />
# hdparm -Tt /dev/sda<br />
/dev/sda:<br />
Timing cached reads: 6824 MB in 2.00 seconds = 3413.53 MB/sec<br />
Timing buffered disk reads: 1332 MB in 3.00 seconds = 443.99 MB/sec <br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1,1 GB) copied, 2,44496 s, 439 MB/s <br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1,1 GB) copied, 2,64944 s, 405 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1,1 GB) copied, 0,163495 s, 6,6 GB/s<br />
<br />
* SSD: Sandisk Extreme 120 GB<br />
* Model Number: SDSSDX-120G-G25<br />
* Firmware Version: R211<br />
* Capacity: 120 GB<br />
* Controller: SATA controller: Intel Corporation 7 Series/C210 Series Chipset Family 6-port [AHCI mode] (rev 04)<br />
* User: kozaki<br />
* Kernel: 3.7.4-1-ARCH x86_64<br />
* Filesystem: EXT4 (Arch 201301 Default: fstab: default)<br />
* Notes: SataIII, GPT partitions aligned on sectors, LVM2 (--dataalignment 1m), cfq I/O scheduler, Asrock B75Pro mobo<br />
<br />
# hdparm -Tt /dev/sda<br />
/dev/sda:<br />
Timing cached reads: 16913 MB in 2.00 seconds = 8464.76 MB/sec<br />
Timing buffered disk reads: 1414 MB in 3.00 seconds = 470.85 MB/sec <br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1,1 GB) copied, 2.3301 s, 461.33 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1,1 GB) copied, 2.65322 s, 403.67 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1,1 GB) copied, 0.137885 s, 7.87 GB/s<br />
<br />
* Note: Same model and config, but with the Filesystem mount options and the deadline I/O scheduler<br />
* Filesystem: EXT4 (fstab: noatime,discard)<br />
<br />
# hdparm -Tt /dev/sda<br />
/dev/sda:<br />
Timing cached reads: 17162 MB in 2.00 seconds = 8588.88 MB/sec<br />
Timing buffered disk reads: 1416 MB in 3.00 seconds = 471.76 MB/sec <br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1,1 GB) copied, 2.3486 s, 458 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1,1 GB) copied, 2.6593 s, 403.33 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1,1 GB) copied, 0.1312 s, 8.2 GB/sec<br />
<br />
====Sandisk Ultra Plus 64 GB====<br />
<br />
*SSD: Sandisk Ultra Plus 64GB SATA3<br />
*Model Number: SDSSDHP-064G-G25<br />
*Capacity: 64 GB<br />
*User: Roshless<br />
*Kernel: 3.12.9-2-ck<br />
*Filesystem: ext4 - defaults,noatime,discard<br />
*Notes: deadline scheduler, Dell 0M7CYJ mobo, notebook<br />
<br />
# hdparm -Tt /dev/sda<br />
/dev/sda:<br />
Timing cached reads: 2116 MB in 2.00 seconds = 1058.95 MB/sec<br />
Timing buffered disk reads: 582 MB in 3.00 seconds = 193.84 MB/sec<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 7.17104 s, 150 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 5.5608 s, 193 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.707444 s, 1.5 GB/s<br />
<br />
=== Seagate ===<br />
==== 600 ====<br />
<br />
* SSD: Seagate 600<br />
* Model Number: ST240HM000<br />
* Firmware Version: C675<br />
* Capacity: 240 GB<br />
* Controller: AMD SB950<br />
* User: Fraoch<br />
* Kernel: 3.11.0<br />
* Filesystem: ext4<br />
<br />
# hdparm -Tt /dev/sda<br />
/dev/sda:<br />
Timing cached reads: 7436 MB in 2.00 seconds = 3719.76 MB/sec<br />
Timing buffered disk reads: 1526 MB in 3.00 seconds = 508.66 MB/sec<br />
<br />
Average read rate: 506.6 MB/s<br />
Average write rate: 299.3 MB/s<br />
Average access time: 0.13 ms<br />
<br />
$ dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 2.48651 s, 432 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 2.03941 s, 526 MB/s<br />
<br />
$ dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.308517 s, 3.5 GB/s<br />
<br />
=== Kingston ===<br />
==== Kingston HyperX 120 GB ====<br />
*SSD: Kingston HyperX 120 GB<br />
*Model Number: SH100S3120G<br />
*Firmware: 320ABBF0<br />
*Capacity: 120 GB<br />
*User: Artsibash<br />
<br />
# hdparm -Tt /dev/sda<br />
Timing cached reads: 26564 MB in 2.00 seconds = 13296.53 MB/sec<br />
Timing buffered disk reads: 1130 MB in 3.00 seconds = 376.16 MB/sec<br />
<br />
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 2.37858 s, 451 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches <br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 2.48961 s, 431 MB/s<br />
<br />
# dd if=/tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.125463 s, 8.6 GB/s<br />
<br />
==== Kingston HyperX 3K 120GB ====<br />
*SSD: Kingston HyperX 3K 120GB (MLC/Intel synchronous ONFi NAND/LSI SandForce SF-2281 25nm controller/SATA3/2.5")<br />
*Model Number: SH103S3120G<br />
*Firmware: 501ABBF0<br />
*Capacity: 120 GB<br />
*Misc: Intel DQ77MK mobo SATA3 port, linux 3.5.4-1, ext4 (has_journal + discard,noatime)<br />
*[[User: MajorTom]]<br />
<br />
# hdparm -Tt /dev/sda<br />
Timing cached reads: 15382 MB in 2.00 seconds = 7702.01 MB/sec<br />
Timing buffered disk reads: 1442 MB in 3.00 seconds = 480.39 MB/sec<br />
<br />
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 2.06937 s, 519 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches <br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 2.58996 s, 415 MB/s<br />
<br />
# dd if=/tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.207434 s, 5.2 GB/s<br />
<br />
==== Kingston HyperX 3K 120GB ====<br />
*SSD: Kingston HyperX 3K 120GB<br />
*Model Number: SH103S3120G<br />
*Firmware: 503ABBF0<br />
*Capacity: 120 GB<br />
*Misc: SATA3 port, linux 3.6.4-1-ck, ext4 <br />
*User: WonderWoofy<br />
<br />
# hdparm -Tt /dev/sda<br />
/dev/sda:<br />
Timing cached reads: 16562 MB in 2.00 seconds = 8289.47 MB/sec<br />
Timing buffered disk reads: 1078 MB in 3.01 seconds = 358.53 MB/sec<br />
<br />
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 2.07445 s, 518 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches <br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 3.40264 s, 316 MB/s<br />
<br />
# dd if=/tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.149056 s, 7.2 GB/s<br />
<br />
==== Kingston SSDNow V+100 128 GB ====<br />
*SSD: Kingston SSDNow v+100 128 GB<br />
*Model Number: SVP100S2128G<br />
*Firmware: CJRA0202<br />
*Capacity: 128 GB<br />
*User: Tuxe<br />
<br />
# hdparm -Tt /dev/sda<br />
Timing cached reads: 11598 MB in 1.99 seconds = 5822.73 MB/sec<br />
Timing buffered disk reads: 598 MB in 3.01 seconds = 198.90 MB/sec<br />
<br />
Minimum Read Rate: 145.8 MB/s<br />
Maximum Read Rate: 259.2 MB/s<br />
Average Read Rate: 243.5 MB/s<br />
Average Access Time 0.1 ms<br />
<br />
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 9.74199 s, 110 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches <br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 4.62165 s, 232 MB/s<br />
<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.330142 s, 3.3 GB/s<br />
<br />
==== Kingston SSDNow V300 128 GB ====<br />
*SSD: Kingston SSDNow V100 128 GB<br />
*Model Number: SV300S37A120G<br />
*Firmware: 521ABBF0<br />
*Capacity: 128 GB<br />
*User: Ricky<br />
<br />
# hdparm -Tt /dev/sda<br />
/dev/sda:<br />
Timing cached reads: 4970 MB in 1.99 seconds = 2491.32 MB/sec<br />
Timing buffered disk reads: 660 MB in 3.01 seconds = 219.53 MB/sec<br />
<br />
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out <br />
1073741824 bytes (1.1 GB) copied, 4.96045 s, 216 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches <br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out <br />
1073741824 bytes (1.1 GB) copied, 4.58932 s, 234 MB/s<br />
<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out <br />
1073741824 bytes (1.1 GB) copied, 0.45147 s, 2.4 GB/s<br />
<br />
==== Kingston SNV425-S2BD 128GB ====<br />
*SSD: Kingston SNV425-S2BD/128GB<br />
*Model Number: SNV425S2128GB<br />
*Firmware: C09112a6<br />
*Capacity: 128 GB<br />
*User: thof<br />
*Filesystem: ext4<br />
*Kernel: 3.3.4<br />
<br />
# hdparm -Tt /dev/sda<br />
Timing cached reads: 3614 MB in 2.00 seconds = 1808.83 MB/sec<br />
Timing buffered disk reads: 736 MB in 3.01 seconds = 244.91 MB/sec<br />
<br />
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 6.5301 s, 164 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches <br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 4.1377 s, 260 MB/s<br />
<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.363142 s, 3.0 GB/s<br />
<br />
===Mushkin===<br />
==== Mushkin mSATA Atlas 128GB ====<br />
*SSD: Mushkin Atlas 128GB SATA III<br />
*Model Number: MKNSSDAT120GB-DX <br />
*Firmware: 504ABBF0<br />
*Capacity: 120 GB<br />
*Misc: SATA II Port (mSATA), linux 3.6.4-1-ck, ext4, Sandforce, <br />
*User: WonderWoofy<br />
<br />
# hdparm -Tt /dev/sda<br />
/dev/sdb:<br />
Timing cached reads: 16116 MB in 2.00 seconds = 8065.82 MB/sec<br />
Timing buffered disk reads: 458 MB in 3.00 seconds = 152.53 MB/sec<br />
<br />
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 4.09965 s, 262 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches <br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 4.4438 s, 242 MB/s<br />
<br />
# dd if=/tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.143544 s, 7.5 GB/s<br />
<br />
===Liteon===<br />
====Liteon M3S====<br />
*SSD: Liteon M3S 256GB SATA III<br />
*Model Number: LCT-256M3S <br />
*Firmware: VRDC<br />
*Capacity: 256 GB<br />
*User: AleksMK<br />
<br />
# hdparm -Tt /dev/sda<br />
/dev/sda:<br />
Timing cached reads: 8406 MB in 2.00 seconds = 4206.12 MB/sec<br />
Timing buffered disk reads: 1212 MB in 3.00 seconds = 403.81 MB/sec<br />
<br />
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 3.2338 s, 332 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches <br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 2.48531 s, 432 MB/s<br />
<br />
# dd if=/tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.24457 s, 4.4 GB/s<br />
<br />
<br />
===IBM===<br />
==== IBM MLC 128GB ====<br />
*[[User: darkol]]<br />
*SSD: IBM 128GB SATA 2.5" MLC HS Enterprise Value SSD<br />
*Model Number: 90Y8648<br />
*Firmware Version: <br />
*Capacity: 128 GB<br />
*User: darkol<br />
*Kernel:<br />
*Filesystem: ext4<br />
*System: IBM x3650 M4<br />
<br />
# RAID1<br />
# hdparm -Tt /dev/sda<br />
/dev/sda:<br />
Timing cached reads: 17260 MB in 2.00 seconds = 8642.01 MB/sec<br />
Timing buffered disk reads: 1262 MB in 3.00 seconds = 420.27 MB/sec<br />
<br />
# RAID5<br />
# hdparm -Tt /dev/sdb<br />
/dev/sda:<br />
Timing cached reads: 17108 MB in 2.00 seconds = 8565.69 MB/sec<br />
Timing buffered disk reads: 3986 MB in 3.00 seconds = 1328.38 MB/sec<br />
<br />
= Encrypted Partitions =<br />
<br />
This section should show some data for encrypted partitions.<br />
<br />
== dm-crypt with AES ==<br />
<br />
Please list your CPU and if you are using AES-NI. Without AES-NI support in the CPU, the processor will be the bottleneck long before you touch the >500MB/s SSD speeds. <br />
<br />
'''i7-620M Benchmark'''<br />
*~570 MB/s :With AES-NI<br />
*~100 MB/s :Without AES-NI<br />
<br />
'''i5-3210M'''<br />
*~500 MB/s :With AES-NI<br />
*~200 MB/s :Without AES-NI<br />
<br />
=== Crucial ===<br />
<br />
The crucial drive does not use any compression to reach its speeds, so it is expected to be fast.<br />
<br />
==== Crucial M4 256 Gb ====<br />
<br />
* User: crobe<br />
* Filesystem: ext4 on dm-crypt<br />
* Running Sata 6 Gbit/s on an older 3 Gbit/s controller<br />
* Comment: The drive is faster on writing ( on fresh space ), which has been observed on the internet. Maybe this is the maximum of my machine.<br />
<br />
# cryptsetup status<br />
type: LUKS1<br />
cipher: aes-xts-plain<br />
keysize: 256 bits<br />
<br />
# hdparm -Tt /dev/sda<br />
/dev/sda:<br />
Timing cached reads: 3012 MB in 2.00 seconds = 1507.62 MB/sec<br />
Timing buffered disk reads: 558 MB in 3.00 seconds = 185.93 MB/sec<br />
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 Datensätze ein<br />
1024+0 Datensätze aus<br />
1073741824 Bytes (1,1 GB) kopiert, 7,86539 s, 137 MB/s<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 Datensätze ein<br />
1024+0 Datensätze aus<br />
1073741824 Bytes (1,1 GB) kopiert, 9,78325 s, 110 MB/s<br />
<br />
=== OCZ ===<br />
<br />
The OCZ Drives use compression on Data, so with uncompressible encrypted Data, speeds are expected to be way lower. Still, seek times should be as low as ever and the drive shouldn't get slower when it gets full, so there should be enough speed.<br />
<br />
==== OCZ-VERTEX2 180GB ====<br />
<br />
* SSD: OCZ <br />
* Model Number: Vertex2 <br />
* Capacity: 180Gb <br />
* User: crobe<br />
* Filesystem: ext4 on dm-crypt with AES, essiv, sha256<br />
* The bottleneck for the read/write speeds is definately the drive<br />
<br />
# hdparm -Tt /dev/sda<br />
/dev/sda:<br />
Timing cached reads: 2842 MB in 2.00 seconds = 1422.61 MB/sec<br />
Timing buffered disk reads: 550 MB in 3.00 seconds = 183.26 MB/sec<br />
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 Datensätze ein<br />
1024+0 Datensätze aus<br />
1073741824 Bytes (1,1 GB) kopiert, 16,9194 s, 63,5 MB/s<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 Datensätze ein<br />
1024+0 Datensätze aus<br />
1073741824 Bytes (1,1 GB) kopiert, 14,5509 s, 73,8 MB/s<br />
<br />
Same values for bonnie++.<br />
<br />
=== Samsung ===<br />
<br />
==== SAMSUNG 470 128GB ====<br />
<br />
*SSD: SAMSUNG 470 128GB<br />
*Firmware: AXM09B1Q<br />
*Capacity: 128 GB<br />
*User: FredericChopin<br />
<br />
# cryptsetup status<br />
type: LUKS1<br />
cipher: aes-xts-plain<br />
keysize: 512 bits<br />
offset: 8192 sectors<br />
<br />
# hdparm -Tt /dev/sda<br />
/dev/sda:<br />
Timing cached reads: 3226 MB in 2.00 seconds = 1614.42 MB/sec<br />
Timing buffered disk reads: 570 MB in 3.00 seconds = 189.84 MB/sec<br />
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 9.62518 s, 112 MB/s<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 9.34282 s, 115 MB/s<br />
<br />
==== SAMSUNG 830 256GB ====<br />
<br />
*SSD: Samsung 830 256GB<br />
*Model Number: MZ-7PC256B/WW<br />
*Firmware Version: CXM03BQ1<br />
*Capacity: 256 GB<br />
*User: stefseel<br />
*Kernel: 3.4.6-1-ARCH (with aesni_intel module)<br />
*Filesystem: ext4 (relatime,discard) over LVM2 over dm-crypt/LUKS (allow-discards)<br />
*System: Lenovo ThinkPad T430 (i5-3210M)<br />
<br />
# hdparm -Tt /dev/sda<br />
/dev/sda:<br />
Timing cached reads: 15000 MB in 2.00 seconds = 7500 MB/sec<br />
Timing buffered disk reads: 1470 MB in 3.00 seconds = 490 MB/sec<br />
<br />
With default Arch settings with installed pm-utils: JOURNAL_COMMIT_TIME_AC=0, DRIVE_READAHEAD_AC=256<br />
<br />
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 3.62668 s, 300 MB/s<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 4.07337 s, 170 MB/s<br />
<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.154298 s, 7.0 GB/s<br />
<br />
What annoyed me was the poor read performance. I observed that in battery mode with unplugged AC the read rate was 500 MB/s. I did some research and found out that pm-utils is to blame. In AC mode it sets journal commit time to zero and readahead to 256 whereas in battery mode it sets journal commit time to 600 and readahead to 3072. See scripts /usr/lib/pm-utils/power.d/journal-commit and /usr/lib/pm-utils/power.d/readahead. So I added a custom config to set journal commit time always to 600 and readahead always to 4096, the result made me happy :)<br />
<br />
# cat /etc/pm/config.d/config<br />
DRIVE_READAHEAD_AC=4096<br />
DRIVE_READAHEAD_BAT=4096<br />
JOURNAL_COMMIT_TIME_AC=600<br />
JOURNAL_COMMIT_TIME_BAT=600<br />
<br />
# echo 3 > /proc/sys/vm/drop_caches<br />
# dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 2.15534 s, 500 MB/s<br />
<br />
However there is still an issue: after resuming from suspend read rate goes down to 270 MB/s.<br />
<br />
<br />
==== SAMSUNG 830 256GB ====<br />
*[[User: hunterthompson]]<br />
*SSD: SAMSUNG 830 256GB<br />
*Firmware: CXM03B1Q<br />
*Capacity: 256 GB<br />
*System: Thinkpad X230, 16GB PC-1600 CL9 Kingston HyperX<br />
*CPU: i7-3520M, AES-NI, Hyper-Threaded, 2.9GHz-3.6GHz, Steady 3.4GHz with all 4 threads 100%<br />
*Kernel: x86_64 linux-grsec 3.5.4-1-grsec (Desktop, Virt, Host, KVM, Security)<br />
*Encryption: Full Disk, LVM2 on LUKS dm-crypt, Allow-Discards<br />
*Cryptsetup: -h sha512 -c aes-xts-plain64 -y -s 512 luksFormat --align-payload=8192<br />
*Filesystem: mkfs.ext4 -b 4096 -E stride=128,stripe-width=128 /dev/mapper/VolGroup00-lvolhome<br />
*fstab: ext4,rw,noatime,nodiratime,discard,stripe=128,data=ordered,errors=remount-ro<br />
*Notes: SATAIII, partitions aligned and no swap<br />
<br />
% dd bs=1M count=1024 if=7600_Retail_Ultimate_DVD.iso of=/dev/null conv=fdatasync<br />
dd: fsync failed for ‘/dev/null’: Invalid argument<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 3.42075 s, 314 MB/s<br />
<br />
% dd bs=1M count=1024 if=/dev/zero of=test conv=fdatasync<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 3.48574 s, 308 MB/s<br />
<br />
% dd bs=1M count=1024 if=/dev/zero of=test conv=fdatasync<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 3.45361 s, 311 MB/s<br />
<br />
% dd bs=1M count=1024 if=/dev/zero of=test conv=fdatasync<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 3.44276 s, 312 MB/s<br />
<br />
== Truecrypt ==<br />
<br />
= Comparison - high end SCSI RAID 0 hard drive benchmark =<br />
== LSI 320-2X Megaraid SCSI == <br />
<br />
* SSD: N/A<br />
* Model Number: LSI MegaRAID 320-2x RAID 0 x 2 Seagate Cheetah ST373455LC 15,000 RPM 146GB drives<br />
* Capacity: 292Gb <br />
* User: rabinnh<br />
* Filesystem: ext4 on x86_64<br />
* Comment: No, this is not an SSD, but Googlers should have a reasonable basis for comparison to a high end hard drive system, and you won't get much higher end for an individual workstation. The cost of this disk subsystem is conservatively $760, and it gives at best half the performance of most SSDs.<br />
<br />
<pre>$sudo hdparm -Tt /dev/sda2<br />
/dev/sda2:<br />
Timing cached reads: 6344 MB in 2.00 seconds = 3174.02 MB/sec<br />
Timing buffered disk reads: 442 MB in 3.01 seconds = 146.97 MB/sec</pre><br />
<br />
<pre>$dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 7.13482 s, 150 MB/s<br />
</pre><br />
<pre><br />
$echo 3 > /proc/sys/vm/drop_caches<br />
$dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 7.24267 s, 148 MB/s</pre><br />
<br />
<pre>$dd if=tempfile of=/dev/null bs=1M count=1024<br />
1024+0 records in<br />
1024+0 records out<br />
1073741824 bytes (1.1 GB) copied, 0.459814 s, 2.3 GB/s</pre></div>Wzyboyhttps://wiki.archlinux.org/index.php?title=LVM&diff=285149LVM2013-11-29T02:30:11Z<p>Wzyboy: /* Configuration */</p>
<hr />
<div>[[Category:Getting and installing Arch]]<br />
[[Category:File systems]]<br />
[[cs:LVM]]<br />
[[de:LVM]]<br />
[[es:LVM]]<br />
[[fr:LVM]]<br />
[[it:LVM]]<br />
[[ru:LVM]]<br />
[[tr:LVM]]<br />
[[zh-CN:LVM]]<br />
{{Article summary start}}<br />
{{Article summary text|This article will provide an example of how to install and configure Arch Linux with Logical Volume Manager (LVM).}}<br />
{{Article summary heading|Required software}}<br />
{{Article summary text|{{pkg|lvm2}}}}<br />
{{Article summary heading|Related}}<br />
{{Article summary wiki|Software RAID and LVM}}<br />
{{Article summary wiki|System Encryption with LUKS}}<br />
{{Article summary wiki|Encrypted LVM}}<br />
{{Article summary end}}<br />
<br />
== Introduction ==<br />
<br />
{{Wikipedia|Logical Volume Manager (Linux)}}<br />
<br />
=== LVM Building Blocks ===<br />
<br />
Logical Volume Management makes use of the [http://sources.redhat.com/dm/ device-mapper] feature of the Linux kernel to provide a system of partitions that is independent of the underlying disk's layout. With LVM you can abstract your storage space and have "virtual partitions" which makes it easier to extend and shrink partitions (subject to the filesystem you use allowing this) and add/remove partitions without worrying about whether you have enough contiguous space on a particular disk, without getting caught up in the problems of fdisking a disk that is in use (and wondering whether the kernel is using the old or new partition table) and without having to move other partition out of the way. This is strictly an ease-of-management issue: it does not provide any additional security. However, it sits nicely with the other two technologies we are using.<br />
<br />
The basic building blocks of LVM are:<br />
<br />
* '''Physical volume (PV)''': Partition on hard disk (or even hard disk itself or loopback file) on which you can have volume groups. It has a special header and is divided into physical extents. Think of physical volumes as big building blocks which can be used to build your hard drive.<br />
* '''Volume group (VG)''': Group of physical volumes that are used as storage volume (as one disk). They contain logical volumes. Think of volume groups as hard drives.<br />
* '''Logical volume (LV)''': A "virtual/logical partition" that resides in a volume group and is composed of physical extents. Think of logical volumes as normal partitions.<br />
* '''Physical extent (PE)''': A small part of a disk (usually 4MiB) that can be assigned to a logical Volume. Think of physical extents as parts of disks that can be allocated to any partition.<br />
<br />
Example:<br />
'''Physical disks'''<br />
<br />
Disk1 (/dev/sda):<br />
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _<br />
|Partition1 50GB (Physical volume) |Partition2 80GB (Physical volume) |<br />
|/dev/sda1 |/dev/sda2 |<br />
|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |<br />
<br />
Disk2 (/dev/sdb):<br />
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _<br />
|Partition1 120GB (Physical volume) |<br />
|/dev/sdb1 |<br />
| _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ __ _ _|<br />
<br />
'''LVM logical volumes'''<br />
<br />
Volume Group1 (/dev/MyStorage/ = /dev/sda1 + /dev/sda2 + /dev/sdb1):<br />
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ <br />
|Logical volume1 15GB |Logical volume2 35GB |Logical volume3 200GB |<br />
|/dev/MyStorage/rootvol|/dev/MyStorage/homevol |/dev/MyStorage/mediavol |<br />
|_ _ _ _ _ _ _ _ _ _ _ |_ _ _ _ _ _ _ _ _ _ _ _ _ |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |<br />
<br />
=== Advantages ===<br />
<br />
LVM gives you more flexibility than just using normal hard drive partitions:<br />
* Use any number of disks as one big disk.<br />
* Have logical volumes stretched over several disks.<br />
* Create small logical volumes and resize them "dynamically" as they get more filled.<br />
* Resize logical volumes regardless of their order on disk. It does not depend on the position of the LV within VG, there is no need to ensure surrounding available space.<br />
* Resize/create/delete logical and physical volumes online. Filesystems on them still need to be resized, but some support online resizing.<br />
* Online/live migration of LV being used by services to different disks without having to restart services.<br />
* Snapshots allow you to backup a frozen copy of the filesystem, while keeping service downtime to a minimum.<br />
<br />
These can be very helpful in a server situation, desktop less so, but you must decide if the features are worth the abstraction.<br />
<br />
=== Disadvantages ===<br />
<br />
* Linux exclusive (almost). There is no official support in most other OS (FreeBSD, Windows..).<br />
* Additional steps in setting up the system, more complicated.<br />
* If you use the [[btrfs]] filesystem, its Subvolume feature will also give you the benefit of having a flexible layout. In that case, using the additional Abstraction layer of LVM may be unnecessary.<br />
<br />
== Installing Arch Linux on LVM ==<br />
<br />
You should create your LVM Volumes between the [[Partitioning]] and [[File Systems#Format a device|formatting]] steps of the Installation Procedure. Instead of directly formating a partition to be your root filesystem, it will be created inside a logical volume (LV). <br />
<br />
Quick overview: <br />
* Create partition(s) where your PV will reside. Set the partition type to 'Linux LVM', which is 8e if you use MBR, 8e00 for GPT.<br />
* Create your physical volumes (PV). If you have one disk it is best to just create one PV in one large partition. If you have multiple disks you can create partitions on each of them and create a PV on each partition.<br />
* Create your volume group (VG) and add all the PV to it.<br />
* Create logical volumes (LV) inside your VG.<br />
* Continue with “Format the partitions” step of [[Beginners Guide]].<br />
* When you reach the “Create initial ramdisk environment” step in the Beginners Guide, add the lvm hook to mkinitcpio.conf (see below for details).<br />
<br />
{{Warning|{{ic|/boot}} cannot reside in LVM when using [[GRUB Legacy]], which does not support LVM. [[GRUB]] users do not have this limitation. If you need to use GRUB Legacy, you must create a separate /boot partition and format it directly. }}<br />
<br />
=== Create physical volumes ===<br />
<br />
Make sure you target the right partitions! To find the partitions with type 'Linux LVM':<br />
* MBR system: {{Ic|fdisk -l}}<br />
* GPT system: {{Ic|lsblk}} and then {{Ic|gdisk -l ''disk-device''}}<br />
<br />
Create a physical volume on them:<br />
# pvcreate ''disk-device''<br />
''disk-device'' may be e.g. /dev/sda2.<br />
This command creates a header on each partition so it can be used for LVM.<br />
You can track created physical volumes with:<br />
# pvdisplay<br />
<br />
{{Note|If using a SSD use {{ic|pvcreate --dataalignment 1m /dev/sda2}} (for erase block size < 1MiB), see e.g. [http://serverfault.com/questions/356534/ssd-erase-block-size-lvm-pv-on-raw-device-alignment here]}}<br />
<br />
=== Create volume group ===<br />
<br />
Next step is to create a volume group on this physical volume. First you need to create a volume group on one of the new partitions and then add to it all other physical volumes you want to have in it:<br />
# vgcreate VolGroup00 /dev/sda2<br />
# vgextend VolGroup00 /dev/sdb1<br />
Also you can use any other name you like instead of VolGroup00 for a volume group when creating it. You can track how your volume group grows with:<br />
# vgdisplay<br />
<br />
{{Note|You can create more than one volume group if you need to, but then you will not have all your storage presented as one disk.}}<br />
<br />
=== Create logical volumes ===<br />
<br />
Now we need to create logical volumes on this volume group. You create a logical volume with the next command by giving the name of a new logical volume, its size, and the volume group it will live on:<br />
# lvcreate -L 10G VolGroup00 -n lvolhome<br />
This will create a logical volume that you can access later with {{ic|/dev/mapper/Volgroup00-lvolhome}} or {{ic|/dev/VolGroup00/lvolhome}}. Same as with the volume groups, you can use any name you want for your logical volume when creating it.<br />
<br />
To create swap on a logical volume, an additional argument is needed:<br />
# lvcreate -C y -L 10G VolGroup00 -n lvolswap<br />
The {{Ic|-C y}} is used to create a contiguous partition, which means that your swap space does not get partitioned over one or more disks nor over non-contiguous physical extents.<br />
<br />
If you want to fill all the free space left on a volume group, use the next command:<br />
# lvcreate -l +100%FREE VolGroup00 -n lvolmedia<br />
<br />
You can track created logical volumes with:<br />
# lvdisplay<br />
<br />
{{Note|You may need to load the ''device-mapper'' kernel module ('''modprobe dm-mod''') for the above commands to succeed:}}<br />
<br />
{{Tip|You can start out with relatively small logical volumes and expand them later if needed. For simplicity, leave some free space in the volume group so there is room for expansion.}}<br />
<br />
=== Create filesystems and mount logical volumes ===<br />
<br />
Your logical volumes should now be located in {{ic|/dev/mapper/}} and {{ic|/dev/''YourVolumeGroupName''}}. If you cannot find them, use the next commands to bring up the module for creating device nodes and to make volume groups available:<br />
# modprobe dm-mod<br />
# vgscan<br />
# vgchange -ay<br />
Now you can create filesystems on logical volumes and mount them as normal partitions (if you are installing Arch linux, refer to [[Beginners' Guide#Mount the partitions|mounting the partitions]] for additional details):<br />
# mkfs.ext4 /dev/mapper/VolGroup00-lvolhome<br />
# mount /dev/mapper/VolGroup00-lvolhome /home<br />
<br />
{{Warning|When choosing mountpoints, just select your newly created logical volumes (use: {{ic|/dev/mapper/Volgroup00-lvolhome}}). Do '''not''' select the actual partitions on which logical volumes were created (do not use: {{ic|/dev/sda2}}).}}<br />
<br />
=== Add lvm hook to mkinitcpio.conf ===<br />
<br />
You'll need to make sure the {{Ic|udev}} and {{Ic|lvm2}} [[mkinitcpio]] hooks are enabled.<br />
<br />
{{Ic|udev}} is there by default. Edit the file and insert {{Ic|lvm2}} between {{Ic|block}} and {{Ic|filesystem}} like so:<br />
<br />
{{hc|/etc/mkinitcpio.conf:|<nowiki>HOOKS="base udev ... block lvm2 filesystems"</nowiki>}}<br />
<br />
Afterwards, you can continue in normal installation instructions with the [[Mkinitcpio#Image_creation_and_activation|create an initial ramdisk]] step.<br />
<br />
== Configuration ==<br />
<br />
=== Advanced options ===<br />
<br />
If you need monitoring (needed for snapshots) you can enable lvmetad. <br />
For this set {{ic|1=use_lvmetad = 1}} in {{ic|/etc/lvm/lvm.conf}}.<br />
This is the default by now. <br />
<br />
You can restrict the volumes that are activated automatically by setting the {{Ic|auto_activation_volume_list}} in {{Ic|/etc/lvm/lvm.conf}}. If in doubt, leave this option commented out.<br />
<br />
=== Grow logical volume ===<br />
<br />
To grow a logical volume you first need to grow the logical volume and then the filesystem to use the newly created free space. Let us say we have a logical volume of 15GB with ext3 on it and we want to grow it to 20G. We need to do the following steps: <br />
# lvextend -L 20G VolGroup00/lvolhome (or lvresize -L +5G VolGroup00/lvolhome)<br />
# resize2fs /dev/VolGroup00/lvolhome<br />
You may use {{Ic|lvresize}} instead of {{Ic|lvextend}}.<br />
<br />
If you want to fill all the free space on a volume group, use the next command:<br />
# lvextend -l +100%FREE VolGroup00/lvolhome<br />
<br />
{{Warning|Not all filesystems support growing without loss of data and/or growing online.}}<br />
<br />
{{Note|If you do not resize your filesystem, you will still have a volume with the same size as before (volume will be bigger but partly unused).}}<br />
<br />
=== Shrink logical volume ===<br />
<br />
Because your filesystem is probably as big as the logical volume it resides on, you need to shrink the filesystem first and then shrink the logical volume. Depending on your filesystem, you may need to unmount it first. Let us say we have a logical volume of 15GB with ext3 on it and we want to shrink it to 10G. We need to do the following steps: <br />
# resize2fs /dev/VolGroup00/lvolhome 9G<br />
# lvreduce -L 10G VolGroup00/lvolhome<br />
<br />
Here we shrunk the filesystem more than needed so that when we shrunk the logical volume we did not accidentally cut off the end of the filesystem. After that we normally grow the filesystem to fill all free space left on logical volume. You may use {{Ic|lvresize}} instead of {{Ic|lvreduce}}.<br />
# lvresize -L -5G VolGroup00/lvolhome<br />
# resize2fs /dev/VolGroup00/lvolhome<br />
<br />
{{Warning|<br />
* Do not reduce the filesystem size to less than the amount of space occupied by data or you risk data loss.<br />
* Not all filesystems support shrinking without loss of data and/or shrinking online.<br />
}}<br />
<br />
{{Note|It is better to reduce the filesystem to a smaller size than the logical volume, so that after resizing the logical volume, we do not accidentally cut off some data from the end of the filesystem.}}<br />
<br />
=== Remove logical volume ===<br />
<br />
{{Warning|Before you remove a logical volume, make sure to move all data that you want to keep somewhere else, otherwise it will be lost!}}<br />
<br />
First, find out the name of the logical volume you want to remove. You can get a list of all logical volumes installed on the system with:<br />
<br />
# lvs<br />
<br />
Next, look up the mountpoint for your chosen logical volume...:<br />
<br />
$ df -h<br />
<br />
... and unmount it:<br />
<br />
# umount /your_mountpoint<br />
<br />
Finally, remove the logical volume:<br />
<br />
# lvremove /dev/yourVG/yourLV<br />
<br />
Confirm by typing {{ic|y}} and you are done.<br />
<br />
Do not forget, to update {{ic|/etc/fstab}}!<br />
<br />
You can verify the removal of your logical volume by typing "lvs" as root again (see first step of this section).<br />
<br />
=== Add physical volume to a volume group ===<br />
<br />
You first create a new physical volume on the block device you wish to use, then extend your volume group<br />
<br />
{{bc|1=<br />
# pvcreate /dev/sdb1<br />
# vgextend VolGroup00 /dev/sdb1<br />
}}<br />
<br />
This of course will increase the total number of physical extents on your volume group, which can be allocated by logical volumes as you see fit.<br />
<br />
{{Note|It is considered good form to have a [[Partitioning|partition table]] on your storage medium below LVM. Use the appropriate type code: {{ic|8e}} for MBR, and {{ic|8e00}} for GPT partitions.}}<br />
<br />
=== Remove partition from a volume group ===<br />
<br />
All of the data on that partition needs to be moved to another partition. Fortunately, LVM makes this easy:<br />
# pvmove /dev/sdb1<br />
If you want to have the data on a specific physical volume, specify that as the second argument to {{Ic|pvmove}}:<br />
# pvmove /dev/sdb1 /dev/sdf1<br />
Then the physical volume needs to be removed from the volume group:<br />
# vgreduce myVg /dev/sdb1<br />
Or remove all empty physical volumes:<br />
# vgreduce --all vg0<br />
<br />
And lastly, if you want to use the partition for something else, and want to avoid LVM thinking that the partition is a physical volume:<br />
# pvremove /dev/sdb1<br />
<br />
=== Snapshots ===<br />
<br />
==== Introduction ====<br />
<br />
LVM allows you to take a snapshot of your system in a much more efficient way than a traditional backup. It does this efficiently by using a COW (copy-on-write) policy. The initial snapshot you take simply contains hard-links to the inodes of your actual data. So long as your data remains unchanged, the snapshot merely contains its inode pointers and not the data itself. Whenever you modify a file or directory that the snapshot points to, LVM automatically clones the data, the old copy referenced by the snapshot, and the new copy referenced by your active system. Thus, you can snapshot a system with 35GB of data using just 2GB of free space so long as you modify less than 2GB (on both the original and snapshot).<br />
<br />
==== Configuration ====<br />
<br />
You create snapshot logical volumes just like normal ones.<br />
<br />
# lvcreate --size 100M --snapshot --name snap01 /dev/mapper/vg0-pv<br />
With that volume, you may modify less than 100M of data, before the snapshot volume fills up.<br />
<br />
Reverting the modified 'pv' logical volume to the state when the 'snap01' snapshot was taken can be done with<br />
<br />
{{ic|# lvconvert --merge /dev/vg0/snap01}}<br />
<br />
In case the origin logical volume is active, merging will occur on the next reboot.(Merging can be done even from a LiveCD)<br />
<br />
The snapshot will no longer exist after merging.<br />
<br />
Also multiple snapshots can be taken and each one can be merged with the origin logical volume at will.<br />
<br />
The snapshot can be mounted and backed up with '''dd''' or '''tar'''. The size of the backup file done with '''dd''' will be the size of the files residing on the snapshot volume. <br />
To restore just create a snapshot, mount it, and write or extract the backup to it. And then merge it with the origin.<br />
<br />
It is important to have the ''dm_snapshot'' module listed in the MODULES variable of {{ic|/etc/mkinitcpio.conf}}, otherwise the system will not boot. If you do this on an already installed system, make sure to rebuild the image with<br />
# mkinitcpio -g /boot/initramfs-linux.img<br />
<br />
Todo: scripts to automate snapshots of root before updates, to rollback... updating {{ic|menu.lst}} to boot snapshots (separate article?)<br />
<br />
snapshots are primarily used to provide a frozen copy of a filesystem to make backups; a backup taking two hours provides a more consistent image of the filesystem than directly backing up the partition.<br />
<br />
See [[Create root filesystem snapshots with LVM]] for automating the creation of clean root filesystem snapshots during system startup for backup and rollback.<br />
<br />
[[Encrypted_LVM]]<br />
<br />
If you have LVM volumes not activated via the [[Mkinitcpio|initramfs]], [[#Using units|enable]] the '''lvm-monitoring''' service, which is provided by the {{pkg|lvm2}} package.<br />
<br />
== Troubleshooting ==<br />
<br />
=== Changes that could be required due to changes in the Arch-Linux defaults ===<br />
<br />
The {{ic|1=use_lvmetad = 1}} must be set in {{ic|/etc/lvm/lvm.conf}}. This is the default now - if you have a {{ic|lvm.conf.pacnew}} file, you must merge this change.<br />
<br />
=== LVM commands do not work ===<br />
<br />
* Load proper module:<br />
# modprobe dm_mod<br />
<br />
The {{ic|dm_mod}} module should be automatically loaded. In case it does not, you can try:<br />
<br />
{{hc|/etc/mkinitcpio.conf:|<nowiki>MODULES="dm_mod ..."</nowiki>}}<br />
<br />
You will need to [[Mkinitcpio#Image_creation_and_activation|rebuild]] the initramfs to commit any changes you made.<br />
<br />
* Try preceding commands with ''lvm'' like this:<br />
# lvm pvdisplay<br />
<br />
=== Logical Volumes do not show up ===<br />
<br />
If you are trying to mount existing logical volumes, but they do not show up in {{ic|lvscan}}, you can use the following commands to activate them:<br />
<br />
# vgscan<br />
# vgchange -ay<br />
<br />
=== LVM on removable media ===<br />
<br />
Symptoms:<br />
# vgscan<br />
Reading all physical volumes. This may take a while...<br />
/dev/backupdrive1/backup: read failed after 0 of 4096 at 319836585984: Input/output error<br />
/dev/backupdrive1/backup: read failed after 0 of 4096 at 319836643328: Input/output error<br />
/dev/backupdrive1/backup: read failed after 0 of 4096 at 0: Input/output error<br />
/dev/backupdrive1/backup: read failed after 0 of 4096 at 4096: Input/output error<br />
Found volume group "backupdrive1" using metadata type lvm2<br />
Found volume group "networkdrive" using metadata type lvm2<br />
<br />
Cause:<br />
:Removing an external LVM drive without deactivating the volume group(s) first. Before you disconnect, make sure to:<br />
# vgchange -an ''volume group name''<br />
<br />
Fix: (assuming you already tried to activate the volume group with {{ic|# vgchange -ay ''vg''}}, and are receiving the Input/output errors:<br />
# vgchange -an ''volume group name''<br />
Unplug the external drive and wait a few minutes:<br />
# vgscan<br />
# vgchange -ay ''volume group name''<br />
<br />
=== Kernel options ===<br />
<br />
In kernel options, you may need {{ic|dolvm}}. {{ic|<nowiki>root=</nowiki>}} should be set to the logical volume, e.g {{ic|/dev/mapper/''vg-name''-''lv-name''}}.<br />
<br />
== See also ==<br />
<br />
* [http://sourceware.org/lvm2/ LVM2 Resource Page] on SourceWare.org<br />
* [http://tldp.org/HOWTO/LVM-HOWTO/ LVM HOWTO] article at The Linux Documentation project<br />
* [http://www.gentoo.org/doc/en/lvm2.xml Gentoo LVM2 installation] guide at Gentoo documentation<br />
* [http://en.gentoo-wiki.com/wiki/LVM LVM] article at Gentoo wiki<br />
* [http://www.joshbryan.com/blog/2008/01/02/lvm2-mirrors-vs-md-raid-1/ LVM2 Mirrors vs. MD Raid 1] post by Josh Bryan<br />
* [http://www.tutonics.com/2012/11/ubuntu-lvm-guide-part-1.html Ubuntu LVM Guide Part 1][http://www.tutonics.com/2012/12/lvm-guide-part-2-snapshots.html Part 2 detals snapshots]</div>Wzyboyhttps://wiki.archlinux.org/index.php?title=LVM&diff=285143LVM2013-11-29T01:27:07Z<p>Wzyboy: /* Installing Arch Linux on LVM */ add internal link</p>
<hr />
<div>[[Category:Getting and installing Arch]]<br />
[[Category:File systems]]<br />
[[cs:LVM]]<br />
[[de:LVM]]<br />
[[es:LVM]]<br />
[[fr:LVM]]<br />
[[it:LVM]]<br />
[[ru:LVM]]<br />
[[tr:LVM]]<br />
[[zh-CN:LVM]]<br />
{{Article summary start}}<br />
{{Article summary text|This article will provide an example of how to install and configure Arch Linux with Logical Volume Manager (LVM).}}<br />
{{Article summary heading|Required software}}<br />
{{Article summary text|{{pkg|lvm2}}}}<br />
{{Article summary heading|Related}}<br />
{{Article summary wiki|Software RAID and LVM}}<br />
{{Article summary wiki|System Encryption with LUKS}}<br />
{{Article summary wiki|Encrypted LVM}}<br />
{{Article summary end}}<br />
<br />
== Introduction ==<br />
<br />
{{Wikipedia|Logical Volume Manager (Linux)}}<br />
<br />
=== LVM Building Blocks ===<br />
<br />
Logical Volume Management makes use of the [http://sources.redhat.com/dm/ device-mapper] feature of the Linux kernel to provide a system of partitions that is independent of the underlying disk's layout. With LVM you can abstract your storage space and have "virtual partitions" which makes it easier to extend and shrink partitions (subject to the filesystem you use allowing this) and add/remove partitions without worrying about whether you have enough contiguous space on a particular disk, without getting caught up in the problems of fdisking a disk that is in use (and wondering whether the kernel is using the old or new partition table) and without having to move other partition out of the way. This is strictly an ease-of-management issue: it does not provide any additional security. However, it sits nicely with the other two technologies we are using.<br />
<br />
The basic building blocks of LVM are:<br />
<br />
* '''Physical volume (PV)''': Partition on hard disk (or even hard disk itself or loopback file) on which you can have volume groups. It has a special header and is divided into physical extents. Think of physical volumes as big building blocks which can be used to build your hard drive.<br />
* '''Volume group (VG)''': Group of physical volumes that are used as storage volume (as one disk). They contain logical volumes. Think of volume groups as hard drives.<br />
* '''Logical volume (LV)''': A "virtual/logical partition" that resides in a volume group and is composed of physical extents. Think of logical volumes as normal partitions.<br />
* '''Physical extent (PE)''': A small part of a disk (usually 4MiB) that can be assigned to a logical Volume. Think of physical extents as parts of disks that can be allocated to any partition.<br />
<br />
Example:<br />
'''Physical disks'''<br />
<br />
Disk1 (/dev/sda):<br />
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _<br />
|Partition1 50GB (Physical volume) |Partition2 80GB (Physical volume) |<br />
|/dev/sda1 |/dev/sda2 |<br />
|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |<br />
<br />
Disk2 (/dev/sdb):<br />
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _<br />
|Partition1 120GB (Physical volume) |<br />
|/dev/sdb1 |<br />
| _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ __ _ _|<br />
<br />
'''LVM logical volumes'''<br />
<br />
Volume Group1 (/dev/MyStorage/ = /dev/sda1 + /dev/sda2 + /dev/sdb1):<br />
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ <br />
|Logical volume1 15GB |Logical volume2 35GB |Logical volume3 200GB |<br />
|/dev/MyStorage/rootvol|/dev/MyStorage/homevol |/dev/MyStorage/mediavol |<br />
|_ _ _ _ _ _ _ _ _ _ _ |_ _ _ _ _ _ _ _ _ _ _ _ _ |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |<br />
<br />
=== Advantages ===<br />
<br />
LVM gives you more flexibility than just using normal hard drive partitions:<br />
* Use any number of disks as one big disk.<br />
* Have logical volumes stretched over several disks.<br />
* Create small logical volumes and resize them "dynamically" as they get more filled.<br />
* Resize logical volumes regardless of their order on disk. It does not depend on the position of the LV within VG, there is no need to ensure surrounding available space.<br />
* Resize/create/delete logical and physical volumes online. Filesystems on them still need to be resized, but some support online resizing.<br />
* Online/live migration of LV being used by services to different disks without having to restart services.<br />
* Snapshots allow you to backup a frozen copy of the filesystem, while keeping service downtime to a minimum.<br />
<br />
These can be very helpful in a server situation, desktop less so, but you must decide if the features are worth the abstraction.<br />
<br />
=== Disadvantages ===<br />
<br />
* Linux exclusive (almost). There is no official support in most other OS (FreeBSD, Windows..).<br />
* Additional steps in setting up the system, more complicated.<br />
* If you use the [[btrfs]] filesystem, its Subvolume feature will also give you the benefit of having a flexible layout. In that case, using the additional Abstraction layer of LVM may be unnecessary.<br />
<br />
== Installing Arch Linux on LVM ==<br />
<br />
You should create your LVM Volumes between the [[Partitioning]] and [[File Systems#Format a device|formatting]] steps of the Installation Procedure. Instead of directly formating a partition to be your root filesystem, it will be created inside a logical volume (LV). <br />
<br />
Quick overview: <br />
* Create partition(s) where your PV will reside. Set the partition type to 'Linux LVM', which is 8e if you use MBR, 8e00 for GPT.<br />
* Create your physical volumes (PV). If you have one disk it is best to just create one PV in one large partition. If you have multiple disks you can create partitions on each of them and create a PV on each partition.<br />
* Create your volume group (VG) and add all the PV to it.<br />
* Create logical volumes (LV) inside your VG.<br />
* Continue with “Format the partitions” step of [[Beginners Guide]].<br />
* When you reach the “Create initial ramdisk environment” step in the Beginners Guide, add the lvm hook to mkinitcpio.conf (see below for details).<br />
<br />
{{Warning|{{ic|/boot}} cannot reside in LVM when using [[GRUB Legacy]], which does not support LVM. [[GRUB]] users do not have this limitation. If you need to use GRUB Legacy, you must create a separate /boot partition and format it directly. }}<br />
<br />
=== Create physical volumes ===<br />
<br />
Make sure you target the right partitions! To find the partitions with type 'Linux LVM':<br />
* MBR system: {{Ic|fdisk -l}}<br />
* GPT system: {{Ic|lsblk}} and then {{Ic|gdisk -l ''disk-device''}}<br />
<br />
Create a physical volume on them:<br />
# pvcreate ''disk-device''<br />
''disk-device'' may be e.g. /dev/sda2.<br />
This command creates a header on each partition so it can be used for LVM.<br />
You can track created physical volumes with:<br />
# pvdisplay<br />
<br />
{{Note|If using a SSD use {{ic|pvcreate --dataalignment 1m /dev/sda2}} (for erase block size < 1MiB), see e.g. [http://serverfault.com/questions/356534/ssd-erase-block-size-lvm-pv-on-raw-device-alignment here]}}<br />
<br />
=== Create volume group ===<br />
<br />
Next step is to create a volume group on this physical volume. First you need to create a volume group on one of the new partitions and then add to it all other physical volumes you want to have in it:<br />
# vgcreate VolGroup00 /dev/sda2<br />
# vgextend VolGroup00 /dev/sdb1<br />
Also you can use any other name you like instead of VolGroup00 for a volume group when creating it. You can track how your volume group grows with:<br />
# vgdisplay<br />
<br />
{{Note|You can create more than one volume group if you need to, but then you will not have all your storage presented as one disk.}}<br />
<br />
=== Create logical volumes ===<br />
<br />
Now we need to create logical volumes on this volume group. You create a logical volume with the next command by giving the name of a new logical volume, its size, and the volume group it will live on:<br />
# lvcreate -L 10G VolGroup00 -n lvolhome<br />
This will create a logical volume that you can access later with {{ic|/dev/mapper/Volgroup00-lvolhome}} or {{ic|/dev/VolGroup00/lvolhome}}. Same as with the volume groups, you can use any name you want for your logical volume when creating it.<br />
<br />
To create swap on a logical volume, an additional argument is needed:<br />
# lvcreate -C y -L 10G VolGroup00 -n lvolswap<br />
The {{Ic|-C y}} is used to create a contiguous partition, which means that your swap space does not get partitioned over one or more disks nor over non-contiguous physical extents.<br />
<br />
If you want to fill all the free space left on a volume group, use the next command:<br />
# lvcreate -l +100%FREE VolGroup00 -n lvolmedia<br />
<br />
You can track created logical volumes with:<br />
# lvdisplay<br />
<br />
{{Note|You may need to load the ''device-mapper'' kernel module ('''modprobe dm-mod''') for the above commands to succeed:}}<br />
<br />
{{Tip|You can start out with relatively small logical volumes and expand them later if needed. For simplicity, leave some free space in the volume group so there is room for expansion.}}<br />
<br />
=== Create filesystems and mount logical volumes ===<br />
<br />
Your logical volumes should now be located in {{ic|/dev/mapper/}} and {{ic|/dev/''YourVolumeGroupName''}}. If you cannot find them, use the next commands to bring up the module for creating device nodes and to make volume groups available:<br />
# modprobe dm-mod<br />
# vgscan<br />
# vgchange -ay<br />
Now you can create filesystems on logical volumes and mount them as normal partitions (if you are installing Arch linux, refer to [[Beginners' Guide#Mount the partitions|mounting the partitions]] for additional details):<br />
# mkfs.ext4 /dev/mapper/VolGroup00-lvolhome<br />
# mount /dev/mapper/VolGroup00-lvolhome /home<br />
<br />
{{Warning|When choosing mountpoints, just select your newly created logical volumes (use: {{ic|/dev/mapper/Volgroup00-lvolhome}}). Do '''not''' select the actual partitions on which logical volumes were created (do not use: {{ic|/dev/sda2}}).}}<br />
<br />
=== Add lvm hook to mkinitcpio.conf ===<br />
<br />
You'll need to make sure the {{Ic|udev}} and {{Ic|lvm2}} [[mkinitcpio]] hooks are enabled.<br />
<br />
{{Ic|udev}} is there by default. Edit the file and insert {{Ic|lvm2}} between {{Ic|block}} and {{Ic|filesystem}} like so:<br />
<br />
{{hc|/etc/mkinitcpio.conf:|<nowiki>HOOKS="base udev ... block lvm2 filesystems"</nowiki>}}<br />
<br />
Afterwards, you can continue in normal installation instructions with the [[Mkinitcpio#Image_creation_and_activation|create an initial ramdisk]] step.<br />
<br />
== Configuration ==<br />
<br />
=== Advanced options ===<br />
<br />
If you need monitoring (needed for snapshots) you can enable lvmetad. <br />
For this set {{ic|1=use_lvmetad = 1}} in {{ic|/etc/lvm/lvm.conf}}.<br />
This is the default by now. <br />
<br />
You can restrict the volumes that are activated automatically by setting the {{Ic|auto_activation_volume_list}} in {{Ic|/etc/lvm/lvm.conf}}. If in doubt, leave this option commented out.<br />
<br />
=== Grow logical volume ===<br />
<br />
To grow a logical volume you first need to grow the logical volume and then the filesystem to use the newly created free space. Let us say we have a logical volume of 15GB with ext3 on it and we want to grow it to 20G. We need to do the following steps: <br />
# lvextend -L 20G VolGroup00/lvolhome (or lvresize -L +5G VolGroup00/lvolhome)<br />
# resize2fs /dev/VolGroup00/lvolhome<br />
You may use {{Ic|lvresize}} instead of {{Ic|lvextend}}.<br />
<br />
If you want to fill all the free space on a volume group, use the next command:<br />
# lvextend -l +100%FREE VolGroup00/lvolhome<br />
<br />
{{Warning|Not all filesystems support growing without loss of data and/or growing online.}}<br />
<br />
{{Note|If you do not resize your filesystem, you will still have a volume with the same size as before (volume will be bigger but partly unused).}}<br />
<br />
=== Shrink logical volume ===<br />
<br />
Because your filesystem is probably as big as the logical volume it resides on, you need to shrink the filesystem first and then shrink the logical volume. Depending on your filesystem, you may need to unmount it first. Let us say we have a logical volume of 15GB with ext3 on it and we want to shrink it to 10G. We need to do the following steps: <br />
# resize2fs /dev/VolGroup00/lvolhome 9G<br />
# lvreduce -L 10G VolGroup00/lvolhome<br />
<br />
Here we shrunk the filesystem more than needed so that when we shrunk the logical volume we did not accidentally cut off the end of the filesystem. After that we normally grow the filesystem to fill all free space left on logical volume. You may use {{Ic|lvresize}} instead of {{Ic|lvreduce}}.<br />
# lvresize -L -5G VolGroup00/lvolhome<br />
# resize2fs /dev/VolGroup00/lvolhome<br />
<br />
{{Warning|<br />
* Do not reduce the filesystem size to less than the amount of space occupied by data or you risk data loss.<br />
* Not all filesystems support shrinking without loss of data and/or shrinking online.<br />
}}<br />
<br />
{{Note|It is better to reduce the filesystem to a smaller size than the logical volume, so that after resizing the logical volume, we do not accidentally cut off some data from the end of the filesystem.}}<br />
<br />
=== Remove logical volume ===<br />
<br />
{{Warning|Before you remove a logical volume, make sure to move all data that you want to keep somewhere else, otherwise it will be lost!}}<br />
<br />
First, find out the name of the logical volume you want to remove. You can get a list of all logical volumes installed on the system with:<br />
<br />
# lvs<br />
<br />
Next, look up the mountpoint for your chosen logical volume...:<br />
<br />
$ df -h<br />
<br />
... and unmount it:<br />
<br />
# umount /your_mountpoint<br />
<br />
Finally, remove the logical volume:<br />
<br />
# lvremove /dev/yourVG/yourLV<br />
<br />
Confirm by typing {{ic|y}} and you are done.<br />
<br />
Do not forget, to update {{ic|/etc/fstab}}!<br />
<br />
You can verify the removal of your logical volume by typing "lvs" as root again (see first step of this section).<br />
<br />
=== Add physical volume to a volume group ===<br />
<br />
You first create a new physical volume on the block device you wish to use, then extend your volume group<br />
<br />
{{bc|1=<br />
# pvcreate /dev/sdb1<br />
# vgextend VolGroup00 /dev/sdb1<br />
}}<br />
<br />
This of course will increase the total number of physical extents on your volume group, which can be allocated by logical volumes as you see fit.<br />
<br />
{{Note|It is considered good form to have a [[Partitioning|partition table]] on your storage medium below LVM. Use the appropriate type code: {{ic|8e}} for MBR, and {{ic|8e00}} for GPT partitions.}}<br />
<br />
=== Remove partition from a volume group ===<br />
<br />
All of the data on that partition needs to be moved to another partition. Fortunately, LVM makes this easy:<br />
# pvmove /dev/sdb1<br />
If you want to have the data on a specific physical volume, specify that as the second argument to {{Ic|pvmove}}:<br />
# pvmove /dev/sdb1 /dev/sdf1<br />
Then the physical volume needs to be removed from the volume group:<br />
# vgreduce myVg /dev/sdb1<br />
Or remove all empty physical volumes:<br />
# vgreduce --all vg0<br />
<br />
And lastly, if you want to use the partition for something else, and want to avoid LVM thinking that the partition is a physical volume:<br />
# pvremove /dev/sdb1<br />
<br />
=== Snapshots ===<br />
<br />
==== Introduction ====<br />
<br />
LVM allows you to take a snapshot of your system in a much more efficient way than a traditional backup. It does this efficiently by using a COW (copy-on-write) policy. The initial snapshot you take simply contains hard-links to the inodes of your actual data. So long as your data remains unchanged, the snapshot merely contains its inode pointers and not the data itself. Whenever you modify a file or directory that the snapshot points to, LVM automatically clones the data, the old copy referenced by the snapshot, and the new copy referenced by your active system. Thus, you can snapshot a system with 35GB of data using just 2GB of free space so long as you modify less than 2GB (on both the original and snapshot).<br />
<br />
==== Configuration ====<br />
<br />
You create snapshot logical volumes just like normal ones.<br />
<br />
# lvcreate --size 100M --snapshot --name snap01 /dev/mapper/vg0-pv<br />
With that volume, you may modify less than 100M of data, before the snapshot volume fills up.<br />
<br />
Reverting the modified 'pv' logical volume to the state when the 'snap01' snapshot was taken can be with<br />
<br />
{{ic|# lvconvert --merge /dev/vg0/snap01}}<br />
<br />
In case the origin logical volume is active, merging will occur on the next reboot.(Merging can be done even from a LiveCD)<br />
<br />
The snapshot will no longer exist after merging.<br />
<br />
Also multiple snapshots can be taken and each one can be merged with the origin logical volume at will.<br />
<br />
The snapshot can be mounted and backed up with '''dd''' or '''tar'''. The size of the backup file done with '''dd''' will be the size of the files residing on the snapshot volume. <br />
To restore just create a snapshot, mount it, and write or extract the backup to it. And then merge it with the origin.<br />
<br />
It is important to have the ''dm_snapshot'' module listed in the MODULES variable of {{ic|/etc/mkinitcpio.conf}}, otherwise the system will not boot. If you do this on an already installed system, make sure to rebuild the image with<br />
# mkinitcpio -g /boot/initramfs-linux.img<br />
<br />
Todo: scripts to automate snapshots of root before updates, to rollback... updating {{ic|menu.lst}} to boot snapshots (separate article?)<br />
<br />
snapshots are primarily used to provide a frozen copy of a filesystem to make backups; a backup taking two hours provides a more consistent image of the filesystem than directly backing up the partition.<br />
<br />
See [[Create root filesystem snapshots with LVM]] for automating the creation of clean root filesystem snapshots during system startup for backup and rollback.<br />
<br />
[[Encrypted_LVM]]<br />
<br />
If you have LVM volumes not activated via the [[Mkinitcpio|initramfs]], [[#Using units|enable]] the '''lvm-monitoring''' service, which is provided by the {{pkg|lvm2}} package.<br />
<br />
== Troubleshooting ==<br />
<br />
=== Changes that could be required due to changes in the Arch-Linux defaults ===<br />
<br />
The {{ic|1=use_lvmetad = 1}} must be set in {{ic|/etc/lvm/lvm.conf}}. This is the default now - if you have a {{ic|lvm.conf.pacnew}} file, you must merge this change.<br />
<br />
=== LVM commands do not work ===<br />
<br />
* Load proper module:<br />
# modprobe dm_mod<br />
<br />
The {{ic|dm_mod}} module should be automatically loaded. In case it does not, you can try:<br />
<br />
{{hc|/etc/mkinitcpio.conf:|<nowiki>MODULES="dm_mod ..."</nowiki>}}<br />
<br />
You will need to [[Mkinitcpio#Image_creation_and_activation|rebuild]] the initramfs to commit any changes you made.<br />
<br />
* Try preceding commands with ''lvm'' like this:<br />
# lvm pvdisplay<br />
<br />
=== Logical Volumes do not show up ===<br />
<br />
If you are trying to mount existing logical volumes, but they do not show up in {{ic|lvscan}}, you can use the following commands to activate them:<br />
<br />
# vgscan<br />
# vgchange -ay<br />
<br />
=== LVM on removable media ===<br />
<br />
Symptoms:<br />
# vgscan<br />
Reading all physical volumes. This may take a while...<br />
/dev/backupdrive1/backup: read failed after 0 of 4096 at 319836585984: Input/output error<br />
/dev/backupdrive1/backup: read failed after 0 of 4096 at 319836643328: Input/output error<br />
/dev/backupdrive1/backup: read failed after 0 of 4096 at 0: Input/output error<br />
/dev/backupdrive1/backup: read failed after 0 of 4096 at 4096: Input/output error<br />
Found volume group "backupdrive1" using metadata type lvm2<br />
Found volume group "networkdrive" using metadata type lvm2<br />
<br />
Cause:<br />
:Removing an external LVM drive without deactivating the volume group(s) first. Before you disconnect, make sure to:<br />
# vgchange -an ''volume group name''<br />
<br />
Fix: (assuming you already tried to activate the volume group with {{ic|# vgchange -ay ''vg''}}, and are receiving the Input/output errors:<br />
# vgchange -an ''volume group name''<br />
Unplug the external drive and wait a few minutes:<br />
# vgscan<br />
# vgchange -ay ''volume group name''<br />
<br />
=== Kernel options ===<br />
<br />
In kernel options, you may need {{ic|dolvm}}. {{ic|<nowiki>root=</nowiki>}} should be set to the logical volume, e.g {{ic|/dev/mapper/''vg-name''-''lv-name''}}.<br />
<br />
== See also ==<br />
<br />
* [http://sourceware.org/lvm2/ LVM2 Resource Page] on SourceWare.org<br />
* [http://tldp.org/HOWTO/LVM-HOWTO/ LVM HOWTO] article at The Linux Documentation project<br />
* [http://www.gentoo.org/doc/en/lvm2.xml Gentoo LVM2 installation] guide at Gentoo documentation<br />
* [http://en.gentoo-wiki.com/wiki/LVM LVM] article at Gentoo wiki<br />
* [http://www.joshbryan.com/blog/2008/01/02/lvm2-mirrors-vs-md-raid-1/ LVM2 Mirrors vs. MD Raid 1] post by Josh Bryan<br />
* [http://www.tutonics.com/2012/11/ubuntu-lvm-guide-part-1.html Ubuntu LVM Guide Part 1][http://www.tutonics.com/2012/12/lvm-guide-part-2-snapshots.html Part 2 detals snapshots]</div>Wzyboyhttps://wiki.archlinux.org/index.php?title=Power_management/Suspend_and_hibernate&diff=282624Power management/Suspend and hibernate2013-11-13T11:31:53Z<p>Wzyboy: /* Hibernation into swap file */ fix typo</p>
<hr />
<div>[[Category:Power management]]<br />
[[ja:Suspend and Hibernate]]<br />
{{Article summary start}}<br />
{{Article summary text|Describes suspending (suspend-to-RAM) and hibernating (suspend-to-disk) the system.}}<br />
{{Article summary heading|Related articles}}<br />
{{Article summary wiki|Uswsusp}}<br />
{{Article summary wiki|TuxOnIce}}<br />
{{Article summary wiki|systemd}}<br />
{{Article summary wiki|pm-utils}}<br />
{{Article summary wiki|Suspending to RAM with hibernate-script}}<br />
{{Article summary wiki|Suspending to Disk with hibernate-script}}<br />
{{Article summary end}}<br />
Currently there are available three methods of suspending: '''suspend to RAM''' (usually called just '''suspend'''), '''suspend to disk''' (usually known as '''hibernate'''), and '''hybrid suspend''' (sometimes aptly called '''suspend to both'''):<br />
<br />
* '''Suspend to RAM''' method cuts power to most parts of the machine aside from the RAM, which is required to restore the machine's state. Because of the large power savings, it is advisable for laptops to automatically enter this mode when the computer is running on batteries and the lid is closed (or the user is inactive for some time).<br />
<br />
* '''Suspend to disk''' method saves the machine's state into [[Swap|swap space]] and completely powers off the machine. When the machine is powered on, the state is restored. Until then, there is zero power consumption.<br />
<br />
* '''Suspend to both''' method saves the machine's state into swap space, but does not power off the machine. Instead, it invokes usual suspend to RAM. Therefore, if the battery is not depleted, the system can resume from RAM. If the battery is depleted, the system can be resumed from disk, which is much slower than resuming from RAM, but the machine's state has not been lost.<br />
<br />
There are multiple low level interfaces (backends) providing basic functionality, and some high level interfaces providing tweaks to handle problematic hardware drivers/kernel modules (e.g. video card re-initialization).<br />
<br />
== Low level interfaces ==<br />
<br />
Though these interfaces can be used directly, it is advisable to use some of [[#High level interfaces|high level interfaces]] to suspend/hibernate. Using low level interfaces directly is significantly faster using any high level interface, since running all the pre- and post-suspend hooks takes time, but hooks can properly set hardware clock, restore wireless etc.<br />
<br />
=== kernel (swsusp) ===<br />
<br />
The most straightforward approach is to directly inform the in-kernel software suspend code (swsusp) to enter a suspended state; the exact method and state depends on the level of hardware support. On modern kernels, writing appropriate strings to {{ic|/sys/power/state}} is the primary mechanism to trigger this suspend.<br />
<br />
See [https://www.kernel.org/doc/Documentation/power/states.txt kernel documentation] for details.<br />
<br />
=== uswsusp ===<br />
<br />
The uswsusp ('Userspace Software Suspend') is a wrapper around the kernel's suspend-to-RAM mechanism, which performs some graphics adapter manipulations from userspace before suspending and after resuming.<br />
<br />
See main article [[Uswsusp]].<br />
<br />
=== tuxonice ===<br />
<br />
TuxOnIce is a fork of the kernel implementation of suspend/hibernate that provides kernel patches to improve the default implementation. It requires a custom kernel to achieve this purpose.<br />
<br />
See main article [[TuxOnIce]].<br />
<br />
== High level interfaces ==<br />
<br />
{{Note|The end goal of these packages is to provide binaries/scripts that can be invoked to perform suspend/hibernate. Actually hooking them up to power buttons or menu clicks or laptop lid events is usually left to other tools. To automatically suspend/hibernate on certain power events, such as laptop lid close or battery depletion percentage, you may want to look into running [[Acpid]].}}<br />
<br />
=== systemd ===<br />
<br />
[[systemd]] provides native commands for suspend, hibernate and a hybrid suspend, see [[Power Management#Power management with systemd]] for details.<br />
<br />
See [[Power Management#Sleep hooks]] for additional information on configuring suspend/hibernate hooks. Also see {{ic|man systemctl}}, {{ic|man systemd-sleep}}, and {{ic|man systemd.special}}.<br />
<br />
=== pm-utils ===<br />
<br />
pm-utils is a set of shell scripts that encapsulate the backend's suspend/hibernate functionality. It comes with a set of pre- and post-suspend tweaks and various hooks to customize the process.<br />
<br />
See main article [[pm-utils]].<br />
<br />
== Suspend to RAM ==<br />
<br />
Suspend to RAM should work out of the box.<br />
<br />
== Hibernation ==<br />
<br />
In order to use hibernation, you need to create swap partition or swap file. See [[Swap]] for details.<br />
<br />
=== About swap partition/file size ===<br />
<br />
Even if your swap partition is smaller than RAM, you still have a big chance of hibernating successfully. According to [https://www.kernel.org/doc/Documentation/power/interface.txt kernel documentation]:<br />
<br />
: ''{{ic|/sys/power/image_size}} controls the size of the image created by the suspend-to-disk mechanism. It can be written a string representing a non-negative integer that will be used as an upper limit of the image size, in bytes. The suspend-to-disk mechanism will do its best to ensure the image size will not exceed that number. However, if this turns out to be impossible, it will try to suspend anyway using the smallest image possible. In particular, if "0" is written to this file, the suspend image will be as small as possible. Reading from this file will display the current image size limit, which is set to 2/5 of available RAM by default.''<br />
<br />
You may either decrease the value of {{ic|/sys/power/image_size}} to make the suspend image as small as possible (for small swap partitions), or increase it to possibly speed up the hibernation process.<br />
<br />
=== Required kernel parameters ===<br />
<br />
The kernel parameter {{ic|1=resume=<swap_partition>}} has to be used. As {{ic|<swap_partition>}} you can use either kernel name of the swap partition, i.e. {{ic|/dev/sda1}}, or the [[UUID]] of the swap partition. See [[Kernel parameters]] for more examples for various bootloaders.<br />
<br />
For example, with GRUB2 you can use {{ic|GRUB_CMDLINE_LINUX}} variable:<br />
<br />
{{hc|/etc/default/grub|2=GRUB_CMDLINE_LINUX="resume=/dev/sda1"}}<br />
<br />
And if you use UUID instead:<br />
<br />
{{hc|/etc/default/grub|2=GRUB_CMDLINE_LINUX="resume=UUID=4209c845-f495-4c43-8a03-5363dd433153"}}<br />
<br />
Don't forget to run {{ic|grub-mkconfig -o /boot/grub/grub.cfg}} afterwards.<br />
<br />
{{Tip|As an alternative, for GRUB2 you may try this solution from [http://wiki.debian.org/Grub#Configuring_grub_v2 debian wiki], which automatically adds your first swap partition to {{ic|1=resume=}} parameter to all found linux entries.}}<br />
<br />
==== Hibernation into swap file ====<br />
<br />
Using a swap file instead of a swap partition requires an additional kernel parameter {{ic|1=resume_offset=<Swap File Offset>}}.<br />
<br />
The value of {{ic|<Swap File Offset>}} can be obtained by running {{ic|filefrag -v <Swap File>}}, the output is in a table format and the required value is located in the first row of the {{ic|physical_offset}} column. For example:<br />
{{hc|# filefrag -v /swapfile|<nowiki><br />
Filesystem type is: ef53<br />
File size of /swapfile is 4294967296 (1048576 blocks of 4096 bytes)<br />
ext: logical_offset: physical_offset: length: expected: flags:<br />
0: 0.. 0: 38912.. 38912: 1: <br />
1: 1.. 22527: 38913.. 61439: 22527: unwritten<br />
2: 22528.. 53247: 899072.. 929791: 30720: 61440: unwritten<br />
...<br />
</nowiki>}}<br />
<br />
In the example the value of {{ic|<Swap File Offset>}} is {{ic|38912}}.<br />
<br />
{{Tip|The value of {{ic|<Swap File Offset>}} can also be obtained by running {{ic|swap-offset <Swap File>}}. The ''swap-offset'' binary is provided by package {{AUR|uswsusp-git}}.}}<br />
<br />
{{Note|<br />
* Please note that in the kernel parameter {{ic|resume}} you have to provide the device of the partition that contains the swapfile, not swapfile itself! The parameter {{ic|resume_offset}} informs the system where the swapfile starts on the resume device.<br />
* If using [[uswsusp]], then these two parameters have to be provided in {{ic|/etc/suspend.conf}} via the keys {{ic|resume device}} and {{ic|resume offset}}.<br />
}}<br />
<br />
=== Recreate initial ramdisk ===<br />
<br />
If you use an initramfs (default Arch systems do), you must add the {{ic|resume}} hook into the HOOKS in the configuration of [[mkinitcpio]]:<br />
<br />
{{hc|/etc/mkinitcpio.conf|2=<br />
# resume must be placed after block and lvm2, but before filesystems<br />
HOOKS="... block lvm2 '''resume''' filesystems ..."<br />
}}<br />
<br />
Finally, you must rebuild the initrd image for these changes to take effect:<br />
<br />
# mkinitcpio -p linux<br />
<br />
{{Note|If you use a custom kernel, then you might have to change the value of the {{ic|-p}} option.}}<br />
<br />
== Troubleshooting ==<br />
<br />
=== ACPI_OS_NAME ===<br />
<br />
You might want to tweak your '''DSDT table''' to make it work. See [[DSDT]] article<br />
<br />
=== VAIO Users ===<br />
Add acpi_sleep=nonvs kernel flag to your loader, and you are done!</div>Wzyboyhttps://wiki.archlinux.org/index.php?title=Arch_boot_process&diff=281644Arch boot process2013-11-06T06:05:39Z<p>Wzyboy: /* Under BIOS */ added a section for UEFI. But I do not use it so I leave it blank.</p>
<hr />
<div>[[Category:Boot process]]<br />
[[Category:About Arch]]<br />
[[ar:Arch Boot Process]]<br />
[[cs:Arch Boot Process]]<br />
[[es:Arch Boot Process]]<br />
[[fr:Processus de boot]]<br />
[[it:Arch Boot Process]]<br />
[[ja:Arch Boot Process]]<br />
[[ru:Arch Boot Process]]<br />
[[zh-CN:Arch Boot Process]]<br />
{{Article summary start}}<br />
{{Article summary text|A chronological overview of the Arch boot process.}}<br />
{{Article summary heading|Overview}}<br />
{{Article summary text|{{Boot process overview}}}}<br />
{{Article summary heading|Related}}<br />
{{Article summary wiki|fstab}}<br />
{{Article summary wiki|Systemd}}<br />
{{Article summary wiki|Autostarting}}<br />
{{Article summary end}}<br />
<br />
== Boot process ==<br />
<br />
=== Under BIOS ===<br />
<br />
# System switched on - [[Wikipedia:Power-on self-test|Power-on self-test]] or POST process<br />
# After POST BIOS initializes the necessary system hardware for booting (disk, keyboard controllers etc.)<br />
# BIOS launches the first 440 bytes ([[Master Boot Record]]) of the first disk in the BIOS disk order<br />
# The MBR boot code then takes control from BIOS and launches its next stage code (if any) (mostly [[Boot Loaders|boot loader]] code)<br />
# The launched (2nd stage) code (actual boot loader) then reads its support and config files<br />
# Based on the data in its config files, the boot loader loads the kernel and initramfs into system memory (RAM) and launches the kernel<br />
<br />
=== Under UEFI ===<br />
<br />
== Kernel ==<br />
The kernel is the core of an operating system. It functions on a low level (''kernelspace'') interacting between the hardware of the machine and the programs which use the hardware to run. To make efficient use of the CPU, the kernel uses a scheduler to arbitrate which tasks take priority at any given moment, creating the illusion of many tasks being executed simultaneously.<br />
<br />
== initramfs ==<br />
After the kernel is loaded, it unpacks the [[initramfs]] (initial RAM filesystem), which becomes the initial root filesystem. The kernel then executes {{ic|/init}} as the first process. The ''early userspace'' starts.<br />
<br />
The purpose of the initramfs is to bootstrap the system to the point where it can access the root filesystem (see [[FHS]] for details). This means that any modules that are required for devices like IDE, SCSI, SATA, USB/FW (if booting from an external drive) must be loadable from the initramfs if not built into the kernel; once the proper modules are loaded (either explicitly via a program or script, or implicitly via [[udev]]), the boot process continues. For this reason, the initramfs only needs to contain the modules necessary to access the root filesystem; it does not need to contain every module one would ever want to use. The majority of modules will be loaded later on by udev, during the init process.<br />
<br />
== Init process ==<br />
At the final stage of early userspace, the real root is mounted, and then replaces the initial root filesystem. {{ic|/sbin/init}} is executed, replacing the {{ic|/init}} process. Arch uses [[systemd]] as the init process.<br />
<br />
== See also ==<br />
* [http://archlinux.me/brain0/2010/02/13/early-userspace-in-arch-linux/ Early Userspace in Arch Linux]<br />
* [http://www.ibm.com/developerworks/linux/library/l-linuxboot/ Inside the Linux boot process]<br />
* [http://www.linuxjournal.com/article/4622 Boot with GRUB]<br />
* [[Wikipedia:Linux startup process]]<br />
* [[Wikipedia:initrd]]<br />
* [http://www.cyberciti.biz/faq/grub-boot-into-single-user-mode/ Boot Linux Grub Into Single User Mode]</div>Wzyboyhttps://wiki.archlinux.org/index.php?title=Automatic_login_to_virtual_console&diff=280550Automatic login to virtual console2013-10-31T07:20:33Z<p>Wzyboy: /* Use drop-in feature of systemd for getty autologin */</p>
<hr />
<div>[[Category:Boot process]]<br />
[[Category:Security]]<br />
[[es:Automatic login to virtual console]]<br />
[[it:Automatic login to virtual console]]<br />
{{Article summary start}}<br />
{{Article summary text|Describes how to automatically log in to a virtual console.}}<br />
{{Article summary heading|Related}}<br />
{{Article summary wiki|Display Manager}}<br />
{{Article summary wiki|Silent boot}}<br />
{{Article summary wiki|Start X at Login}}<br />
{{Article summary end}}<br />
<br />
This article describes how to automatically log in to a ''virtual console'' at the end of the [[boot process]]. This article only covers console log-ins; methods for starting an [[Xorg|X server]] are described in [[Start X at Login]].<br />
<br />
== Installation ==<br />
=== Use drop-in feature of systemd for getty autologin ===<br />
[http://cgit.freedesktop.org/systemd/systemd/tree/NEWS#n655 Since systemd 198] unit files may now be extended via drop-in files without having to edit/override the unit files themselves, to learn more about this feature, consult [http://www.freedesktop.org/software/systemd/man/systemd.unit.html systemd.unit(5)] and search for ''Along with a unit file foo.service a directory foo.service.d/ may exist.''<br />
<br />
There are two types of consoles: virtual and serial ones. In most cases you would want to setup up autologin on virtual console, the one which device name is ''ttyN'', where ''N'' is a number. The configuration of the autologin for the serial consoles will be slightly different. Device names of the serial consoles look like ''ttySN'', where ''N'' is a number.<br />
<br />
For the virtual console proceed with the following steps, the case with serial console is dealt with at the bottom of this page.<br />
<br />
Create a new directory named {{ic|getty@tty1.service.d}} under {{ic|/etc/systemd/system}}:<br />
<br />
# mkdir /etc/systemd/system/getty@tty1.service.d<br />
<br />
Then create a new file named {{ic|autologin.conf}} and add it into the directory:<br />
<br />
{{hc|/etc/systemd/system/getty@tty1.service.d/autologin.conf|<br />
2=[Service]<br />
ExecStart=<br />
ExecStart=-/usr/bin/agetty --autologin <username> --noclear %I 38400 linux<br />
}}<br />
<br />
{{Tip|The option {{ic|1=Type=idle}} will delay the execution of agetty until all jobs (state change requests to units) are completed. On the other hand it may cause systemd boot-up messages to pollute the login prompt. This option is more useful when [[Start X at Login|starting X automatically]]. See {{ic|man systemd.service}} for more info.}}<br />
<br />
By default, {{ic|getty@.service}} uses {{ic|1=Type=idle}}. If you want to use {{ic|1=Type=simple}}, then your {{ic|autologin.conf}} should look like this:<br />
<br />
{{hc|/etc/systemd/system/getty@tty1.service.d/autologin.conf|<br />
2=[Service]<br />
ExecStart=<br />
ExecStart=-/usr/bin/agetty --autologin <username> --noclear %I 38400 linux<br />
Type=simple<br />
}}<br />
<br />
In the case of a serial console you need to create different directory<br />
<br />
# mkdir /etc/systemd/system/serial-getty@ttyS0.service.d<br />
<br />
The file {{ic|autologin.conf}} will also look slightly different<br />
<br />
{{hc|/etc/systemd/system/serial-getty@ttyS0.service.d/autologin.conf|<br />
2=[Service]<br />
ExecStart=<br />
ExecStart=-/sbin/agetty --autologin <username> -s %I 115200,38400,9600 vt102<br />
Type=simple<br />
}}<br />
<br />
== Tips & Tricks ==<br />
<br />
=== Avoiding unnecessary dmesg errors ===<br />
To avoid errors related to {{ic|display-manager.service}} in dmesg, you should set the default target to multi-user instead of graphical:<br />
# systemctl enable multi-user.target<br />
<br />
==See also==<br />
* [[Systemd#Change_default_target_to_boot_into|Change default runlevel/target to boot into]].</div>Wzyboyhttps://wiki.archlinux.org/index.php?title=GRUB_(Bahasa_Indonesia)&diff=280280GRUB (Bahasa Indonesia)2013-10-29T13:53:47Z<p>Wzyboy: /* Install to Partition or Partitionless Disk */ fix typo</p>
<hr />
<div>[[Category:Boot loaders (Indonesia)]]<br />
[[cs:GRUB2]]<br />
[[en:GRUB2]]<br />
[[es:GRUB2]]<br />
[[fr:GRUB2]]<br />
[[it:GRUB2]]<br />
[[ru:GRUB2]]<br />
[[tr:GRUB2]]<br />
[[zh-CN:GRUB2]]<br />
[[zh-TW:GRUB2]]<br />
{{Translateme|work in progress.}}<br />
{{Article summary start}}<br />
{{Article summary text|GRUB2 adalah generasi terbaru dari grub.}}<br />
{{Article summary heading|Overview}}<br />
{{Article summary text|{{Boot process overview}}}}<br />
{{Article summary heading|Related}}<br />
{{Article summary wiki|Burg}} - Burg adalah boot loader baru yang berdasar atas GRUB2. Yang menggunakan format object dimana hal ini membuat BURG dapat di gunakan di berbagai Operating System termasuk Linux/Windows/OSX/Solaris/FreeBSD, dll. Juga mempunyai tampilan untuk di konfigurasi yang unik baik melalui text mode atau GUI mode.<br />
{{Article summary heading|Resources}}<br />
{{Article summary link|GNU GRUB -- GNU Project|http://www.gnu.org/software/grub/}}<br />
{{Article summary end}}<br />
<br />
[http://www.gnu.org/software/grub/ GRUB2] generasi berikutnya dari GRUB. GRUB2 adalah derivasi dari [http://www.nongnu.org/pupa/ PUPA] yang merupakan proyek pengembangand dari GRUB. GRUB 2 telah di tulis ulang untuk membersihkan segalanya dan memberikan modularitas dan portabilitas. [http://www.gnu.org/software/grub/grub-faq.en.html#q1].<br />
<br />
Secara singkat, ''bootloader'' adalah program software pertama yang berjalan ketika komputer pertama dinyalakan. ''Bootloader'' bertanggung jawab sebagai pemicu dan pengirim kontrol ke Kernel Linux. Kernel, selanjutnya, menginisialisasi seluruh sistem operasi.<br />
<br />
{{Note|grub2 dari 1.99 dan selanjutnya telah mendukung btrfs sebagai root (tanpa /boot filesistem yang terpisah), tetapi tingkat kompresinya terbatas pada zlib, tidak LZO. Dukungan kompresi LZO hanya terdapat pada repo bzr upstream.}}<br />
<br />
{{Note|Penginstall standar AIF (Arch Installation Framework) berdasar pada [[Archiso]] tidak mendukung penginstallan grub2-bios atau grub2-uefi. Akan tetapi [[Archboot]] iso mendukung penginstallan grub2-bios dan grub2-uefi.}}<br />
<br />
== Prefasi ==<br />
<br />
Walaupun, [[GRUB]] (versi 0.9x) adalah bootloader standar Arch Linux, GRUB dapat diganti menjadi 'grub legacy' by upstream. Dimana telah menjadi GRUB2 dan [[Syslinux]] di beberapa distribusi. Versi lanjutan merekomendasikan GRUB2 >=1.99 di atas versi grub-legacy.<br />
<br />
=== Catatan untuk pengguna GRUB Legacy ===<br />
<br />
* Ada perbedaan perinta dari GRUB dan GRUB2. Perlu di lihat terlebih dahulu [http://www.gnu.org/software/grub/manual/grub.html#Commands GRUB2 commands] sebelum melanjutkan (contoh : "find" telah di ganti dengan "search").<br />
<br />
* GRUB2 sekarang ''modular'' dan tidak lagi memerlukan "stage 1.5". Sebagai hasilnya, bootloader itu sendiri menjadi terbatas -- modul-modul diambil dari hard disk sebagai kebutuhan untuk meluaskan fungsionalitas. (contoh : dukungan untuk [[LVM]] atau RAID).<br />
<br />
* Penamaan perangkat telah berubah antara GRUB dan GRUB2. Partisi diurut dari nomor 1 dari pada 0 ketika disk masih bernomor 0. Sebagai contoh, {{ic|/dev/sda1}} akan menjadi {{ic|(hd0,msdos1)}} (untuk MBR) atau {{ic|(hd0,gpt1)}} (for GPT) ketika GRUB2 dipakai.<br />
<br />
=== Kebutuhan GRUB2 ===<br />
<br />
==== System BIOS ====<br />
<br />
===== Instruksi spesifik untuk [[GPT]] =====<br />
<br />
GRUB2 di konfigurasi BIOS-GPT membutuhkan sebuah Partisi BIOS Boot yang terembed pada core.img di kehilangannya post-MBR di sistem yang terpartisi secara GPT (yang menyebabkan MBR diambil alih oleh GPT Primary Header dan Primary Partition table). Partisi ini digunakan oleh GRUB2 hanya pada pengaturan BIOS-GPT. Tidak ada partisi jenis ini dalam kasus partisi MBR (setidaknya tidak untuk GRUB2). Partisi ini juga tidak diperlukan jika sistem berbasiskan UEFI, kerana tidak ada bootsectors yang mengambil tempat dalam kasus ini. Syslinux tidak memerlukan partisi ini.<br />
<br />
Untuk konfigurasi BIOS-GPT, buat sebuah partisi sebesar 2 MiB menggunaka cgdisk atau GNU Parted tanpa jenis filesistem. Lokasi partisi ini tidak menjadi masalah tetapi partisi ini haruslah berada diantara yang pertama dari area 2 TiB. Sangat disarankan untuk menempatkannya di awal disk sebelum partisi /boot. Atur jenis partisi menjadi "EF02" di cgdisk atau {{ic|set <BOOT_PART_NUM> bios_grub on}} di GNU Parted.<br />
<br />
{{Note|Partisi ini harus di buat sebelum grub_bios-install atau grub-setup dijalankan atau sebelum langka '''Install Bootloader''' dari penginstallan Archlinux (jika GRUB2 BIOS terpilih sebagai bootloader).}}<br />
<br />
===== Instruksi spesifik [[MBR]] dikenal sebagai pemartisian msdos =====<br />
<br />
Biasa post-MBR (setelah 512 byte area MBR dan sebelum dimulainya partisi pertama) di banyak sistem pemartisian MBR (atau msdos disklabel) adalah 32 KiB ketika kompabilitas DOS telah terpenuhi. Akan tetapi sebuah post-MBR sejumlah 1 atau 2 MiB direkomendasikan untuk memberikan ruang yang cukup untuk core.img yang terembed ({{Bug|24103}} ). Disarankan untuk menggunakan pemartisi yang mendukung alokasi partisi 1 MiB untuk mendapat ruang dalam memenuhi sektor non-512 byte. (yang tidak berelasi untuk embed core.img).<br />
<br />
Jika anda tidak melakukan dual-boot dengan MS Windows (semua versi) di sistem BIOS, disarankan untuk menggunakan partisi GPT - [[GUID_Partition_Table#Convert_from_MBR_to_GPT_without_data_loss]]<br />
<br />
{{Catatan|Membuat partisi 2MiB telah disebut diatas SEBELUM anda mengkonversi ke GPT. Jika tidak, gparted tidak akan merubah ukuran partisi boot untuk mengizinkan pembuatannya dan ketika anda reboot grub2 tidak tahu dimana untuk memulai.}}<br />
<br />
==== UEFI systems ====<br />
<br />
===== Membuat dan the UEFI SYSTEM PARTITION =====<br />
<br />
Ikuti instruksi [[Unified_Extensible_Firmware_Interface#Create_an_UEFI_SYSTEM_PARTITION_in_Linux]] dalam membuat sebuah UEFI SYSTEM PARTITION. Lalu mount UEFI SYSTEM PARTITION di {{ic|/boot/efi}}. harus mempunya format FAT32 dan lebih besar dari >=200 MiB ukurannya. jika kamu telah mount partisi UEFISYS di mountpoint yang lain, ganti {{ic|/boot/efi}} dengan command di bawah ini:<br />
<br />
# mkdir -p /boot/efi<br />
# mount -t vfat <UEFISYS_PART_DEVICE> /boot/efi<br />
<br />
Buat direktori <UEFI_SYSTEM_PARTITION>/efi jika tidak ada:<br />
<br />
# mkdir -p /boot/efi/efi<br />
<br />
== Installation ==<br />
<br />
=== During Arch Linux installation ===<br />
<br />
* lEwati langkah '''Install Bootloader''' dan keluar dari penginstall.<br />
* Mengatur jaringan:<br />
# aif -p partial-configure-network<br />
Command ini memunculkan dialog; masukkan jenis perangkat yang digunakan, (contoh : eth0) dan gunakan DHCP untuk pengaturan yang lebih mudah.<br />
* Jika anda tidak mengkonfigurasi sistem {{ic|/etc/resolv.conf}} dalam instalasi (anda merencanakan membiarkan DHCP mengatur otomatis), anda perlu mengkopi konfigurasi yang di buat oleh AIF ketika jaringan di konfigurasi otomatis:<br />
# cp /etc/resolv.conf /mnt/etc/resolv.conf<br />
* Jika anda mengalami kegagalan jaringan saat update paket pacman, anda mungkin harus menginstall paket net-tools.<br />
* Cek dan liat apa modul dm_mod digunakan. Jika tidak load secara manual. (anda mungkin butuh grub2-bios; pasang jika diperlukan):<br />
# lsmod | grep dm_mod<br />
# modprobe dm-mod<br />
{{Note|This is necessary at this point, and cannot be postponed after the chroot. If you try to use modprobe in a chroot environment that has a later kernel version from that of the installing device (at the time of writing, 2.6.33), modprobe will fail. This happens routinely using the Arch "net" installations.}}<br />
* From the installer's live shell, chroot to the installed system:<br />
# mount -o bind /dev /mnt/dev<br />
# mount -t proc /proc /mnt/proc/<br />
# mount -t sysfs /sys /mnt/sys/<br />
# chroot /mnt bash<br />
* Update database pacman :<br />
# pacman-db-upgrade<br />
* Refresh daftar paket (dengan tambahan -y):<br />
# pacman -Syy<br />
* Pasang paket GRUB2 sperti telah disebutkan di bagian [[#From a running Arch Linux]]. dm-mod module sudah di load tidak perlu di load lagi.<br />
<br />
=== From a running Arch Linux ===<br />
<br />
==== BIOS systems ====<br />
<br />
===== Backup Important Data =====<br />
<br />
In general, a grub installation should run smoothly. Sometimes it could mess up your system. You're strongly advised to make a backup before installing grub2-bios.<br />
<br />
* copy grub modules and configuration<br />
<br />
# cp -a /boot/grub /path/to/backup/<br />
<br />
* backup the MBR and GRUB-Legacy stage 1.5<br />
<br />
# dd if=/dev/sdX of=/path/to/backup/first-sectors bs=512 count=63<br />
<br />
Replace /dev/sdaX with you disk path (mostly /dev/sda).<br />
<br />
{{Note|This command backs up the partition table too. Be careful while restoring if you've changed your partition setup in the meantime}}<br />
<br />
To backup only the MBR boot code use:<br />
<br />
# dd if=/dev/sdX of=/path/to/backup/mbr-boot-code bs=440 count=1<br />
<br />
You could now lightly remove {{ic|/boot/grub}} with:<br />
<br />
# rm -rf /boot/grub<br />
<br />
and follow the instructions below. You know that if things get nasty, you could reboot your system thanks to an installation media and:<br />
<br />
* move old grub-legacy or grub2 files out of the way<br />
<br />
# mv /boot/grub /boot/grub.nonfunctional<br />
<br />
* copy grub back to /boot<br />
<br />
# cp -a /path/to/backup/grub /boot/<br />
<br />
* replace MBR and next 62 sectors of sda with backed up copy (DANGEROUS!)<br />
<br />
# dd if=/path/to/backup/first-sectors of=/dev/sdX bs=512 count=63<br />
<br />
{{Note|This command also restores the partition table. Be careful.}}<br />
<br />
To restore only the MBR boot code use:<br />
<br />
# dd if=/path/to/backup/mbr-boot-code of=/dev/sdX bs=440 count=1<br />
<br />
===== Install grub2-bios package =====<br />
<br />
The GRUB2 package can be installed with pacman (and will replace {{Pkg|grub}}, if it is installed). Simply installing the package won't update the {{ic|/boot/grub/core.img}} file and the grub2 modules in {{ic|/boot/grub}}. You need to update them manually using grub_bios-install as explained below.<br />
<br />
# pacman -S grub2-bios<br />
<br />
{{Note|Installing grub2-common (a dependency of grub2-bios) 1.99~rc1 or later, may take forever in some systems since the post_install script runs grub-mkconfig and this script does not provide the option {{ic|--no-floppy}}. For more details search this option in the article.}}<br />
<br />
Also load the device-mapper kernel module without which grub-probe does not reliably detect disks and partitions:<br />
<br />
# modprobe dm-mod<br />
<br />
===== Install grub2-bios boot files =====<br />
<br />
There are 3 ways to install grub2 boot files in BIOS booting:<br />
*[[#Install_to_440-byte_MBR_boot_code_region]] (recommended) , <br />
*[[#Install_to_Partition_or_Partitionless_Disk]] (not recommended),<br />
*[[#Generate_core.img_alone]] (safest method, but requires another BIOS bootloader like [[grub-legacy]] or [[syslinux]] to be installed to chainload {{ic|/boot/grub/core.img}} ). <br />
<br />
====== Install to 440-byte MBR boot code region ======<br />
<br />
To setup grub2-bios in the 440-byte Master Boot Record boot code region, populate the {{ic|/boot/grub}} directory, generate the {{ic|/boot/grub/core.img}} file, and embed it in the 32 KiB (minimum size - varies depending on partition alignment) post-MBR gap (MBR disks) or in BIOS Boot Partition (GPT disks), run:<br />
<br />
# grub_bios-install --boot-directory=/boot --no-floppy --recheck --debug /dev/sda<br />
<br />
where {{ic|/dev/sda}} is the destination of the installation (in this case the MBR of the first SATA disk). If you use [[LVM]] for your {{ic|/boot}}, you can install GRUB2 on multiple physical disks. <br />
<br />
The {{ic|--no-floppy}} tells grub2-bios utilities not to search for any floppy devices which reduces the overall execution time of grub_bios-install on many systems (it will also prevent the issue below from occurring). Otherwise you get an error that looks like this:<br />
<br />
grub-probe: error: Cannot get the real path of '/dev/fd0'<br />
Auto-detection of a filesystem module failed.<br />
Please specify the module with the option '--modules' explicitly.<br />
<br />
{{Warning|Make sure that you check the {{ic|/boot}} directory if you use the latter. Sometimes the {{ic| boot-directory}} parameter creates another {{ic|/boot}} folder inside of boot. A wrong install would look like this {{ic|/boot/boot/grub}} !}}.<br />
<br />
====== Install to Partition or Partitionless Disk ======<br />
<br />
{{Note|grub2-bios (any version - including upstream bzr repo) does not encourage installation to a partition boot sector or a partitionless disk like grub-legacy or syslinux does. Neither do the Arch devs.}}<br />
<br />
To setup grub2-bios to a partition boot sector, to a partitionless disk (also called superfloppy) or to a floppy disk, run (using for example /dev/sda1 as the /boot partition)<br />
<br />
# chattr -i /boot/grub/core.img<br />
# grub_bios-install --boot-directory=/boot --no-floppy --recheck --force --debug /dev/sda1<br />
# chattr +i /boot/grub/core.img<br />
<br />
You need to use the {{ic|--force}} option to allow usage of blocklists and should not use {{ic|1=--grub-setup=/bin/true}} (which is similar to simply generating core.img).<br />
<br />
grub_bios-install will give out warnings like which should give you the idea of what might go wrong with this approach.<br />
<br />
/sbin/grub-setup: warn: Attempting to install GRUB to a partitionless disk or to a partition. This is a BAD idea.<br />
/sbin/grub-setup: warn: Embedding is not possible. GRUB can only be installed in this setup by using blocklists. <br />
However, blocklists are UNRELIABLE and their use is discouraged.<br />
<br />
Without {{ic|--force}} you may get the below error and grub-setup will not setup its boot code in the partition boot sector.<br />
<br />
/sbin/grub-setup: error: will not proceed with blocklists<br />
<br />
With {{ic|--force}} you should get<br />
<br />
Installation finished. No error reported.<br />
<br />
The reason why grub-setup does not by default allow this is because in case of partition or a partitionless disk is that grub2-bios relies on embedded blocklists in the partition bootsector to locate the {{ic|/boot/grub/core.img}} file and the prefix dir {{ic|/boot/grub}}. The sector locations of {{ic|core.img}} may change whenever the filesystem in the partition is being altered (files copied, deleted etc.). For more info see https://bugzilla.redhat.com/show_bug.cgi?id=728742 and https://bugzilla.redhat.com/show_bug.cgi?id=730915.<br />
<br />
The workaround for this is to set the immutable flag on {{ic|/boot/grub/core.img}} (using chattr command as mentioned above) so that the sector locations of the {{ic|core.img}} file in the disk is not altered. The immutable flag on {{ic|/boot/grub/core.img}} needs to be set only if grub2-bios is installed to a partition boot sector or a partitionless disk, not in case of installation to MBR or simple generation of {{ic|core.img}} without embedding any bootsector (mentioned above).<br />
<br />
====== Generate core.img alone ======<br />
<br />
To populate the {{ic|/boot/grub}} directory and generate a {{ic|/boot/grub/core.img}} file WITHOUT embedding any grub2-bios bootsector code in the MBR, post-MBR region, or the partition bootsector, add {{ic|1=--grub-setup=/bin/true}} to grub_bios-install:<br />
<br />
# grub_bios-install --grub-setup=/bin/true --boot-directory=/boot --no-floppy --recheck --debug /dev/sda<br />
<br />
You can then chainload grub2's core.img from grub-legacy or syslinux as a Linux kernel or a multiboot kernel.<br />
<br />
===== Generate GRUB2 BIOS Config file =====<br />
<br />
Finally, generate a configuration for grub2 (this is explained in greater detail in the Configuration section):<br />
<br />
# GRUB_PREFIX="/boot/grub" grub-mkconfig -o /boot/grub/grub.cfg<br />
<br />
The GRUB_PREFIX env variable is supported in extra/grub2-common >=1:1.99-6 package.<br />
<br />
If grub2 complains about "no suitable mode found" while booting, go to [[#Correct_GRUB2_No_Suitable_Mode_Found_Error]].<br />
<br />
If {{ic|grub-mkconfig}} fails, convert your {{ic|/boot/grub/menu.lst}} file to {{ic|/boot/grub/grub.cfg}} using:<br />
<br />
# grub-menulst2cfg /boot/grub/menu.lst /boot/grub/grub.cfg<br />
<br />
For example:<br />
<br />
{{hc|/boot/grub/menu.lst|<nowiki><br />
default=0<br />
timeout=5<br />
<br />
title Arch Linux Stock Kernel<br />
root (hd0,0)<br />
kernel /vmlinuz-linux root=/dev/sda2 ro<br />
initrd /initramfs-linux.img<br />
<br />
title Arch Linux Stock Kernel Fallback<br />
root (hd0,0)<br />
kernel /vmlinuz-linux root=/dev/sda2 ro<br />
initrd /initramfs-linux-fallback.img<br />
</nowiki>}}<br />
<br />
{{hc|/boot/grub/grub.cfg|<nowiki><br />
set default='0'; if [ x"$default" = xsaved ]; then load_env; set default="$saved_entry"; fi<br />
set timeout=5<br />
<br />
menuentry 'Arch Linux Stock Kernel' {<br />
set root='(hd0,1)'; set legacy_hdbias='0'<br />
legacy_kernel '/vmlinuz-linux' '/vmlinuz-linux' 'root=/dev/sda2' 'ro'<br />
legacy_initrd '/initramfs-linux.img' '/initramfs-linux.img'<br />
<br />
}<br />
<br />
menuentry 'Arch Linux Stock Kernel Fallback' {<br />
set root='(hd0,1)'; set legacy_hdbias='0'<br />
legacy_kernel '/vmlinuz-linux' '/vmlinuz-linux' 'root=/dev/sda2' 'ro'<br />
legacy_initrd '/initramfs-linux-fallback.img' '/initramfs-linux-fallback.img'<br />
}<br />
</nowiki>}}<br />
<br />
If you forgot to create a GRUB2 {{ic|/boot/grub/grub.cfg}} configfile and simply rebooted into GRUB2 Command Shell, type:<br />
<br />
sh:grub> insmod legacycfg<br />
sh:grub> legacy_configfile ${prefix}/menu.lst<br />
<br />
Boot into Arch and re-create the proper GRUB2 {{ic|/boot/grub/grub.cfg}} configfile.<br />
<br />
{{Note|This option works only in BIOS systems, not in UEFI systems.}}<br />
<br />
===== Multiboot in BIOS =====<br />
<br />
====== Boot Microsoft Windows installed in BIOS-MBR mode ======<br />
<br />
{{Note|GRUB2 supports booting {{ic|bootmgr}} directly and chainload of partition boot sector is no longer required to boot Windows in a BIOS-MBR setup.}}<br />
<br />
Find the UUID of the NTFS filesystem of the Windows's SYSTEM PARTITION where the bootmgr and its files reside. For example, if Windows {{ic|bootmgr}} exists at {{ic|/media/Windows/bootmgr}}:<br />
<br />
# grub-probe --target=fs_uuid /media/Windows/bootmgr<br />
69B235F6749E84CE<br />
<br />
Then, add the below code to {{ic|/etc/grub.d/40_custom}} and regenerate grub.cfg with grub-mkconfig as explained above to chainload Windows (Vista, 7 or 8) installed in BIOS-MBR mode:<br />
<br />
menuentry "Microsoft Windows 7 BIOS-MBR" {<br />
insmod part_msdos<br />
insmod ntfs<br />
insmod search_fs_uuid<br />
insmod ntldr <br />
search --fs-uuid --no-floppy --set=root 69B235F6749E84CE<br />
ntldr (${root})/bootmgr<br />
}<br />
<br />
For Windows XP<br />
<br />
menuentry "Microsoft Windows XP" {<br />
insmod part_msdos<br />
insmod ntfs<br />
insmod search_fs_uuid<br />
insmod ntldr <br />
search --fs-uuid --no-floppy --set=root 69B235F6749E84CE<br />
ntldr (${root})/ntldr<br />
}<br />
<br />
==== [[UEFI]] systems ====<br />
<br />
===== Install grub2-uefi package =====<br />
<br />
{{Note|Unless specified as EFI 1.x , EFI and UEFI terms are used interchangeably to denote UEFI 2.x firmware. Also unless stated explicitely, the instructions are general and not Mac specific. Some of them may not work or may be different in Macs. Apple's EFI implementation is neither a EFI 1.x version nor UEFI 2.x version but mixes up both. This kind of firmware does not fall under any one UEFI Specification version and is therefore not a standard UEFI firmware.}}<br />
<br />
GRUB2 UEFI bootloader is available in Arch Linux only from version 1.99~rc1. To install, first [[Unified_Extensible_Firmware_Interface#Detecting_UEFI_Firmware_Arch|Detect which UEFI firmware arch]] you have (either x86_64 or i386).<br />
<br />
Depending on that, install the appropriate package<br />
<br />
For 64-bit aka x86_64 UEFI firmware:<br />
# pacman -S grub2-efi-x86_64<br />
<br />
For 32-bit aka i386 UEFI firmware:<br />
# pacman -S grub2-efi-i386<br />
<br />
{{Note|Installing grub2-common (a dependency of grub2-bios) 1.99~rc1 or later, may take forever in some systems since the post_install script runs grub-mkconfig and this script does not provide the option {{ic|--no-floppy}}. For more details search this option in the article.}}<br />
<br />
{{Note|Simply installing the package won't update the grub.efi file and the grub2 modules in the UEFI System Partition. You need to update the grub.efi file and the grub2 modules in the UEFI System Partition manually using grub_efi_${UEFI_ARCH}-install as explained below.}}<br />
<br />
Also load the device-mapper kernel module without which grub-probe does not reliably detect disks and partitions<br />
<br />
# modprobe dm-mod<br />
<br />
===== Install grub2-uefi boot files =====<br />
<br />
====== Install to UEFI SYSTEM PARTITION ======<br />
<br />
{{Note|The below commands assume you are using {{ic|grub2-efi-x86_64}} (for {{ic|grub2-efi-i386}} replace {{ic|x86_64}} with {{ic|i386}} in the below commands).}}<br />
<br />
The UEFI system partition will need to be mounted at /boot/efi for the GRUB2 install script to detect it.<br />
<br />
# mkdir -p /boot/efi<br />
# mount -t vfat /dev/sdXY /boot/efi<br />
<br />
Install GRUB UEFI application and its modules to {{ic|/boot/efi/efi/arch_grub}} using <br />
<br />
# grub_efi_x86_64-install --root-directory=/boot/efi --boot-directory=/boot/efi/efi --bootloader-id=arch_grub --no-floppy --recheck --debug<br />
<br />
If you want to install grub2 modules and grub.cfg at the directory {{ic|/boot/grub}} and only the grubx64.efi application at {{ic|/boot/efi/efi/arch_grub}} use<br />
<br />
# grub_efi_x86_64-install --root-directory=/boot/efi --boot-directory=/boot --bootloader-id=arch_grub --no-floppy --recheck --debug<br />
<br />
In this case grub2-efi-x86_64 will be installed into /boot/grub, making the behavior consistent with the BIOS verion of GRUB2, but this is not recommended if you use both grub2-bios and grub2-efi-x86_64 in your system, as this will overwrite grub2-bios modules in /boot/grub .<br />
<br />
The {{ic|--root-directory}} option mentions the mountpoint of UEFI SYSTEM PARTITION , {{ic|--bootloader-id}} mentions the name of the directory used to store the grubx64.efi file and {{ic|--boot-directory}} mentions the directory wherein the actual modules will be installed (and into which grub.cfg should be created).<br />
<br />
The actual paths are<br />
<br />
<root-directory>/<efi or EFI>/<bootloader-id>/grubx64.efi<br />
<br />
<boot-directory>/grub/<all modules, grub.efi, core.efi, grub.cfg><br />
<br />
Note the {{ic|--bootloader-id}} option does not change {{ic|<boot-directory>/grub}}, i.e. you cannot install the modules to {{ic|<boot-directory>/<bootloader-id>}}, the path is hard-coded to <boot-directory>/grub .<br />
<br />
In {{ic|<nowiki>--root-directory=/boot/efi --boot-directory=/boot/efi/efi --bootloader-id=grub</nowiki>}}<br />
<br />
<root-directory>/<efi or EFI>/<bootloader-id> == <boot-directory>/grub == /boot/efi/efi/grub<br />
<br />
In {{ic|<nowiki>--root-directory=/boot/efi --boot-directory=/boot/efi/efi --bootloader-id=arch_grub</nowiki>}}<br />
<br />
<root-directory>/<efi or EFI>/<bootloader-id> == /boot/efi/efi/arch_grub<br />
<boot-directory>/grub == /boot/efi/efi/grub<br />
<br />
In {{ic|<nowiki>--root-directory=/boot/efi --boot-directory=/boot --bootloader-id=arch_grub</nowiki>}}<br />
<br />
<root-directory>/<efi or EFI>/<bootloader-id> == /boot/efi/efi/arch_grub<br />
<boot-directory>/grub == /boot/grub<br />
<br />
In {{ic|<nowiki>--root-directory=/boot/efi --boot-directory=/boot --bootloader-id=grub</nowiki>}}<br />
<br />
<root-directory>/<efi or EFI>/<bootloader-id> == /boot/efi/efi/grub<br />
<boot-directory>/grub == /boot/grub<br />
<br />
The {{ic|<nowiki><root-directory>/<efi or EFI>/<bootloader-id>/grubx64.efi</nowiki>}} is an exact copy of {{ic|<nowiki><boot-directory>/grub/core.efi</nowiki>}} .<br />
<br />
{{Note| This behavior of --root-directory , --boot-directory , and --bootloader-id options are specific to UEFI systems and does not occur is BIOS mode. In grub_bios-install, --root-directory is deprecated and --bootloader-id option does not exist.}}<br />
<br />
In all the cases the UEFI SYSTEM PARTITION should be mounted for grub_efi_x86_64-install to install grubx64.efi in it, which will be launched by the firmware (using th efibootmgr created boot entry in non-Mac systems).<br />
<br />
If you notice carefully, there is no <device_path> option (Eg: {{ic|/dev/sda}}) at the end of the {{ic|grub_efi_x86_64-install}} command unlike the case of setting up grub2 for BIOS systems. Any <device_path> provided will be ignored by the install script as UEFI bootloaders do not use MBR or Partition boot sectors at all.<br />
<br />
You may now be able to UEFI boot your system by creating a grub.cfg file by following [[#Generate_GRUB2_UEFI_Config_file]] and [[#Create_GRUB2_entry_in_the_Firmware_Boot_Manager]].<br />
<br />
===== Create GRUB2 entry in the Firmware Boot Manager =====<br />
<br />
====== Non-Mac UEFI systems ======<br />
<br />
grub_efi_${UEFI_ARCH}-install will ensure that {{ic|/boot/efi/efi/arch_grub/grubx64.efi}} is launched by default if it detects {{ic|efibootmgr}} and if it is able to access UEFI Runtime Services. Follow [[Unified_Extensible_Firmware_Interface#efibootmgr]] for more info.<br />
<br />
If you have problems running GRUB2 in UEFI mode you can try the following (worked on an ASUS Z68 mainboard):<br />
<br />
# cp /boot/efi/efi/arch_grub/grubx64.efi /boot/efi/shellx64.efi<br />
<br />
or<br />
<br />
# cp /boot/efi/efi/arch_grub/grubx64.efi /boot/efi/efi/shellx64.efi<br />
<br />
or<br />
<br />
# cp /boot/efi/efi/arch_grub/grubx64.efi /boot/efi/efi/shell/shellx64.efi<br />
<br />
After this launch the UEFI Shell from the UEFI setup/menu (in ASUS UEFI BIOS, switch to advanced mode, press Exit in the top right corner and choose "Launch EFI shell from filesystem device"). The grub2 menu will show up and you can boot into your system. Afterwards you can use efibootmgr to setup a menu entry (see above).<br />
<br />
====== Apple Mac EFI systems ======<br />
<br />
{{Note| TODO: Grub upstream bzr mactel branch http://bzr.savannah.gnu.org/lh/grub/branches/mactel/changes}}<br />
{{Note| TODO: Fedora's mactel-boot ( https://bugzilla.redhat.com/show_bug.cgi?id&#61;755093 )}}<br />
<br />
Use bless command from within Mac OS X to set {{ic|grubx64.efi}} as the default boot option. You can also boot from the Mac OS X install disc and launch a Terminal there if you only have Linux installed. In the Terminal, create a directory and mount the EFI System Partition:<br />
<br />
# cd /Volumes<br />
# mkdir efi<br />
# mount -t msdos /dev/disk0s1 /Volumes/efi<br />
<br />
Then run bless on {{ic|grub.efi}} and on the EFI partition to set them as the default boot options.<br />
<br />
# bless --folder=/Volumes/efi --file=/Volumes/efi/efi/arch_grub/grubx64.efi --setBoot<br />
# bless --mount=/Volumes/efi --file=/Volumes/efi/efi/arch_grub/grubx64.efi --setBoot<br />
<br />
More info at https://help.ubuntu.com/community/UEFIBooting#Apple_Mac_EFI_systems_.28both_EFI_architecture.29.<br />
<br />
===== Generate GRUB2 UEFI Config file =====<br />
<br />
Finally, generate a configuration for grub2 (this is explained in greater detail in the Configuration section):<br />
<br />
# GRUB_PREFIX="<boot-directory>/grub" grub-mkconfig -o <boot-directory>/grub/grub.cfg<br />
<br />
If you used {{ic|<nowiki>--boot-directory=/boot/efi/efi</nowiki>}} :<br />
<br />
# GRUB_PREFIX="/boot/efi/efi/grub" grub-mkconfig -o /boot/efi/efi/grub/grub.cfg<br />
<br />
If you used {{ic|<nowiki>--boot-directory=/boot</nowiki>}} :<br />
<br />
# GRUB_PREFIX="/boot/grub" grub-mkconfig -o /boot/grub/grub.cfg<br />
<br />
This is independent of the value of --bootloader-id option. The {{ic|GRUB_PREFIX}} env variable is supported in extra/grub2-common >=1:1.99-6 package.<br />
<br />
If grub2-uefi complains about "no suitable mode found" while booting, try [[#Correct_GRUB2_No_Suitable_Mode_Found_Error]].<br />
<br />
===== Create GRUB2 Standalone UEFI Application =====<br />
<br />
It is possible to create a grubx64_standalone.efi application which has all the modules embeddded in a memdisk within the uefi application, thus removing the need for having a separate directory populated with all the grub2 uefi modules and other related files. This is done using the grub-mkstandalone command which is included in extra/grub2-common >= 1:1.99-6 package.<br />
<br />
The easiest way to do this would be with the install command already mentioned before, but specifying the modules to include. For example:<br />
<br />
# grub-mkstandlone --directory="/usr/lib/grub-x86_64-efi" --format="x86_64-efi" --compression="xz" \<br />
--output="/boot/efi/efi/arch_grub/grubx64_standalone.efi" <any extra files you want to include><br />
<br />
The grubx64_standalone.efi file expects grub.cfg to be within its $prefix which is (memdisk)/boot/grub. The memdisk is embedded within the efi app. The grub-mkstandlone script allow passing files to be included in the memdisk image to be as the arguments to the script (in <any extra files you want to include>).<br />
<br />
If you have the grub.cfg at {{ic|/home/user/Desktop/grub.cfg}}, then create a temporary {{ic|/home/user/Desktop/boot/grub/}} directory, copy the {{ic|/home/user/Desktop/grub.cfg}} to {{ic|/home/user/Desktop/boot/grub/grub.cfg}}, cd into {{ic|/home/user/Desktop/boot/grub/}} and run<br />
<br />
# grub-mkstandlone --directory="/usr/lib/grub-x86_64-efi" --format="x86_64-efi" --compression="xz" \<br />
--output="/boot/efi/efi/arch_grub/grubx64_standalone.efi" "boot/grub/grub.cfg"<br />
<br />
The reason to cd into {{ic|/home/user/Desktop/boot/grub/}} and to pass the file path as {{ic|boot/grub/grub.cfg}} (notice the lack of a leading slash - boot/ vs /boot/ ) is because {{ic|dir1/dir2/file}} is included as {{ic|(memdisk)/dir1/dir2/file}} by the grub-mkstandalone script. <br />
<br />
If you pass {{ic|/home/user/Desktop/grub.cfg}} the file will be included as {{ic|(memdisk)/home/user/Desktop/grub.cfg}}. If you pass {{ic|/home/user/Desktop/boot/grub/grub.cfg}} the file will be included as {{ic|(memdisk)/home/user/Desktop/boot/grub/grub.cfg}} . That is the reason for cd'ing into {{ic|/home/user/Desktop/boot/grub/}} and passing {{ic|boot/grub/grub.cfg}}, to includ the file as {{ic|(memdisk)/boot/grub/grub.cfg}}, which is what grub.efi expects the file to be.<br />
<br />
You need to create an UEFI Boot Manager entry for {{ic|/boot/efi/efi/arch_grub/grubx64_standalone.efi}} using {{ic|efibootmgr}}. Follow [[#Create GRUB2 entry in the Firmware Boot Manager]].<br />
<br />
===== Multiboot in UEFI =====<br />
<br />
====== Chainload Microsoft Windows x86_64 UEFI-GPT ======<br />
<br />
Find the UUID of the FAT32 filesystem in the UEFI SYSTEM PARTITION where the Windows UEFI Bootloader files reside. For example, if Windows {{ic|bootmgfw.efi}} exists at {{ic|/boot/efi/efi/Microsoft/Boot/bootmgfw.efi}} (ignore the upper-lower case differences since that is immaterial in FAT filesystem):<br />
<br />
# grub-probe --target=fs_uuid /boot/efi/efi/Microsoft/Boot/bootmgfw.efi<br />
1ce5-7f28<br />
<br />
# grub-probe --target=hints_string /boot/efi/efi/Microsoft/Boot/bootmgfw.efi<br />
--hint-bios=hd0,gpt1 --hint-efi=hd0,gpt1 --hint-baremetal=ahci0,gpt1<br />
<br />
Then, add this code to {{ic|/boot/grub/grub.cfg}} OR {{ic|/boot/efi/efi/grub/grub.cfg}} to chainload Windows x86_64 (Vista SP1+, 7 or 8) installed in UEFI-GPT mode:<br />
<br />
menuentry "Microsoft Windows x86_64 UEFI-GPT" {<br />
insmod part_gpt<br />
insmod fat<br />
insmod search_fs_uuid<br />
insmod chain<br />
search --fs-uuid --no-floppy --set=root --hint-bios=hd0,gpt1 --hint-efi=hd0,gpt1 --hint-baremetal=ahci0,gpt1 1ce5-7f28<br />
chainloader /efi/Microsoft/Boot/bootmgfw.efi<br />
}<br />
<br />
== Configuration ==<br />
<br />
You can also choose to automatically generate or manually edit {{ic|grub.cfg}}.<br />
<br />
{{Note|If GRUB2 was installed with the {{ic|--boot-directory}} option set, the {{ic|grub.cfg}} file must be placed in the same directory as {{ic|grubx64.efi}}. Otherwise, the {{ic|grub.cfg}} file goes in {{ic|/boot/grub/}}, just like in the BIOS version of GRUB2.}}<br />
<br />
=== Automatically generating using grub-mkconfig (Recommended) ===<br />
<br />
The GRUB2 {{ic|menu.1st}} equivalent configuration files are {{ic|/etc/default/grub}} and {{ic|/etc/grub.d/*}}. grub-mkconfig uses these files to generate {{ic|grub.cfg}}. By default the script outputs to stdout. To generate a {{ic|grub.cfg}} file run the command:<br />
# grub-mkconfig -o /boot/grub/grub.cfg<br />
{{ic|/etc/grub.d/10_linux}} is set to automatically add menu items for Arch linux that work out of the box, to any generated configuration. Other operating systems may need to be added manually by editing {{ic|/etc/grub.d/40_custom}}<br />
<br />
=== Manually creating grub.cfg ===<br />
<br />
A basic grub file uses the following options<br />
* {{ic|(hdX,Y)}} is the partition {{ic|Y}} on disk {{ic|X}}, partition numbers starting at 1, disk numbers starting at 0<br />
* {{ic|1=set default=N}} is the default boot entry that is chosen after timeout for user action<br />
* {{ic|1=set timeout=M}} is the time {{ic|M}} to wait in seconds for a user selection before default is booted<br />
* {{ic|<nowiki>menuentry "title" {entry options}</nowiki>}} is a boot entry titled {{ic|title}}<br />
* {{ic|1=set root=(hdX,Y)}} sets the boot partition, where the kernel and GRUB modules are stored (boot need not be a separate partition, and may simply be a directory under the "root" partition ({{ic|/}})<br />
<br />
An example configuration:<br />
<br />
{{hc<br />
|/boot/grub/grub.cfg<br />
|<nowiki><br />
# Config file for GRUB2 - The GNU GRand Unified Bootloader<br />
# /boot/grub/grub.cfg<br />
<br />
# DEVICE NAME CONVERSIONS<br />
#<br />
# Linux Grub<br />
# -------------------------<br />
# /dev/fd0 (fd0)<br />
# /dev/sda (hd0)<br />
# /dev/sdb2 (hd1,2)<br />
# /dev/sda3 (hd0,3)<br />
#<br />
<br />
# Timeout for menu<br />
set timeout=5<br />
<br />
# Set default boot entry as Entry 0<br />
set default=0<br />
<br />
# (0) Arch Linux<br />
menuentry "Arch Linux" {<br />
set root=(hd0,1)<br />
linux /vmlinuz-linux root=/dev/sda3 ro<br />
initrd /initramfs-linux.img<br />
}<br />
<br />
## (1) Windows<br />
#menuentry "Windows" {<br />
#set root=(hd0,3)<br />
#chainloader +1<br />
#}<br />
</nowiki>}}<br />
<br />
=== Dual-booting ===<br />
<br />
''NOTE: If you want GRUB2 to automatically search for other systems, for example as in Ubuntu. Then you may need to install {{Pkg|os-prober}}.''<br />
<br />
==== Using grub-mkconfig ====<br />
The best way to add other entries is editing the {{ic|/etc/grub.d/40_custom}}. The entries in this file will be automatically added when running '''grub-mkconfig'''.<br />
After adding the new lines, run:<br />
# grub-mkconfig -o /boot/grub/grub.cfg <br />
to generate an updated {{ic|grub.cfg}}.<br />
<br />
===== With GNU/Linux =====<br />
<br />
Assuming that the other distro is on partition {{ic|sda2}}:<br />
<br />
menuentry "Other Linux" {<br />
set root=(hd0,2)<br />
linux /boot/vmlinuz (add other options here as required)<br />
initrd /boot/initrd.img (if the other kernel uses/needs one)<br />
}<br />
<br />
===== With FreeBSD =====<br />
<br />
Requires that FreeBSD is installed on a single partition with UFS. Assuming it is installed on {{ic|sda4}}:<br />
<br />
menuentry "FreeBSD" {<br />
set root=(hd0,4)<br />
chainloader +1<br />
}<br />
<br />
===== With Windows =====<br />
<br />
This assumes that your Windows partition is {{ic|sda3}}.<br />
<br />
# (2) Windows XP<br />
menuentry "Windows XP" {<br />
set root=(hd0,3)<br />
chainloader (hd0,3)+1<br />
}<br />
<br />
If the windows bootloader is on an entirely different harddrive than grub, it may be necessary to trick Windows into believing that it is in fact the first harddrive. This was possible in the old grub with {{ic|map}} and is now done with {{ic|drivemap}}. Assume grub is on {{ic|hd0}} and windows on {{ic|hd2}}, you need to add the following after {{ic|set root}}:<br />
<br />
drivemap -s hd0 hd2<br />
<br />
==== With Windows via EasyBCD and NeoGRUB ====<br />
<br />
Since EasyBCD's NeoGRUB currently does not understand the GRUB2 menu format, chainload to it by replacing the contents of your {{ic|C:\NST\menu.lst}} file with lines similar to the following:<br />
<br />
default 0<br />
timeout 1<br />
<br />
title Chainload into GRUB v2<br />
root (hd0,7)<br />
kernel /boot/grub/core.img<br />
<br />
===Visual Configuration===<br />
<br />
In GRUB2 it is possible, by default, to change the look of the menu. Make sure to initialize, if not done already, grub2 graphical terminal, gfxterm, with proper video mode, gfxmode, in grub2. This can be seen in the section [[#Correct_GRUB2_No_Suitable_Mode_Found_Error]]. This video mode is passed by grub2 to the linux kernel via 'gfxpayload' so any visual configurations need this mode in order to be in effect.<br />
<br />
====Setting the framebuffer resolution ====<br />
<br />
Grub2 can set the framebuffer for both grub2 itself and the kernel. The old ''vga='' way is deprecated. The preferred method is editing {{ic|/etc/default/grub}} as the following sample:<br />
<br />
GRUB_GFXMODE=1024x768x32<br />
GRUB_GFXPAYLOAD_LINUX=keep<br />
<br />
To generate the changes, run: <br />
grub-mkconfig -o /boot/grub/grub.cfg<br />
<br />
The {{ic|gfxpayload}} property will make sure the kernel keeps the resolution.<br />
<br />
{{Note|If this example does not work for you try to replace {{ic|1=gfxmode="1024x768x32"}} by {{ic|1=vbemode="0x105"}}. Remember to replace the specified resolution with one suitable for your screen.}}<br />
{{Note|To show all the modes you can use {{ic|1=# hwinfo --framebuffer}} (hwinfo is available in [community]), while at grub2 prompt you can use the {{ic|1=vbeinfo}} command.}}<br />
<br />
If this method does not work for you, the deprecated {{ic|1=vga=}} method will still work. Just<br />
add it next to the {{ic|1="GRUB_CMDLINE_LINUX_DEFAULT="}} line in {{ic|/etc/default/grub}}<br />
for eg: {{ic|1="GRUB_CMDLINE_LINUX_DEFAULT="quiet splash vga=792"}} will give you a {{ic|1024x768}} resolution.<br />
<br />
You can choose one of these resolutions: {{ic|640×480}}, {{ic|800×600}}, {{ic|1024×768}}, {{ic|1280×1024}}, {{ic|1600×1200}}<br />
<br />
====915resolution hack ====<br />
<br />
Some times for Intel graphic adapters neither {{ic|1=# hwinfo --framebuffer}} nor {{ic|1=vbeinfo}} will show you the desired resolution. In this case you can use {{ic|915resolution}} hack. This hack will temporarily modify video BIOS and add needed resolution. See [http://915resolution.mango-lang.org/ 915resolution's home page]<br />
<br />
In the following I will proceed with the example for my system. Please adjust the recipe for your needs. First you need to find a video mode which will be modified later. For that, run {{ic|915resolution}} in GRUB2 command shell.<br />
915resolution -l<br />
The output will be something like:<br />
Intel 800/900 Series VBIOS Hack : version 0.5.3<br />
...<br />
Mode 30 : 640x480, 8 bits/pixel<br />
...<br />
Next, our purpose is to overwrite mode 30. (You can choose what ever mode you want.) In the file {{ic|/etc/grub.d/00_header}} just before the {{ic|set gfxmode&#61;${GRUB_GFXMODE} }} line insert<br />
915resolution 30 1440 900<br />
Here we are overwriting the mode {{ic| 30}} with {{ic|1440x900}} resolution. Lastly we need to set {{ic | GRUB_GFXMODE}} as described earlier, regenerate grub configuration file and reboot to test changes.<br />
sudo grub-mkconfig -o /boot/grub/grub.cfg<br />
sudo reboot<br />
<br />
====Background image and bitmap fonts====<br />
<br />
GRUB2 comes with support for background images and bitmap fonts in pf2 format. The unifont font is included in the grub2 package under the filename {{ic|unicode.pf2}}, or, as only ascii characters under the name {{ic|ascii.pf2}}. <br />
<br />
Image formats supported include tga, png and jpeg, providing the correct modules are loaded. The maximum supported resolution depends on your hardware.<br />
<br />
Make sure you have set up the proper [[GRUB2#Setting_the_framebuffer_resolution|framebuffer resolution]].<br />
<br />
Edit {{ic|/etc/default/grub}} like this:<br />
GRUB_BACKGROUND="/boot/grub/archlinux.tga"<br />
#GRUB_THEME="/path/to/gfxtheme"<br />
<br />
(archlinux.tga is a placeholder; put your file name there)<br />
<br />
{{Note|If you have installed Grub on a separate partition, {{ic|/boot/grub/archlinux.tga}} becomes {{ic|/grub/archlinux.tga}}.}}<br />
<br />
To generate the changes and add the information into grub.cfg, run: <br />
grub-mkconfig -o /boot/grub/grub.cfg<br />
<br />
If adding the splash image was successful, the user will see "Found background image..." in the terminal as the command is executed. <br />
If this phrase is not seen, the image information was probably not incorporated into the grub.cfg file.<br />
<br />
If the image is not displayed, check:<br />
* The path and the filename in /etc/default/grub are correct.<br />
* The image is of the proper size and format (tga, png, 8-bit jpg).<br />
* The image was saved in the RGB mode, and is not indexed.<br />
* The console mode is not enabled in /etc/default/grub.<br />
* The command grub-mkconfig must be executed to place the background image information into the /boot/grub/grub.cfg file.<br />
<br />
====Menu colors====<br />
<br />
As in Grub (0.9x), you can change the menu colors in Grub2. The available colors for GRUB2 are at http://www.gnu.org/software/grub/manual/html_node/Theme-file-format.html#Theme-file-format.<br />
Here is an example:<br />
<br />
Edit {{ic|/etc/default/grub}}:<br />
GRUB_COLOR_NORMAL="light-blue/black"<br />
GRUB_COLOR_HIGHLIGHT="light-cyan/blue"<br />
<br />
Generate the changes:<br />
grub-mkconfig -o /boot/grub/grub.cfg<br />
<br />
====Hidden menu====<br />
<br />
One of the unique features of Grub2 is hiding/skipping the menu and showing it by holding "Shift" when needed. You can also adjust whether you want to see the timeout counter.<br />
<br />
Edit {{ic|/etc/default/grub}} as you wish. Here is an example where the comments from the beginning of the two lines have been removed to enable the feature, the timeout has been set to five seconds and to be shown to the user:<br />
GRUB_HIDDEN_TIMEOUT=5<br />
GRUB_HIDDEN_TIMEOUT_QUIET=false<br />
<br />
and run:<br />
grub-mkconfig -o /boot/grub/grub.cfg<br />
<br />
=== Other Options ===<br />
<br />
==== LVM ====<br />
<br />
If you use [[LVM]] for your {{ic|/boot}}, add the following before menuentry lines:<br />
<br />
insmod lvm<br />
<br />
and specify your root in the menuentry as:<br />
<br />
set root=(''lvm_group_name''-''lvm_logical_boot_partition_name'')<br />
<br />
Example:<br />
<br />
# (0) Arch Linux<br />
menuentry "Arch Linux" {<br />
insmod lvm<br />
set root=(VolumeGroup-lv_boot)<br />
# you can only set following two lines<br />
linux /vmlinuz-linux root=/dev/mapper/VolumeGroup-root ro<br />
initrd /initramfs-linux.img<br />
}<br />
<br />
==== Raid ====<br />
<br />
Grub2 provides convenient handling of raid-volumes. You need to add:<br />
insmod raid<br />
<br />
which allows you to address the volume natively. E.g. {{ic|/dev/md0}} becomes:<br />
set root=(md0)<br />
<br />
whereas a partitioned raid-volume (e.g. {{ic|/dev/md0p1}}) becomes:<br />
set root=(md0,1)<br />
<br />
==== Persistent block device naming ====<br />
You can use UUIDs to detect partitions instead of the "old" {{ic|/dev/sd*}} scheming. It has the advantage of detecting partitions by their unique UUIDs, which is needed by some people booting with complicated partition setups.<br />
<br />
UUIDs are used by default in the recent versions of grub2 - there is no downside in it anyway except that you need to re-generate the {{ic|grub.cfg}} file every time you resize or reformat your partitions. Remember this when modifying partitions with Live-CD.<br />
<br />
The recent versions of grub2 use UUIDs by default. You can re-enable the use of UUIDS by simply commenting the UUID line (this is also what it looks like by default):<br />
#GRUB_DISABLE_LINUX_UUID=true<br />
you can also just set the value as {{ic|false}} as shown here:<br />
GRUB_DISABLE_LINUX_UUID=false<br />
<br />
Either way, do not forget to generate the changes:<br />
grub-mkconfig -o /boot/grub/grub.cfg<br />
<br />
==== Using Labels ====<br />
<br />
It is possible to use labels, human-readable strings attached to filesystems, by using the {{ic|--label}} option to {{ic|search}}. First of all, label your existing partition:<br />
# tune2fs -L a <LABEL> <PARTITION><br />
<br />
Then, add an entry using labels. An example of this:<br />
<br />
menuentry "Arch Linux, session texte" {<br />
search --label --no-floppy --set=root archroot<br />
linux /boot/vmlinuz-linux root=/dev/disk/by-label/archroot ro<br />
initrd /boot/initramfs-linux.img<br />
}<br />
<br />
==== Recall previous entry ====<br />
<br />
Grub2 can remember the last entry you booted from and use this as the default entry to boot from next time. This is useful if you have multiple kernels (i.e., the current Arch one and the LTS kernel as a fallback option) or operating systems. To do this, edit {{ic|/etc/default/grub}} and change the setting of {{ic|GRUB_DEFAULT}}:<br />
<br />
GRUB_DEFAULT=saved<br />
<br />
This ensures that grub will default to the saved entry. To enable saving the selected entry, add the following line to {{ic|/etc/default/grub}}:<br />
<br />
GRUB_SAVEDEFAULT=true<br />
<br />
Note that manually added menu items, eg Windows in {{ic|/etc/grub.d/40_custom}}, will need {{ic|savedefault}} added. Remember to regenerate your configuration file.<br />
<br />
==== Security ====<br />
<br />
If you want to secure GRUB2 so it is not possible for anyone to change boot parameters or use the command line, you can add a user/password combination to GRUB2's configuration files. To do this, run the command {{ic|grub-mkpasswd_pbkdf2}}. Enter a password and confirm it. The output will look like this:<br />
<br />
{{bc|<nowiki><br />
Your PBKDF2 is grub.pbkdf2.sha512.10000.C8ABD3E93C4DFC83138B0C7A3D719BC650E6234310DA069E6FDB0DD4156313DA3D0D9BFFC2846C21D5A2DDA515114CF6378F8A064C94198D0618E70D23717E82.509BFA8A4217EAD0B33C87432524C0B6B64B34FBAD22D3E6E6874D9B101996C5F98AB1746FE7C7199147ECF4ABD8661C222EEEDB7D14A843261FFF2C07B1269A</nowiki>}}Then, add the following to {{ic|/etc/grub.d/00_header}}:<br />
{{bc|<nowiki>cat << EOF<br />
<br />
set superusers="username"<br />
password_pbkdf2 username <password><br />
<br />
EOF</nowiki>}}<br />
where <password> is the string generated by {{ic|grub-mkpasswd_pbkdf2}}.<br />
<br />
Regenerate your configuration file. Your GRUB2 command line and boot parameters are now protected.<br />
<br />
==== Root Encryption ====<br />
<br />
To let GRUB2 automatically add the kernel parameters for root encryption,<br />
add "cryptdevice=/dev/yourdevice:label" to GRUB_CMDLINE_LINUX in /etc/defaults/grub .<br />
<br />
Example with root mapped to /dev/mapper/root :<br />
<br />
GRUB_CMDLINE_LINUX="cryptdevice=/dev/sda2:root"<br />
<br />
Also, disable the usage of UUIDs for the rootfs:<br />
<br />
GRUB_DISABLE_LINUX_UUID=true<br />
<br />
Regenerate the configuration.<br />
<br />
=== Booting an ISO Directly From Grub2 ===<br />
Edit {{ic|/etc/grub.d/40_custom}} to add an entry for the target ISO. When finished, update the grub menu as with the usual {{ic|grub-mkconfig -o /boot/grub/grub.cfg}} (as root).<br />
<br />
==== Arch ISO ====<br />
{{Note|Be sure to adjust the "hdX,Y" in the third line to point to the correct disk/partition number of the isofile. Also adjust the img_dev line to match this same location.}}<br />
<br />
menuentry "Archlinux-2011.08.19-netinstall-x86_64.iso" {<br />
set isofile="/archives/archlinux-2011.08.19-netinstall-x86_64.iso"<br />
loopback loop (hd0,7)$isofile<br />
linux (loop)/arch/boot/x86_64/vmlinuz archisolabel=ARCH_201108 img_dev=/dev/sda7 img_loop=$isofile earlymodules=loop<br />
initrd (loop)/arch/boot/x86_64/archiso.img<br />
}<br />
<br />
==== Ubuntu ISO ====<br />
{{Note|Be sure to adjust the "hdX,Y" in the third line to point to the correct disk/partition number of the isofile. }}<br />
<br />
menuentry "ubuntu-11.04-desktop-amd64.iso" {<br />
set isofile="/path/to/ubuntu-11.04-desktop-amd64.iso"<br />
loopback loop (hdX,Y)$isofile<br />
linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile quiet noeject noprompt splash --<br />
initrd (loop)/casper/initrd.lz<br />
}<br />
<br />
== Using the command shell ==<br />
<br />
Since the MBR is too small to store all GRUB2 modules, only the menu and a few basic commands reside there. The majority of GRUB2 functionality remains in modules in {{ic|/boot/grub}}, which are inserted as needed. In error conditions (e.g. if the partition layout changes) GRUB2 may fail to boot. When this happens, a command shell may appear.<br />
<br />
GRUB2 offers multiple shells/prompts. If there is a problem reading the menu but the bootloader is able to find the disk, you will likely be dropped to the "normal" shell:<br />
sh:grub><br />
<br />
If there is a more serious problem (e.g. GRUB cannot find required files), you may instead be dropped to the "rescue" shell:<br />
grub rescue><br />
<br />
The rescue shell is a restricted subset of the normal shell, offering much less functionality. If dumped to the rescue shell, first try inserting the "normal" module, then starting the "normal" shell:<br />
grub rescue> set prefix=(hdX,Y)/boot/grub<br />
grub rescue> insmod (hdX,Y)/boot/grub/normal.mod<br />
rescue:grub> normal<br />
<br />
=== Pager support ===<br />
<br />
GRUB2 supports pager for reading commands that provide long output (like the help command). This works only in normal shell mode and not in rescue mode. To enable pager, in GRUB2 command shell type:<br />
sh:grub> set pager=1<br />
<br />
== GUI configuration tools ==<br />
<br />
Following package may be installed from [[AUR]]<br />
* [https://aur.archlinux.org/packages.php?ID=44020 grub-customizer] (requires gettext gksu gtkmm hicolor-icon-theme openssl)<br />
*:Customize the bootloader (GRUB2 or BURG)<br />
* [http://kde-apps.org/content/show.php?content=139643 grub2-editor] (requires kdelibs)<br />
*:A KDE4 control module for configuring the GRUB2 bootloader<br />
* [http://kde-apps.org/content/show.php?content=137886 kcm-grub2] (requires kdelibs python2-qt kdebindings-python)<br />
*:This Kcm module manages the most common settings of Grub2.<br />
* [http://sourceforge.net/projects/startup-manager/ startupmanager] (requires gnome-python imagemagick yelp python2 xorg-xrandr)<br />
*:GUI app for changing the settings of GRUB, GRUB2, Usplash and Splashy<br />
<br />
== parttool or legacy hide/unhide ==<br />
<br />
If you have a win9x paradigm with hidden C disks GRUB legacy had the hide/unhide feature. In GRUB2 this has been replaced by parttool. For example, to boot the third C disk of three win9x installations on the CLI enter the CLI and:<br />
parttool hd0,1 hidden+ boot-<br />
parttool hd0,2 hidden+ boot-<br />
parttool hd0,3 hidden- boot+<br />
set root=hd0,3<br />
chainloader +1<br />
boot<br />
<br />
== Using the rescue console ==<br />
<br />
See [[#Using the command shell]] first. If unable to activate the standard shell, one possible solution is to boot using a live CD or some other rescue disk to correct configuration errors and reinstall GRUB. However, such a boot disk is not always available (nor necessary); the rescue console is surprisingly robust.<br />
<br />
The available commands in GRUB rescue include "insmod", "ls", "set", and "unset". This example uses "set" and "insmod". "set" modifies variables and "insmod" inserts new modules to add functionality.<br />
<br />
Before starting, the user must know the location of their {{ic|/boot}} partition (be it a separate partition, or a subdirectory under their root):<br />
grub rescue> set prefix=(hdX,Y)/boot/grub<br />
<br />
where X is the physical drive number and Y is the partition number.<br />
<br />
To expand console capabilities, insert the "linux" module:<br />
grub rescue> insmod (hdX,Y)/boot/grub/linux.mod<br />
<br />
{{Note|With a separate boot partition, omit {{ic|/boot}} from the path, (i.e. type {{ic|1=set prefix=(hdX,Y)/grub}} and {{ic|insmod (hdX,Y)/grub/linux.mod}}).}}<br />
<br />
This introduces the "linux" and "initrd" commands, which should be familiar (see [[#Configuration]]).<br />
<br />
An example, booting Arch Linux:<br />
set root=(hd0,5)<br />
linux /boot/vmlinuz-linux root=/dev/sda5<br />
initrd /boot/initramfs-linux.img<br />
boot<br />
<br />
With a separate boot partition, again change the lines accordingly:<br />
set root=(hd0,5)<br />
linux /vmlinuz-linux root=/dev/sda6<br />
initrd /initramfs-linux.img<br />
boot<br />
<br />
After successfully booting the Arch Linux installation, users can correct {{ic|grub.cfg}} as needed and then run:<br />
# grub-install /dev/sda --no-floppy<br />
<br />
to reinstall GRUB2 and fix the problem completely, changing {{ic|/dev/sda}} if needed. See [[#Bootloader installation]] for details.<br />
<br />
== Combining the use of UUID's and basic scripting ==<br />
<br />
If you like the idea of using UUID's to avoid unreliable BIOS mappings or are struggling with Grub's syntax, here is an example boot menu item that uses UUID's and a small script to direct Grub to the proper disk partitions for your system. All you need to do is replace the UUID's in the sample with the correct UUID's for your system. (The example applies to a system with a boot and root partition. You will obviously need to modify the Grub configuration if you have additional partitions.)<br />
<br />
menuentry "Arch Linux 64" {<br />
# Set the UUIDs for your boot and root partition respectively<br />
set the_boot_uuid=ece0448f-bb08-486d-9864-ac3271bd8d07 <br />
set the_root_uuid=c55da16f-e2af-4603-9e0b-03f5f565ec4a<br />
<br />
# (Note: This may be the same as your boot partition)<br />
<br />
# Get the boot/root devices and set them in the root and grub_boot variables <br />
search --fs-uuid --no-floppy --set=root $the_root_uuid <br />
search --fs-uuid --no-floppy --set=grub_boot $the_boot_uuid<br />
<br />
# Check to see if boot and root are equal.<br />
# If they are, then append /boot to $grub_boot (Since $grub_boot is actually the root partition)<br />
if [ $the_boot_uuid == $the_root_uuid] ; then<br />
set grub_boot=$grub_boot/boot<br />
fi<br />
<br />
# $grub_boot now points to the correct location, so the following will properly find the kernel and initrd<br />
linux ($grub_boot)/vmlinuz-linux root=/dev/disk/by-uuid/$uuid_os_root ro<br />
initrd ($grub_boot)/initramfs-linux.img<br />
}<br />
<br />
== Troubleshooting ==<br />
<br />
Any troubleshooting should be added here.<br />
<br />
=== Enable GRUB2 debug messages ===<br />
<br />
Add<br />
<br />
set pager=1<br />
set debug=all<br />
<br />
to {{ic|grub.cfg}}.<br />
<br />
=== Correct GRUB2 No Suitable Mode Found Error ===<br />
<br />
If you get this error when booting any menuentry<br />
<br />
error: no suitable mode found<br />
Booting however<br />
<br />
Then you need to initialize grub2 graphical terminal (gfxterm) with proper video mode (gfxmode) in grub2. This video mode is passed by grub2 to the linux kernel via 'gfxpayload'. In case of UEFI systems, if the grub2 video mode is not initialized, no kernel boot messages will be shown in the terminal (atleast until KMS kicks in)<br />
<br />
Copy {{ic|/usr/share/grub/unicode.pf2}} to ${GRUB2_PREFIX_DIR} ({{ic|/boot/grub/}} in case of BIOS and UEFI systems. If GRUB2 UEFI was installed with {{ic|1=--boot-directory=/boot/efi/efi}} set, then the directory is {{ic|/boot/efi/efi/grub/}}. <br />
<br />
# cp /usr/share/grub/unicode.pf2 ${GRUB2_PREFIX_DIR}<br />
<br />
If {{ic|/usr/share/grub/unicode.pf2}} does not exist, install {{Pkg|bdf-unifont}}, create the unifont.pf2 file and then copy it to ${GRUB2_PREFIX_DIR}.<br />
<br />
# grub-mkfont -o unicode.pf2 /usr/share/fonts/misc/unifont.bdf<br />
<br />
Then, in the {{ic|grub.cfg}} file, add the following lines to enable grub2 to pass the video mode correctly to the kernel, without of which you will only get a black screen (no output) but booting (actually) proceeds successfully without any system hang:<br />
<br />
BIOS systems<br />
<br />
insmod vbe<br />
<br />
UEFI systems<br />
<br />
insmod efi_gop<br />
insmod efi_uga<br />
<br />
After that add the following code (common to both BIOS and UEFI)<br />
<br />
insmod font<br />
<br />
if loadfont ${prefix}/unicode.pf2<br />
then<br />
insmod gfxterm<br />
set gfxmode=auto<br />
set gfxpayload=keep<br />
terminal_output gfxterm<br />
fi<br />
<br />
As you can see for gfxterm (graphical terminal) to function properly, {{ic|unicode.pf2}} font file should exist in ${GRUB2_PREFIX_DIR}.<br />
<br />
=== msdos-style error message ===<br />
<br />
grub-setup: warn: This msdos-style partition label has no post-MBR gap; embedding won't be possible!<br />
grub-setup: warn: Embedding is not possible. GRUB can only be installed in this setup by using blocklists.<br />
However, blocklists are UNRELIABLE and its use is discouraged.<br />
grub-setup: error: If you really want blocklists, use --force.<br />
<br />
This error may occur when you try installing GRUB2 in a VMware container. Read more about it [https://bbs.archlinux.org/viewtopic.php?pid=581760#p581760 here]. It happens when the first partition starts just after the MBR (block 63), without the usual space of 1 MiB (2048 blocks) before the first partition. Read [[#MBR_aka_msdos_partitioning_specific_instructions]]<br />
<br />
=== UEFI GRUB2 drops to shell ===<br />
<br />
If grub loads but drop you into the rescue shell with no errors, it may be because of a missing or misplaced {{ic|grub.cfg}}. This will happen if GRUB2 UEFI was installed with {{ic|--boot-directory}} and {{ic|grub.cfg}} is missing OR if the partition number of the boot partition changed (which is hard-coded into the {{ic|grubx64.efi}} file).<br />
<br />
=== UEFI GRUB2 not loaded ===<br />
In some cases the EFI may fail to load grub correctly. Provided everything is set up correctly, the output of<br />
efibootmgr -v<br />
might look something like this:<br />
BootCurrent: 0000<br />
Timeout: 3 seconds<br />
BootOrder: 0000,0001,0002<br />
Boot0000* Grub HD(1,800,32000,23532fbb-1bfa-4e46-851a-b494bfe9478c)File(\efi\grub\grub.efi)<br />
Boot0001* Shell HD(1,800,32000,23532fbb-1bfa-4e46-851a-b494bfe9478c)File(\EfiShell.efi)<br />
Boot0002* Festplatte BIOS(2,0,00)P0: SAMSUNG HD204UI<br />
If everything works correctly, the EFI would now automatically load grub.<br><br />
If the screen only goes black for a second and the next boot option is tried afterwards, according to [https://bbs.archlinux.org/viewtopic.php?pid=981560#p981560 this post], moving grub to the partition root can help. The boot option has to be deleted and recreated afterwards. The entry for grub should look like this then:<br />
Boot0000* Grub HD(1,800,32000,23532fbb-1bfa-4e46-851a-b494bfe9478c)File(\grub.efi)<br />
<br />
=== Invalid signature ===<br />
If trying to boot windows results in an "invalid signature" error, e.g. after reconfiguring partitions or adding additional hard drives, (re)move grub's device configuration and let it reconfigure.<br />
# mv /boot/grub/device.map /boot/grub/device.map-old<br />
# grub-mkconfig -o /boot/grub/grub.cfg<br />
Grub-mkconfig should now mention all found boot options including windows. If it works, remove /boot/grub/device.map-old.<br />
<br />
== References ==<br />
<br />
# Official GRUB2 Manual - http://www.gnu.org/software/grub/manual/grub.html<br />
# Ubuntu wiki page for Grub2 - https://help.ubuntu.com/community/Grub2<br />
# GRUB2 wiki page describing steps to compile for UEFI systems - https://help.ubuntu.com/community/UEFIBooting<br />
# Wikipedia's page on [[wikipedia:BIOS_Boot_partition|BIOS Boot Partition]]<br />
<br />
== External Links ==<br />
<br />
# [https://github.com/the-ridikulus-rat/My_Shell_Scripts/blob/master/grub2/grub2_bios.sh A Linux Bash Shell script to compile and install GRUB2 for BIOS from BZR Source]<br />
# [https://github.com/the-ridikulus-rat/My_Shell_Scripts/blob/master/grub2/grub2_uefi.sh A Linux Bash Shell script to compile and install GRUB2 for UEFI from BZR Source]</div>Wzyboyhttps://wiki.archlinux.org/index.php?title=GRUB_(%E6%AD%A3%E9%AB%94%E4%B8%AD%E6%96%87)&diff=280279GRUB (正體中文)2013-10-29T13:53:19Z<p>Wzyboy: /* Install to Partition or Partitionless Disk */ fix typo</p>
<hr />
<div>[[Category:Boot loaders (正體中文)]]<br />
[[ar:GRUB]]<br />
[[cs:GRUB2]]<br />
[[es:GRUB2]]<br />
[[fr:GRUB2]]<br />
[[id:GRUB2]]<br />
[[it:GRUB2]]<br />
[[ru:GRUB2]]<br />
[[tr:GRUB2]]<br />
[[zh-CN:GRUB2]]<br />
[[zh-TW:GRUB2]]<br />
{{Article summary start}}<br />
{{Article summary text|Covers various aspects of the next generation of the GRand Unified Bootloader (GRUB2).}}<br />
{{Article summary heading|Overview}}<br />
{{Article summary text|{{Boot process overview}}}}<br />
{{Article summary heading|Related}}<br />
{{Article summary wiki|Burg}} - Burg is a brand-new boot loader based on GRUB2. It uses a new object format which allows it to be built in a wider range of OS, including Linux, Windows, OS X, Solaris, FreeBSD, etc. It also has a highly configurable menu system which works in both text and graphic mode. <br />
{{Article summary heading|Resources}}<br />
{{Article summary link|GNU GRUB -- GNU Project|https://www.gnu.org/software/grub/}}<br />
{{Article summary end}}<br />
<br />
[http://www.gnu.org/software/grub/ GRUB2] 是新一代的 GRand Unified Bootloader (GRUB/開機引導程式). GRUB2 來自於 [http://www.nongnu.org/pupa/ PUPA] 這個探討下一代 GRUB 的研究專案 。GRUB 2 清除了所有東西並被重新編寫,擁有模組化和可移植性。[http://www.gnu.org/software/grub/grub-faq.html#q1]<br />
<br />
簡單地說,''開機引導程式'' 是當電腦開機時第一個執行的程式(在此請自動乎略bios,謝謝)。它負責載入並移交控制權給 Linux 核心。而核心載入後,則反過來啟動作業系統內的其它部份。<br />
<br />
== 前言 ==<br />
有些資訊必須先予以澄清:<br />
* The name ''GRUB'' officially refers to version ''2'' of the software, see [https://www.gnu.org/software/grub/]. If you are looking for the article on the legacy version, see [[GRUB Legacy]].<br />
<br />
* [[GRUB Legacy]] (i.e. version 0.9x) 已被開發者們認為是舊作,在 Arch Linux已經被GRUB2和 [[Syslinux]]給取代 . 參閱最新消息 [https://www.archlinux.org/news/grub-legacy-no-longer-supported/ here]. Upstream recommends GRUB2 >=1.99 over GRUB Legacy, even for current GRUB Legacy users.<br />
<br />
* The [[Archboot]] ISO的安裝script支援 {{Pkg|grub-bios}} 和 {{Pkg|grub-efi-x86_64}}的安裝. 舊版官方的安裝script-AIF (Arch Installation Framework)還未支援 GRUB(2)。<br />
<br />
* 從 1.99-6版起, GRUB2 支援 [[Btrfs]] as root (without a separate {{ic|/boot}} filesystem) compressed with either zlib or LZO.<br />
<br />
* For GRUB2 UEFI info, it is recommended to read the [[UEFI]], [[GPT]] and [[UEFI_Bootloaders]] pages before reading this page.<br />
<br />
=== 給 GRUB 舊版的使用者 ===<br />
* GRUB 舊版將從您的系統中移除, 您可以考慮將 GRUB更新到版本 2.x, 或者其他導引程式.<br />
<br />
* Upgrade from [[GRUB Legacy]] to [[GRUB]](2) is the much same as fresh installing GRUB(2)which is covered [[#Installation|below]].<br />
<br />
* GRUB and GRUB2 的指令是有差別的. 請在進行下一步之前自己熟悉一下 [http://grub.enbug.org/CommandList GRUB2 commands] (例如, "find" 就被更換為 "search").<br />
<br />
* GRUB2 現在己經 ''模組化'' 且不再需要 "stage 1.5"。因此,引導程式本身是有限的 - 當需要擴充功能時模組才從硬碟內被載入(例如,[[LVM]] 或 RAID支援)<br />
<br />
* GRUB2 設備命名也改得和 GRUB 不同。磁區 Partitions 由數字 1 起算,而硬碟仍然由 0 起算,舉例來說,{{ic|/dev/sda1}} 被 GRUB2 指引為 {{ic|(hd0,1)}} 。<br />
<br />
<br />
=== Preliminary Requirements for GRUB2 ===<br />
<br />
==== BIOS 系統 ====<br />
<br />
===== [[GPT]] specific instructions =====<br />
<br />
GRUB2 in BIOS-GPT configuration requires a [http://www.gnu.org/software/grub/manual/html_node/BIOS-installation.html#BIOS-installation BIOS Boot Partition] to embed its {{ic|core.img}} in the absence of post-MBR gap in GPT partitioned systems (which is taken over by the GPT Primary Header and Primary Partition table). This partition is used by GRUB2 only in BIOS-GPT setups. No such partition type exists in case of MBR partitioning (at least not for GRUB2). This partition is also not required if the system is UEFI based, as no embedding of bootsectors takes place in that case. Syslinux does not require this partition.<br />
<br />
For a BIOS-GPT configuration, create a 2 MiB partition using cgdisk or GNU Parted with no filesystem. The location of the partition in the partition table does not matter but it should be within the first 2 TiB region of the disk. It is advisable to put it somewhere in the beginning of the disk before the {{ic|/boot}} partition. Set the partition type to "EF02" in cgdisk or {{ic|set <BOOT_PART_NUM> bios_grub on}} in GNU Parted.<br />
<br />
{{Note|This partition should be created before {{ic|grub-install}} or {{ic|grub-setup}} is run or before the '''Install Bootloader''' step of the Archlinux installer (if GRUB2 BIOS is selected as bootloader).}}<br />
<br />
===== [[MBR]] aka msdos partitioning specific instructions =====<br />
<br />
Usually the post-MBR gap (after the 512 byte MBR region and before the start of the 1st partition) in many MBR (or msdos disklabel) partitioned systems is 31 KiB when DOS compatibility cylinder alignment issues are satisfied in the partition table. However a post-MBR gap of about 1 to 2 MiB is recommended to provide sufficient room for embedding GRUB2's {{ic|core.img}} ({{bug|24103}}). It is advisable to use a partitioner which supports 1 MiB partition alignment to obtain this space as well as satisfy other non-512 byte sector issues (which are unrelated to embedding of {{ic|core.img}}).<br />
<br />
如果你沒有在BIOS系統中雙啟動到MS Windows (any version), 轉換到 GPT partitioning - [[GUID_Partition_Table#Convert_from_MBR_to_GPT]]是很適合的。<br />
<br />
{{Warning|Create the 2MiB partition mentioned above BEFORE you convert to GPT. If you do not, gparted will not resize your boot partition to allow its creation, and when you reboot GRUB2 will not know where to look.}}<br />
<br />
==== UEFI 系統 ====<br />
<br />
===== 創建並掛載到UEFI系統分割區(Create and Mount the UEFI SYSTEM PARTITION) =====<br />
<br />
{{注意|建議先閱讀 [[UEFI]], [[GPT]] and [[UEFI_Bootloaders]] 頁面}}<br />
<br />
遵循 [[Unified_Extensible_Firmware_Interface#Create_an_UEFI_System_Partition_in_Linux]] 中創建 UEFI SYSTEM PARTITION的指引. 接在將 UEFI SYSTEM PARTITION 掛載在 {{ic|/boot/efi}}. 如果您已經將 UEFISYS partition 掛載在其他掛載點, 以此掛載點置換在下面指引中的 {ic|/boot/efi}} :<br />
<br />
# mkdir -p /boot/efi<br />
# mount -t vfat <UEFISYS_PART_DEVICE> /boot/efi<br />
<br />
如果<UEFI_系統分割區>{{ic|/EFI}}不存在,請創建它的路徑(如:/boot/efi/EFI) <br />
<br />
# mkdir -p /boot/efi/EFI<br />
<br />
== 安裝 ==<br />
<br />
=== BIOS 系統 ===<br />
<br />
==== 備份重要資料(Backup Important Data) ====<br />
<br />
雖然 GRUB(2) 的安裝應該會是相當平穩的,仍然強烈建議安裝 {{Pkg|grub-bios}}前保留舊版的 GRUB資料。<br />
<br />
# mv /boot/grub /boot/grub-legacy<br />
<br />
備份內含啟動碼(boot code)跟分區對映表(partition table)的 MBR (根據您的實際硬碟分割情形,置換 {{ic|/dev/sd'''X'''}} )<br />
<br />
# dd if=/dev/sdX of=/path/to/backup/mbr_backup bs=512 count=1<br />
<br />
只有 MBR中的446 位元組包含啟動碼, 接者的 64 位元組包含分區對映表. 如果您不想在將來回存到MBR時覆蓋掉你新設置的分區對映表,強烈建議此時只備份MBR啟動碼就好:<br />
<br />
# dd if=/dev/sdX of=/path/to/backup/bootcode_backup bs=446 count=1<br />
<br />
如果無法正確安裝 GRUB2 , 參閱 [[GRUB2#Restore_GRUB_Legacy]].<br />
<br />
==== 安裝grub-bios套件(Install grub-bios package) ====<br />
<br />
GRUB(2)套件可以用pacman安裝 (安裝完將會取代 {{Pkg|grub-legacy}} or {{Pkg|grub}}):<br />
<br />
# pacman -S grub-bios<br />
<br />
{{Note|僅安裝套件並不會更新 {{ic|/boot/grub/i386-pc/core.img}} 檔案和 GRUB(2) 在 {{ic|/boot/grub/i386-pc}}的模組. 你必須如下解釋般使用 {{ic|grub-install}}來更新他們}}<br />
<br />
==== 安裝grub-bios啟動檔案(Install grub-bios boot files) ====<br />
<br />
要達到BIOS啟動有三種安裝 GRUB(2)方法:<br />
*[[#安裝到440位元組MBR啟動區(Install_to_440-byte_MBR_boot_code_region)]] (建議) , <br />
*[[#Install_to_Partition_or_Partitionless_Disk]] (不建議),<br />
*[[#Generate_core.img_alone]] (最安全的方法,但需要安裝其他的BIOS引導程式像是 [[grub-legacy]] 或 [[syslinux]] 來連鎖啟動 (chainload) {{ic|/boot/grub/i386-pc/core.img}}). <br />
<br />
===== 安裝到440位元組MBR啟動區(Install to 440-byte MBR boot code region) =====<br />
<br />
To setup {{ic|grub-bios}} in the 440-byte Master Boot Record boot code region, populate the {{ic|/boot/grub}} directory, generate the {{ic|/boot/grub/i386-pc/core.img}} file, and embed it in the 31 KiB (minimum size - varies depending on partition alignment) post-MBR gap (MBR disks) or in BIOS Boot Partition (GPT disks), run:<br />
<br />
# modprobe dm-mod<br />
# grub-install --target=i386-pc --recheck --debug /dev/sda<br />
# mkdir -p /boot/grub/locale<br />
# cp /usr/share/locale/en\@quot/LC_MESSAGES/grub.mo /boot/grub/locale/en.mo<br />
<br />
where {{ic|/dev/sda}} is the destination of the installation (in this case the MBR of the first SATA disk). If you use [[LVM]] for your {{ic|/boot}}, you can install GRUB2 on multiple physical disks. <br />
<br />
{{Note|Without {{ic|--target}} or {{ic|--directory}} option, grub-install cannot determine for which firmware grub(2) is being installed. In such cases grub-install will show {{ic|source_dir doesn't exist. Please specify --target or --directory}} message.}}<br />
<br />
The {{ic|--no-floppy}} tells {{ic|grub-bios}} utilities not to search for any floppy devices which reduces the overall execution time of {{ic|grub-install}} on many systems (it will also prevent the issue below from occurring). Otherwise you get an error that looks like this:<br />
<br />
grub-probe: error: Cannot get the real path of '/dev/fd0'<br />
Auto-detection of a filesystem module failed.<br />
Please specify the module with the option '--modules' explicitly.<br />
<br />
{{Note|{{ic|--no-floppy}} has been removed from {{ic|grub-install}} in 2.00~beta2 upstream release, and replaced with {{ic|--allow-floppy}}.}}<br />
<br />
{{Warning|Make sure to check the {{ic|/boot}} directory if you use the latter. Sometimes the {{ic| boot-directory}} parameter creates another {{ic|/boot}} folder inside of {{ic|/boot}}. A wrong install would look like: {{ic|/boot/boot/grub/}}.}}<br />
<br />
===== Install to Partition or Partitionless Disk =====<br />
<br />
{{Note|{{ic|grub-bios}} (any version - including upstream Bazaar repo) does not encourage installation to a partition boot sector or a partitionless disk like GRUB Legacy or syslinux does. This kind of setup is prone to breakage, especially during updates, and is not supported by Arch devs.}}<br />
<br />
To set up {{ic|grub-bios}} to a partition boot sector, to a partitionless disk (also called superfloppy) or to a floppy disk, run (using for example {{ic|/dev/sdaX}} as the {{ic|/boot}} partition):<br />
<br />
# modprobe dm-mod <br />
# chattr -i /boot/grub/i386-pc/core.img<br />
# grub-install --target=i386-pc --recheck --debug --force /dev/sdaX<br />
# mkdir -p /boot/grub/locale<br />
# cp /usr/share/locale/en@quot/LC_MESSAGES/grub.mo /boot/grub/locale/en.mo<br />
# chattr +i /boot/grub/i386-pc/core.img<br />
<br />
You need to use the {{ic|--force}} option to allow usage of blocklists and should not use {{ic|1=--grub-setup=/bin/true}} (which is similar to simply generating {{ic|core.img}}).<br />
<br />
{{ic|grub-install}} will give out warnings like which should give you the idea of what might go wrong with this approach:<br />
<br />
/sbin/grub-setup: warn: Attempting to install GRUB to a partitionless disk or to a partition. This is a BAD idea.<br />
/sbin/grub-setup: warn: Embedding is not possible. GRUB can only be installed in this setup by using blocklists. <br />
However, blocklists are UNRELIABLE and their use is discouraged.<br />
<br />
Without {{ic|--force}} you may get the below error and {{ic|grub-setup}} will not setup its boot code in the partition boot sector:<br />
<br />
/sbin/grub-setup: error: will not proceed with blocklists<br />
<br />
With {{ic|--force}} you should get:<br />
<br />
Installation finished. No error reported.<br />
<br />
The reason why {{ic|grub-setup}} does not by default allow this is because in case of partition or a partitionless disk is that {{ic|grub-bios}} relies on embedded blocklists in the partition bootsector to locate the {{ic|/boot/grub/i386-pc/core.img}} file and the prefix dir {{ic|/boot/grub}}. The sector locations of {{ic|core.img}} may change whenever the filesystem in the partition is being altered (files copied, deleted etc.). For more info see https://bugzilla.redhat.com/show_bug.cgi?id=728742 and https://bugzilla.redhat.com/show_bug.cgi?id=730915.<br />
<br />
The workaround for this is to set the immutable flag on {{ic|/boot/grub/i386-pc/core.img}} (using chattr command as mentioned above) so that the sector locations of the {{ic|core.img}} file in the disk is not altered. The immutable flag on {{ic|/boot/grub/i386-pc/core.img}} needs to be set only if {{ic|grub-bios}} is installed to a partition boot sector or a partitionless disk, not in case of installation to MBR or simple generation of {{ic|core.img}} without embedding any bootsector (mentioned above).<br />
<br />
===== 單獨產生core.img(Generate core.img alone) =====<br />
<br />
To populate the {{ic|/boot/grub}} directory and generate a {{ic|/boot/grub/i386-pc/core.img}} file '''without''' embedding any {{ic|grub-bios}} bootsector code in the MBR, post-MBR region, or the partition bootsector, add {{ic|1=--grub-setup=/bin/true}} to {{ic|grub-install}}:<br />
<br />
# modprobe dm-mod<br />
# grub-install --target=i386-pc --grub-setup=/bin/true --recheck --debug /dev/sda<br />
# mkdir -p /boot/grub/locale<br />
# cp /usr/share/locale/en@quot/LC_MESSAGES/grub.mo /boot/grub/locale/en.mo<br />
<br />
You can then chainload GRUB2's {{ic|core.img}} from GRUB Legacy or syslinux as a Linux kernel or a multiboot kernel.<br />
<br />
==== 產生GRUB2 BOIS設置檔案(Generate GRUB2 BIOS Config file) ====<br />
<br />
最後產生一個GRUB2的設定檔 (this is explained in greater detail in the Configuration section):<br />
<br />
# grub-mkconfig -o /boot/grub/grub.cfg<br />
<br />
{{注意|檔案路徑是 {{ic|/boot/grub/grub.cfg}}, '''不是''' {{ic|/boot/grub/i386-pc/grub.cfg}}.}}<br />
<br />
如果 grub(2) 在啟動是出現 "no suitable mode found" 訊息, 前往到 [[#Correct_GRUB2_No_Suitable_Mode_Found_Error]].<br />
如果 {{ic|grub-mkconfig}} 失敗了, 使用下列指令將你的 {{ic|/boot/grub/menu.lst}} 轉換成 {{ic|/boot/grub/grub.cfg}} :<br />
<br />
# grub-menulst2cfg /boot/grub/menu.lst /boot/grub/grub.cfg<br />
<br />
範例:<br />
<br />
{{hc|/boot/grub/menu.lst|<nowiki><br />
default=0<br />
timeout=5<br />
<br />
title Arch Linux Stock Kernel<br />
root (hd0,0)<br />
kernel /vmlinuz-linux root=/dev/sda2 ro<br />
initrd /initramfs-linux.img<br />
<br />
title Arch Linux Stock Kernel Fallback<br />
root (hd0,0)<br />
kernel /vmlinuz-linux root=/dev/sda2 ro<br />
initrd /initramfs-linux-fallback.img<br />
</nowiki>}}<br />
<br />
{{hc|/boot/grub/grub.cfg|<nowiki><br />
set default='0'; if [ x"$default" = xsaved ]; then load_env; set default="$saved_entry"; fi<br />
set timeout=5<br />
<br />
menuentry 'Arch Linux Stock Kernel' {<br />
set root='(hd0,1)'; set legacy_hdbias='0'<br />
legacy_kernel '/vmlinuz-linux' '/vmlinuz-linux' 'root=/dev/sda2' 'ro'<br />
legacy_initrd '/initramfs-linux.img' '/initramfs-linux.img'<br />
<br />
}<br />
<br />
menuentry 'Arch Linux Stock Kernel Fallback' {<br />
set root='(hd0,1)'; set legacy_hdbias='0'<br />
legacy_kernel '/vmlinuz-linux' '/vmlinuz-linux' 'root=/dev/sda2' 'ro'<br />
legacy_initrd '/initramfs-linux-fallback.img' '/initramfs-linux-fallback.img'<br />
}<br />
</nowiki>}}<br />
<br />
如果你忘了創建 {{ic|/boot/grub/grub.cfg}} 這個GRUB2的設定檔,那麼重啟到 GRUB2 選單,按C進入命令列, 輸入:<br />
<br />
sh:grub> insmod legacycfg<br />
sh:grub> legacy_configfile ${prefix}/menu.lst<br />
<br />
啟動到Archlinux且重新創建正確的 {{ic|/boot/grub/grub.cfg}} 。<br />
<br />
{{注意|這個選項只有在 BIOS 系統管用, 在 UEFI 系統不行.}}<br />
<br />
==== 在BIOS多重啟動(Multiboot in BIOS) ====<br />
<br />
===== 在BIOS-MBR模式中啟動已安裝的Microsoft Windows(Boot Microsoft Windows installed in BIOS-MBR mode) =====<br />
<br />
{{注意|GRUB(2) 支援直接啟動 {{ic|bootmgr}}和分割區啟動區的連鎖載入 (chainload of partition boot sector),因此不需要BIOS-MBR設定來啟動Windows}}<br />
<br />
{{警告|需要注意是具有bootmgr的系統分割區, 而不是你 "真正的" windows 分割區, 也就是說:當你用blkid這個指令顯示出所有UUID's,他將是有著 LABEL&#61;"SYSTEM RESERVED" 約 100 mb 大,更像是arch的 boot 分割區. 觀看 http://en.wikipedia.org/wiki/System_partition_and_boot_partition for some more info.}}<br />
<br />
找到放置著{{ic|bootmgr}}的NTFS格式Windows系統分割區的UUID . 舉例來說, 如果 Windows {{ic|bootmgr}} 置放在 {{ic|/media/Windows/bootmgr}}:<br />
<br />
# grub-probe --target=fs_uuid /media/Windows/bootmgr<br />
69B235F6749E84CE<br />
<br />
然後, 把下面的幾行敘述加到 {{ic|/etc/grub.d/40_custom}} 或 {{ic|/boot/grub/custom.cfg}} 接者用前述的{{ic|grub-mkconfig}}產生 {{ic|grub.cfg}}來啟動安裝在BIOS-MBR模式的 Windows (Vista, 7 or 8):<br />
<br />
<pre><br />
menuentry "Microsoft Windows 7 BIOS-MBR" {<br />
insmod part_msdos<br />
insmod ntfs<br />
insmod search_fs_uuid<br />
insmod ntldr <br />
search --fs-uuid --no-floppy --set=root 69B235F6749E84CE<br />
ntldr /bootmgr<br />
}</pre><br />
<br />
For Windows XP:<br />
<br />
menuentry "Microsoft Windows XP" {<br />
insmod part_msdos<br />
insmod ntfs<br />
insmod search_fs_uuid<br />
insmod ntldr <br />
search --fs-uuid --no-floppy --set=root 69B235F6749E84CE<br />
ntldr /ntldr<br />
}<br />
<br />
=== UEFI系統(UEFI systems) ===<br />
<br />
{{Note|在閱讀這個部份前,建議先讀過 [[UEFI]], [[GPT]] and [[UEFI_Bootloaders]] 頁面}}<br />
<br />
==== 安裝grub-uefi套件(Install grub-uefi package) ====<br />
<br />
{{Note|Unless specified as EFI 1.x , EFI and UEFI terms are used interchangeably to denote UEFI 2.x firmware. Also unless stated explicitely, the instructions are general and not Mac specific. Some of them may not work or may be different in Macs. Apple's EFI implementation is neither a EFI 1.x version nor UEFI 2.x version but mixes up both. This kind of firmware does not fall under any one UEFI Specification version and is therefore not a standard UEFI firmware.}}<br />
<br />
GRUB(2) UEFI bootloader is available in Arch Linux only from version 1.99~rc1. To install, first [[Unified_Extensible_Firmware_Interface#Detecting_UEFI_Firmware_Arch|detect which UEFI firmware arch]] you have (either x86_64 or i386).<br />
<br />
Depending on that, install the appropriate package<br />
<br />
For 64-bit aka x86_64 UEFI firmware:<br />
# pacman -S grub-efi-x86_64<br />
<br />
For 32-bit aka i386 UEFI firmware:<br />
# pacman -S grub-efi-i386<br />
<br />
{{Note|Simply installing the package will not update the {{ic|core.efi}} file and the GRUB(2) modules in the UEFI System Partition. You need to do this manually using {{ic|grub-install}} as explained below.}}<br />
<br />
==== 安裝grub-uefi啟動檔案(Install grub-uefi boot files) ====<br />
<br />
===== Install to UEFI SYSTEM PARTITION =====<br />
<br />
{{Note|The below commands assume you are using {{ic|grub-efi-x86_64}} (for {{ic|grub-efi-i386}} replace {{ic|x86_64}} with {{ic|i386}} in the below commands).}}<br />
<br />
{{Note|To do this, you need to boot using UEFI and not the BIOS. If you booted by just copying the ISO file to the USB drive, you will need to follow [[UEFI#Create_UEFI_bootable_USB_from_ISO|this guide]] or grub-install will show errors.}}<br />
<br />
The UEFI system partition will need to be mounted at {{ic|/boot/efi/}} for the GRUB(2) install script to detect it:<br />
<br />
# mkdir -p /boot/efi<br />
# mount -t vfat /dev/sdXY /boot/efi<br />
<br />
Install GRUB UEFI application to {{ic|/boot/efi/EFI/arch_grub}} and its modules to {{ic|/boot/grub/x86_64-efi}} (recommended) using:<br />
<br />
# modprobe dm-mod<br />
# grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=arch_grub --recheck --debug<br />
# mkdir -p /boot/grub/locale<br />
# cp /usr/share/locale/en\@quot/LC_MESSAGES/grub.mo /boot/grub/locale/en.mo<br />
<br />
{{Note|Without {{ic|--target}} or {{ic|--directory}} option, grub-install cannot determine for which firmware grub(2) is being installed. In such cases grub-install will show {{ic|source_dir doesn't exist. Please specify --target or --directory}} message.}}<br />
<br />
If you want to install grub(2) modules and {{ic|grub.cfg}} at the directory {{ic|/boot/efi/EFI/grub}} and the {{ic|grubx64.efi}} application at {{ic|/boot/efi/EFI/arch_grub}} (ie. all the grub(2) uefi files inside the UEFISYS partition itself) use:<br />
<br />
# modprobe dm-mod <br />
# grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=arch_grub --boot-directory=/boot/efi/EFI --recheck --debug<br />
# mkdir -p /boot/efi/EFI/grub/locale<br />
# cp /usr/share/locale/en\@quot/LC_MESSAGES/grub.mo /boot/efi/EFI/grub/locale/en.mo<br />
<br />
The {{ic|--efi-directory}} option mentions the mountpoint of UEFI SYSTEM PARTITION , {{ic|--bootloader-id}} mentions the name of the directory used to store the {{ic|grubx64.efi}} file and {{ic|--boot-directory}} mentions the directory wherein the actual modules will be installed (and into which {{ic|grub.cfg}} should be created).<br />
<br />
The actual paths are:<br />
<br />
<efi-directory>/<EFI or efi>/<bootloader-id>/grubx64.efi<br />
<br />
<boot-directory>/grub/x86_64-efi/<all modules, grub.efi, core.efi, grub.cfg><br />
<br />
{{Note|the {{ic|--bootloader-id}} option does not change {{ic|<boot-directory>/grub}}, i.e. you cannot install the modules to {{ic|<boot-directory>/<bootloader-id>}}, the path is hard-coded to be {{ic|<boot-directory>/grub}}.}}<br />
<br />
In {{ic|<nowiki>--efi-directory=/boot/efi --boot-directory=/boot/efi/EFI --bootloader-id=grub</nowiki>}}:<br />
<br />
<efi-directory>/<EFI or efi>/<bootloader-id> == <boot-directory>/grub == /boot/efi/EFI/grub<br />
<br />
In {{ic|<nowiki>--efi-directory=/boot/efi --boot-directory=/boot/efi/EFI --bootloader-id=arch_grub</nowiki>}}:<br />
<br />
<efi-directory>/<EFI or efi>/<bootloader-id> == /boot/efi/EFI/arch_grub<br />
<boot-directory>/grub == /boot/efi/EFI/grub<br />
<br />
In {{ic|<nowiki>--efi-directory=/boot/efi --boot-directory=/boot --bootloader-id=arch_grub</nowiki>}}:<br />
<br />
<efi-directory>/<EFI or efi>/<bootloader-id> == /boot/efi/EFI/arch_grub<br />
<boot-directory>/grub == /boot/grub<br />
<br />
In {{ic|<nowiki>--efi-directory=/boot/efi --boot-directory=/boot --bootloader-id=grub</nowiki>}}:<br />
<br />
<efi-directory>/<EFI or efi>/<bootloader-id> == /boot/efi/EFI/grub<br />
<boot-directory>/grub == /boot/grub<br />
<br />
The {{ic|<nowiki><efi-directory>/<EFI or efi>/<bootloader-id>/grubx64.efi</nowiki>}} is an exact copy of {{ic|<nowiki><boot-directory>/grub/x86_64-efi/core.efi</nowiki>}}.<br />
<br />
{{Note|In GRUB2 2.00~beta4, the {{ic|grub-install}} option {{ic|--efi-directory}} replaces {{ic|--root-directory}} and the latter is deprecated.}}<br />
<br />
{{Note|The options {{ic|--efi-directory}} and {{ic|--bootloader-id}} are specific to GRUB(2) UEFI.}}<br />
<br />
In all the cases the UEFI SYSTEM PARTITION should be mounted for {{ic|grub-install}} to install {{ic|grubx64.efi}} in it, which will be launched by the firmware (using the {{ic|efibootmgr}} created boot entry in non-Mac systems).<br />
<br />
If you notice carefully, there is no <device_path> option (Eg: {{ic|/dev/sda}}) at the end of the {{ic|grub-install}} command unlike the case of setting up GRUB(2) for BIOS systems. Any <device_path> provided will be ignored by the install script as UEFI bootloaders do not use MBR or Partition boot sectors at all.<br />
<br />
You may now be able to UEFI boot your system by creating a {{ic|grub.cfg}} file by following [[#Generate_GRUB2_UEFI_Config_file]] and [[#Create_GRUB2_entry_in_the_Firmware_Boot_Manager]].<br />
<br />
==== Create GRUB2 entry in the Firmware Boot Manager ====<br />
<br />
===== Non-Mac UEFI systems =====<br />
<br />
{{ic|grub-install}} will ensure that {{ic|/boot/efi/EFI/arch_grub/grubx64.efi}} is launched by default if it detects {{ic|efibootmgr}} and if it is able to access UEFI Runtime Services. Follow [[Unified_Extensible_Firmware_Interface#efibootmgr]] for more info.(Before trying these steps, be sure to create a grub.cfg ([[Grub2#Generate_GRUB2_UEFI_Config_file]]) because you will need it to boot into Arch after grub is loaded)<br />
<br />
If you have problems running GRUB2 in UEFI mode you can try the following (worked on an ASUS Z68 mainboard):<br />
<br />
# cp /boot/efi/EFI/arch_grub/grubx64.efi /boot/efi/shellx64.efi<br />
<br />
or<br />
<br />
# cp /boot/efi/EFI/arch_grub/grubx64.efi /boot/efi/EFI/shellx64.efi<br />
<br />
or<br />
<br />
# cp /boot/efi/EFI/arch_grub/grubx64.efi /boot/efi/EFI/tools/shellx64.efi<br />
<br />
After this launch the UEFI Shell from the UEFI setup/menu (in ASUS UEFI BIOS, switch to advanced mode, press Exit in the top right corner and choose "Launch EFI shell from filesystem device"). The GRUB2 menu will show up and you can boot into your system. Afterwards you can use efibootmgr to setup a menu entry (see above).<br />
<br />
If your motherboard has no such option (or even if it does), you can use UEFI shell ([[Unified_Extensible_Firmware_Interface#UEFI_Shell]]) to create a UEFI boot option for the Arch partition temporarily.<br />
<br />
Once you boot into the EFI shell, add a UEFI boot menu entry:<br />
<br />
Shell> bcfg boot add 0 fs1:\EFI\arch_grub\grubx64.efi "Arch Linux (GRUB2)"<br />
<br />
where {{ic|fs1}} is the mapping corresponding to the UEFI System Partition and {{ic|\EFI\arch_grub\grubx64.efi}} is the the from the {{ic|--bootloader-id}} from the {{ic|grub-install}} command above.<br />
<br />
This will temporarily add a UEFI boot option for the next boot to get into Arch.<br />
<br />
Once in Arch, modprobe {{ic|efivars}} and confirm that {{ic|efibootmgr}} creates no errors (no errors meaning you successfully booted in UEFI mode).<br />
<br />
Then [[Grub2#Install_to_UEFI_SYSTEM_PARTITION]] can be performed again and should successfully permanently add a boot entry in the UEFI menu.<br />
<br />
===== Apple Mac EFI systems =====<br />
<br />
{{Note|TODO: GRUB upstream Bazaar mactel branch http://bzr.savannah.gnu.org/lh/grub/branches/mactel/changes. No further update from grub developers.}}<br />
{{Note|TODO: Experimental "bless" utility for Linux by Fedora developers - {{AUR|mactel-boot}}. Requires more testing.}}<br />
<br />
Use bless command from within Mac OS X to set {{ic|grubx64.efi}} as the default boot option. You can also boot from the Mac OS X install disc and launch a Terminal there if you only have Linux installed. In the Terminal, create a directory and mount the EFI System Partition:<br />
<br />
# cd /Volumes<br />
# mkdir efi<br />
# mount -t msdos /dev/disk0s1 /Volumes/efi<br />
<br />
Then run bless on {{ic|grub.efi}} and on the EFI partition to set them as the default boot options.<br />
<br />
# bless --folder=/Volumes/efi --file=/Volumes/efi/efi/arch_grub/grubx64.efi --setBoot<br />
# bless --mount=/Volumes/efi --file=/Volumes/efi/efi/arch_grub/grubx64.efi --setBoot<br />
<br />
More info at https://help.ubuntu.com/community/UEFIBooting#Apple_Mac_EFI_systems_.28both_EFI_architecture.29.<br />
<br />
==== 產生GRUB2 UEFI設置檔案(Generate GRUB2 UEFI Config file) ====<br />
<br />
Finally, generate a configuration for GRUB(2) (this is explained in greater detail in the Configuration section):<br />
<br />
# grub-mkconfig -o <boot-directory>/grub/grub.cfg<br />
<br />
{{Note|The file path is {{ic|<boot-directory>/grub/grub.cfg}}, NOT {{ic|<boot-directory>/grub/x86_64-efi/grub.cfg}}.}}<br />
<br />
If you used {{ic|<nowiki>--boot-directory=/boot</nowiki>}}:<br />
<br />
# grub-mkconfig -o /boot/grub/grub.cfg<br />
<br />
If you used {{ic|<nowiki>--boot-directory=/boot/efi/EFI</nowiki>}}:<br />
<br />
# grub-mkconfig -o /boot/efi/EFI/grub/grub.cfg<br />
<br />
This is independent of the value of {{ic|--bootloader-id}} option.<br />
<br />
If GRUB2 complains about "no suitable mode found" while booting, try [[#Correct_GRUB2_No_Suitable_Mode_Found_Error]].<br />
<br />
==== Create GRUB2 Standalone UEFI Application ====<br />
<br />
It is possible to create a {{ic|grubx64_standalone.efi}} application which has all the modules embeddded in a memdisk within the uefi application, thus removing the need for having a separate directory populated with all the GRUB2 uefi modules and other related files. This is done using the {{ic|grub-mkstandalone}} command which is included in {{Pkg|grub-common}} >= 1:1.99-6 package.<br />
<br />
The easiest way to do this would be with the install command already mentioned before, but specifying the modules to include. For example:<br />
<br />
# grub-mkstandalone --directory="/usr/lib/grub/x86_64-efi/" --format="x86_64-efi" --compression="xz" \<br />
--output="/boot/efi/EFI/arch_grub/grubx64_standalone.efi" <any extra files you want to include><br />
<br />
The {{ic|grubx64_standalone.efi}} file expects {{ic|grub.cfg}} to be within its $prefix which is {{ic|(memdisk)/boot/grub}}. The memdisk is embedded within the efi app. The {{ic|grub-mkstandlone}} script allow passing files to be included in the memdisk image to be as the arguments to the script (in <any extra files you want to include>).<br />
<br />
If you have the {{ic|grub.cfg}} at {{ic|/home/user/Desktop/grub.cfg}}, then create a temporary {{ic|/home/user/Desktop/boot/grub/}} directory, copy the {{ic|/home/user/Desktop/grub.cfg}} to {{ic|/home/user/Desktop/boot/grub/grub.cfg}}, cd into {{ic|/home/user/Desktop/boot/grub/}} and run:<br />
<br />
# grub-mkstandalone --directory="/usr/lib/grub/x86_64-efi/" --format="x86_64-efi" --compression="xz" \<br />
--output="/boot/efi/EFI/arch_grub/grubx64_standalone.efi" "boot/grub/grub.cfg"<br />
<br />
The reason to cd into {{ic|/home/user/Desktop/boot/grub/}} and to pass the file path as {{ic|boot/grub/grub.cfg}} (notice the lack of a leading slash - boot/ vs /boot/ ) is because {{ic|dir1/dir2/file}} is included as {{ic|(memdisk)/dir1/dir2/file}} by the {{ic|grub-mkstandalone}} script. <br />
<br />
If you pass {{ic|/home/user/Desktop/grub.cfg}} the file will be included as {{ic|(memdisk)/home/user/Desktop/grub.cfg}}. If you pass {{ic|/home/user/Desktop/boot/grub/grub.cfg}} the file will be included as {{ic|(memdisk)/home/user/Desktop/boot/grub/grub.cfg}}. That is the reason for cd'ing into {{ic|/home/user/Desktop/boot/grub/}} and passing {{ic|boot/grub/grub.cfg}}, to include the file as {{ic|(memdisk)/boot/grub/grub.cfg}}, which is what {{ic|grub.efi}} expects the file to be.<br />
<br />
You need to create an UEFI Boot Manager entry for {{ic|/boot/efi/EFI/arch_grub/grubx64_standalone.efi}} using {{ic|efibootmgr}}. Follow [[#Create GRUB2 entry in the Firmware Boot Manager]].<br />
<br />
==== Multiboot in UEFI ====<br />
<br />
===== Chainload Microsoft Windows x86_64 UEFI-GPT =====<br />
<br />
Find the UUID of the FAT32 filesystem in the UEFI SYSTEM PARTITION where the Windows UEFI Bootloader files reside. For example, if Windows {{ic|bootmgfw.efi}} exists at {{ic|/boot/efi/EFI/Microsoft/Boot/bootmgfw.efi}} (ignore the upper-lower case differences since that is immaterial in FAT filesystem):<br />
<br />
# grub-probe --target=fs_uuid /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi<br />
1ce5-7f28<br />
<br />
# grub-probe --target=hints_string /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi<br />
--hint-bios=hd0,gpt1 --hint-efi=hd0,gpt1 --hint-baremetal=ahci0,gpt1<br />
<br />
Then, add this code to {{ic|/boot/grub/grub.cfg}} OR {{ic|/boot/efi/EFI/grub/grub.cfg}} to chainload Windows x86_64 (Vista SP1+, 7 or 8) installed in UEFI-GPT mode:<br />
<br />
menuentry "Microsoft Windows x86_64 UEFI-GPT" {<br />
insmod part_gpt<br />
insmod fat<br />
insmod search_fs_uuid<br />
insmod chain<br />
search --fs-uuid --no-floppy --set=root --hint-bios=hd0,gpt1 --hint-efi=hd0,gpt1 --hint-baremetal=ahci0,gpt1 1ce5-7f28<br />
chainloader /efi/Microsoft/Boot/bootmgfw.efi<br />
}<br />
<br />
== 設置(Configuration) ==<br />
<br />
你可以選擇自動產生或手動編輯 {{ic|grub.cfg}}.<br />
<br />
{{注意|對 EFI 系統, 如果 GRUB2 是以 {{ic|--boot-directory}} 參數安裝, {{ic|grub.cfg}} 檔案將被放在跟 {{ic|grubx64.efi}}相同的路徑. 否則, {{ic|grub.cfg}} 這檔案將會放在 {{ic|/boot/grub/}}, 這點跟 GRUB2的BIOS版本是一樣的.}}<br />
<br />
{{注意|這裡對於如何配置GRUB2有相當完整的敘述: http://members.iinet.net/~herman546/p20/GRUB2%20Configuration%20File%20Commands.html }}<br />
<br />
=== 使用grub-mkconfig自動產生(Automatically generating using grub-mkconfig) (Recommended) ===<br />
<br />
在 GRUB2中{{ic|/etc/default/grub}} 和 {{ic|/etc/grub.d/*}},與舊版的GRUB的 {{ic|menu.lst}} 有相似的設置效果, {{ic|grub-mkconfig}} 預設利用這些檔案產生標準的{{ic|grub.cfg}}輸出. 產生 {{ic|grub.cfg}} 檔案可以執行指令:<br />
<br />
# grub-mkconfig -o /boot/grub/grub.cfg<br />
<br />
{{ic|/etc/grub.d/10_linux}} is set to automatically add menu items for Arch linux that work out of the box, to any generated configuration. 其他的作業系統也許需要手動配置到 {{ic|/etc/grub.d/40_custom}} 或 {{ic|/boot/grub/custom.cfg}}<br />
<br />
==== Additional arguments ====<br />
<br />
To pass custom additional arguments to the Linux image, you can set the {{ic|GRUB_CMDLINE_LINUX}} variable in {{ic|/etc/default/grub}}. This is analogous to adding commands to the kernel line in GRUB Legacy.<br />
<br />
For example, use {{ic|<nowiki>GRUB_CMDLINE_LINUX="resume=/dev/sdaX"</nowiki>}} where {{ic|sda'''X'''}} is your swap partition to enable resume after hibernation.<br />
<br />
You can also use {{ic|<nowiki>GRUB_CMDLINE_LINUX="resume=/dev/disk/by-uuid/${swap_uuid}"</nowiki>}}, where {{ic|${swap_uuid} }} is the [[Persistent_block_device_naming|UUID]] of your swap partition.<br />
<br />
Users who have replaced the default SysV init with [[systemd]] will want to add {{ic|<nowiki>init=/bin/systemd</nowiki>}} to their {{ic|<nowiki>GRUB_CMDLINE_LINUX</nowiki>}}.<br />
<br />
Multiple entries are separated by spaces within the double quotes. So, for users who want both resume and systemd it would look like this:<br />
{{ic|<nowiki>GRUB_CMDLINE_LINUX="resume=/dev/sdaX init=/bin/systemd"</nowiki>}}<br />
<br />
===手動創建grub.cfg( Manually creating grub.cfg) ===<br />
<br />
{{警告|直接對這個檔案進行編輯是非常不建議的事.這個檔案是用 {{ic|grub-mkconfig}} 產生,所以最好是編輯你的 {{ic|/etc/default/grub}} 或其他在 {{ic|/etc/grub.d}} 資料夾的script.}}<br />
<br />
一個基本的 GRUB 設置檔使用下列的選項<br />
* {{ic|(hdX,Y)}} 意味在硬碟{{ic|X}}中的分割區 {{ic|Y}} , 分割區的編號從1開始,硬碟編號從0開始。<br />
* {{ic|1=set default=N}} is the default boot entry that is chosen after timeout for user action<br />
* {{ic|1=set timeout=M}} 意謂用 {{ic|M}}秒鐘的時間等待使用者動作,否則啟動預設選項。<br />
* {{ic|<nowiki>menuentry "title" {entry options}</nowiki>}} 是啟動項目名稱 {{ic|title}}<br />
* {{ic|1=set root=(hdX,Y)}} 設置啟動分割區, 此分割區應有核心和GRUB模組 (boot need not be a separate partition, and may simply be a directory under the "root" partition ({{ic|/}})<br />
<br />
一個設置範例:<br />
<br />
{{hc<br />
|/boot/grub/grub.cfg<br />
|<nowiki><br />
# Config file for GRUB2 - The GNU GRand Unified Bootloader<br />
# /boot/grub/grub.cfg<br />
<br />
# DEVICE NAME CONVERSIONS<br />
#<br />
# Linux Grub<br />
# -------------------------<br />
# /dev/fd0 (fd0)<br />
# /dev/sda (hd0)<br />
# /dev/sdb2 (hd1,2)<br />
# /dev/sda3 (hd0,3)<br />
#<br />
<br />
# Timeout for menu<br />
set timeout=5<br />
<br />
# Set default boot entry as Entry 0<br />
set default=0<br />
<br />
# (0) Arch Linux<br />
menuentry "Arch Linux" {<br />
set root=(hd0,1)<br />
linux /vmlinuz-linux root=/dev/sda3 ro<br />
initrd /initramfs-linux.img<br />
}<br />
<br />
## (1) Windows<br />
#menuentry "Windows" {<br />
#set root=(hd0,3)<br />
#chainloader +1<br />
#}<br />
</nowiki>}}<br />
<br />
=== 雙啟動(dual-boot) ===<br />
<br />
''注意: 如果你希望 GRUB2 自動尋找其他的作業系統(舉例來說,像是ubuntu).那麼你可能需要從[[AUR]]下載並安裝 {{AUR|os-prober}} ''<br />
<br />
====使用 grub-mkconfig ====<br />
想增加其他啟動項目,最好的方法是編輯 {{ic|/etc/grub.d/40_custom}}或{ic|/boot/grub/custom.cfg}} . 如此一來,項目將在你執行 '''grub-mkconfig'''後自動加入。<br />
加入新的內容,執行 <br />
# grub-mkconfig -o /boot/grub/grub.cfg <br />
以產生一個新的 {{ic|grub.cfg}}和grub選單。<br />
<br />
===== 與 GNU/Linux =====<br />
<br />
假設其他的 distro 在分割區 {{ic|sda2}}:<br />
<br />
menuentry "Other Linux" {<br />
set root=(hd0,2)<br />
linux /boot/vmlinuz (add other options here as required)<br />
initrd /boot/initrd.img (if the other kernel uses/needs one)<br />
}<br />
<br />
===== 與 FreeBSD =====<br />
<br />
Requires that FreeBSD is installed on a single partition with UFS. 假如安裝在{{ic|sda4}}:<br />
<br />
menuentry "FreeBSD" {<br />
set root=(hd0,4)<br />
chainloader +1<br />
}<br />
<br />
===== 與 Windows =====<br />
<br />
假設你的 Windows 分割區是 {{ic|sda3}}Remember you need to point set root and chainloader to the system reserve partition that windows made when it installed, not the actual partition windows is on..在{{ic|/etc/grub.d/40_custom})加入<br />
<br />
# (2) Windows XP<br />
menuentry "Windows XP" {<br />
set root=(hd0,3)<br />
chainloader (hd0,3)+1<br />
}<br />
<br />
執行 <br />
# grub-mkconfig -o /boot/grub/grub.cfg <br />
以產生一個新的 {{ic|grub.cfg}}和grub選單。<br />
<br />
If the Windows bootloader is on an entirely different hard drive than GRUB, it may be necessary to trick Windows into believing that it is the first hard drive. This was possible in GRUB Legacy with {{ic|map}} and is now done with {{ic|drivemap}}. Assuming GRUB is on {{ic|hd0}} and Windows is on {{ic|hd2}}, you need to add the following after {{ic|set root}}:<br />
<br />
drivemap -s hd0 hd2<br />
<br />
==== With Windows via EasyBCD and NeoGRUB ====<br />
<br />
Since EasyBCD's NeoGRUB currently does not understand the GRUB2 menu format, chainload to it by replacing the contents of your {{ic|C:\NST\menu.lst}} file with lines similar to the following:<br />
<br />
default 0<br />
timeout 1<br />
<br />
title Chainload into GRUB v2<br />
root (hd0,7)<br />
kernel /boot/grub/i386-pc/core.img<br />
<br />
===Visual Configuration===<br />
<br />
In GRUB2 it is possible, by default, to change the look of the menu. Make sure to initialize, if not done already, GRUB2 graphical terminal, gfxterm, with proper video mode, gfxmode, in GRUB2. This can be seen in the section [[#Correct_GRUB2_No_Suitable_Mode_Found_Error]]. This video mode is passed by GRUB2 to the linux kernel via 'gfxpayload' so any visual configurations need this mode in order to be in effect.<br />
<br />
====Setting the framebuffer resolution ====<br />
<br />
GRUB2 can set the framebuffer for both GRUB2 itself and the kernel. The old {{ic|1=vga=}} way is deprecated. The preferred method is editing {{ic|/etc/default/grub}} as the following sample:<br />
<br />
GRUB_GFXMODE=1024x768x32<br />
GRUB_GFXPAYLOAD_LINUX=keep<br />
<br />
套用改變, 執行: <br />
grub-mkconfig -o /boot/grub/grub.cfg<br />
<br />
The {{ic|gfxpayload}} property will make sure the kernel keeps the resolution.<br />
<br />
{{注意|如果這個例子對你以{{ic|1=vbemode="0x105"}}置換{{ic|1=gfxmode="1024x768x32"}}沒有成功. Remember to replace the specified resolution with one suitable for your screen.}}<br />
{{注意|你可以使用 {{ic|1=# hwinfo --framebuffer}}來顯示出所有的模式 (hwinfo is available in [community]), while at GRUB2 prompt you can use the {{ic|1=vbeinfo}} command.}}<br />
<br />
If this method does not work for you, the deprecated {{ic|1=vga=}} method will still work. Just<br />
add it next to the {{ic|1="GRUB_CMDLINE_LINUX_DEFAULT="}} line in {{ic|/etc/default/grub}}<br />
for eg: {{ic|1="GRUB_CMDLINE_LINUX_DEFAULT="quiet splash vga=792"}} will give you a {{ic|1024x768}} resolution.<br />
<br />
You can choose one of these resolutions: {{ic|640×480}}, {{ic|800×600}}, {{ic|1024×768}}, {{ic|1280×1024}},{{ic|1600×1200}}, {{ic|1920×1200}}<br />
<br />
====915resolution hack ====<br />
<br />
Some times for Intel graphic adapters neither {{ic|1=# hwinfo --framebuffer}} nor {{ic|1=vbeinfo}} will show you the desired resolution. In this case you can use {{ic|915resolution}} hack. This hack will temporarily modify video BIOS and add needed resolution. See [http://915resolution.mango-lang.org/ 915resolution's home page]<br />
<br />
In the following I will proceed with the example for my system. Please adjust the recipe for your needs. First you need to find a video mode which will be modified later. For that, run {{ic|915resolution}} in GRUB2 command shell:<br />
915resolution -l<br />
The output will be something like:<br />
Intel 800/900 Series VBIOS Hack : version 0.5.3<br />
...<br />
Mode 30 : 640x480, 8 bits/pixel<br />
...<br />
Next, our purpose is to overwrite mode 30. (You can choose what ever mode you want.) In the file {{ic|/etc/grub.d/00_header}} just before the {{ic|set gfxmode&#61;${GRUB_GFXMODE}}} line insert:<br />
915resolution 30 1440 900<br />
Here we are overwriting the mode {{ic|30}} with {{ic|1440x900}} resolution. Lastly we need to set {{ic|GRUB_GFXMODE}} as described earlier, regenerate GRUB2 configuration file and reboot to test changes:<br />
# grub-mkconfig -o /boot/grub/grub.cfg<br />
# reboot<br />
<br />
====背景圖片和字體(Background image and bitmap fonts)====<br />
<br />
GRUB2 comes with support for background images and bitmap fonts in {{ic|pf2}} format. The unifont font is included in the {{Pkg|grub-common}} package under the filename {{ic|unicode.pf2}}, or, as only ASCII characters under the name {{ic|ascii.pf2}}.<br />
<br />
圖像支援格式有 tga, png and jpeg. 解析度最大支援取決於您的硬體.<br />
<br />
Make sure you have set up the proper [https://wiki.archlinux.org/index.php/GRUB2#Setting_the_framebuffer_resolution framebuffer resolution].<br />
<br />
編輯 {{ic|/etc/default/grub}} :<br />
GRUB_BACKGROUND="/boot/grub/myimage"<br />
#GRUB_THEME="/path/to/gfxtheme"<br />
GRUB_FONT="/path/to/font.pf2"<br />
<br />
{{注意|如果你將GRUB裝在分開的分割區, {{ic|/boot/grub/myimage}} 會變成 {{ic|/grub/myimage}}.}}<br />
<br />
套用改變且將新資訊加到 {{ic|grub.cfg}}, 執行: <br />
grub-mkconfig -o /boot/grub/grub.cfg<br />
<br />
如果成功加入背景圖, 使用者將在終端機看到 {{ic|"Found background image..."}} . <br />
如果沒看到這段敘述, 圖像資訊可能沒有成功加到 {{ic|grub.cfg}} 裡.<br />
<br />
如果圖片沒有顯示, 進行確認:<br />
* 在 {{ic|/etc/default/grub}}的圖片路徑跟檔名都是正確的.<br />
* 圖片的格式跟大小是正確的 (tga, png, 8-bit jpg).<br />
* The image was saved in the RGB mode, and is not indexed.<br />
* console mode 沒有啟用在 {{ic|/etc/default/grub}}裡.<br />
* {{ic|grub-mkconfig}} 確實執行並將背景圖片資訊放到 {{ic|/boot/grub/grub.cfg}} 裡.<br />
<br />
====佈景主題(Theme)====<br />
<br />
Here is an example for configuring Starfield theme which was included in GRUB2 package.<br />
<br />
Edit {{ic|/etc/default/grub}}<br />
GRUB_THEME="/usr/share/grub/themes/starfield/theme.txt"<br />
<br />
Generate the changes:<br />
grub-mkconfig -o /boot/grub/grub.cfg<br />
<br />
如果主題設定成功, 您將會在終端機看到 {{ic|Found theme: /usr/share/grub/themes/starfield/theme.txt}} <br />
使用主題時,你原先設定的 splash image 將不會被顯示出來<br />
<br />
====選單顏色(Menu colors)====<br />
<br />
如同 GRUB 舊版 (0.9x), 在 GRUB2你可以更改選單顏色. 目前可用的顏色 GRUB2 參照 https://www.gnu.org/software/grub/manual/html_node/Theme-file-format.html#Theme-file-format.<br />
這裡有個範例:<br />
<br />
編輯 {{ic|/etc/default/grub}}:<br />
GRUB_COLOR_NORMAL="light-blue/black"<br />
GRUB_COLOR_HIGHLIGHT="light-cyan/blue"<br />
<br />
套用變更:<br />
grub-mkconfig -o /boot/grub/grub.cfg<br />
<br />
====隱藏選單(Hidden menu)====<br />
<br />
One of the unique features of GRUB2 is hiding/skipping the menu and showing it by holding {{ic|Esc}} when needed. You can also adjust whether you want to see the timeout counter.<br />
<br />
Edit {{ic|/etc/default/grub}} as you wish. Here is an example where the comments from the beginning of the two lines have been removed to enable the feature, the timeout has been set to five seconds and to be shown to the user:<br />
GRUB_HIDDEN_TIMEOUT=5<br />
GRUB_HIDDEN_TIMEOUT_QUIET=false<br />
<br />
接者執行:<br />
grub-mkconfig -o /boot/grub/grub.cfg<br />
<br />
====關閉幀緩衝(Disable framebuffer)====<br />
<br />
Users who use NVIDIA proprietary driver might wish to disable GRUB2's framebuffer as it can cause problems with the binary driver.<br />
<br />
要關閉幀緩衝, 編輯 {{ic|/etc/default/grub}} 並將下行取消註解:<br />
GRUB_TERMINAL_OUTPUT=console<br />
<br />
接著執行:<br />
grub-mkconfig -o /boot/grub/grub.cfg<br />
<br />
=== 其他選項(Other Options) ===<br />
<br />
==== LVM ====<br />
<br />
If you use [[LVM]] for your {{ic|/boot}}, add the following before menuentry lines:<br />
<br />
insmod lvm<br />
<br />
and specify your root in the menuentry as:<br />
<br />
set root=(''lvm_group_name''-''lvm_logical_boot_partition_name'')<br />
<br />
Example:<br />
<br />
# (0) Arch Linux<br />
menuentry "Arch Linux" {<br />
insmod lvm<br />
set root=(VolumeGroup-lv_boot)<br />
# you can only set following two lines<br />
linux /vmlinuz-linux root=/dev/mapper/VolumeGroup-root ro<br />
initrd /initramfs-linux.img<br />
}<br />
<br />
==== RAID ====<br />
<br />
GRUB2 provides convenient handling of RAID volumes. You need to add {{ic|insmod raid}} which allows you to address the volume natively. For example, {{ic|/dev/md0}} becomes:<br />
set root=(md0)<br />
<br />
whereas a partitioned RAID volume (e.g. {{ic|/dev/md0p1}}) becomes:<br />
set root=(md0,1)<br />
<br />
==== Persistent block device naming ====<br />
You can use UUIDs to detect partitions instead of the "old" {{ic|/dev/sd*}} and {{ic|/dev/hd*}} scheming. It has the advantage of detecting partitions by their unique UUIDs, which is needed by some people booting with complicated partition setups.<br />
<br />
UUIDs are used by default in the recent versions of GRUB2 - there is no downside in it anyway except that you need to re-generate the {{ic|grub.cfg}} file every time you resize or reformat your partitions. Remember this when modifying partitions with Live-CD.<br />
<br />
Recent versions of GRUB2 use UUIDs by default. You can enable the use of UUIDs by simply commenting the UUID line (which is the default):<br />
#GRUB_DISABLE_LINUX_UUID=true<br />
Or you can uncomment it and set the value to {{ic|false}}:<br />
GRUB_DISABLE_LINUX_UUID=false<br />
<br />
Either way, do not forget to generate the changes:<br />
{{bc|# grub-mkconfig -o /boot/grub/grub.cfg}}<br />
<br />
==== Using Labels ====<br />
<br />
It is possible to use labels, human-readable strings attached to filesystems, by using the {{ic|--label}} option to {{ic|search}}. First of all, label your existing partition:<br />
# tune2fs -L a <LABEL> <PARTITION><br />
<br />
Then, add an entry using labels. An example of this:<br />
<br />
menuentry "Arch Linux, session texte" {<br />
search --label --no-floppy --set=root archroot<br />
linux /boot/vmlinuz-linux root=/dev/disk/by-label/archroot ro<br />
initrd /boot/initramfs-linux.img<br />
}<br />
<br />
==== Recall previous entry ====<br />
<br />
GRUB2 can remember the last entry you booted from and use this as the default entry to boot from next time. This is useful if you have multiple kernels (i.e., the current Arch one and the LTS kernel as a fallback option) or operating systems. To do this, edit {{ic|/etc/default/grub}} and change the setting of {{ic|GRUB_DEFAULT}}:<br />
<br />
GRUB_DEFAULT=saved<br />
<br />
This ensures that GRUB will default to the saved entry. To enable saving the selected entry, add the following line to {{ic|/etc/default/grub}}:<br />
<br />
GRUB_SAVEDEFAULT=true<br />
<br />
{{Note|Manually added menu items, eg Windows in {{ic|/etc/grub.d/40_custom}} or {{ic|/boot/grub/custom.cfg}} , will need {{ic|savedefault}} added. Remember to regenerate your configuration file.}}<br />
<br />
==== 安全(Security) ====<br />
<br />
如果你想增加 GRUB2的安全性,使其他人不能改變啟動參數跟使用命令列,你可以加上一個 user/password 組合到 GRUB2的設置檔案. 如果像這樣做的話, 執行指令 {{ic|grub-mkpasswd-pbkdf2}}. 輸入密碼且確認它. 螢幕輸入將會像是這樣:<br />
<br />
{{bc|<nowiki><br />
Your PBKDF2 is grub.pbkdf2.sha512.10000.C8ABD3E93C4DFC83138B0C7A3D719BC650E6234310DA069E6FDB0DD4156313DA3D0D9BFFC2846C21D5A2DDA515114CF6378F8A064C94198D0618E70D23717E82.509BFA8A4217EAD0B33C87432524C0B6B64B34FBAD22D3E6E6874D9B101996C5F98AB1746FE7C7199147ECF4ABD8661C222EEEDB7D14A843261FFF2C07B1269A</nowiki>}}Then, add the following to {{ic|/etc/grub.d/00_header}}:<br />
{{bc|<nowiki>cat << EOF<br />
<br />
set superusers="username"<br />
password_pbkdf2 username <password><br />
<br />
EOF</nowiki>}}<br />
這裡的 {{ic|<password>}} 是由 {{ic|grub-mkpasswd_pbkdf2}}產生的字串.<br />
<br />
再次產生你的設置檔案, 您的 GRUB2 命令列, 啟動參數和所有的啟動項目都將被保護。<br />
<br />
This can be relaxed and further customized with more users as described in the "Security" part of [https://www.gnu.org/software/grub/manual/grub.html#Security the GRUB manual].<br />
<br />
==== Root Encryption ====<br />
<br />
To let GRUB2 automatically add the kernel parameters for root encryption,<br />
add {{ic|1=cryptdevice=/dev/yourdevice:label}} to {{ic|GRUB_CMDLINE_LINUX}} in {{ic|/etc/default/grub}}.<br />
<br />
Example with root mapped to {{ic|/dev/mapper/root}}:<br />
<br />
GRUB_CMDLINE_LINUX="cryptdevice=/dev/sda2:root"<br />
<br />
Also, disable the usage of UUIDs for the rootfs:<br />
<br />
GRUB_DISABLE_LINUX_UUID=true<br />
<br />
Regenerate the configuration.<br />
<br />
=== 在GRUB2啟動(ISOBooting an ISO Directly From GRUB2) ===<br />
編輯 {{ic|/etc/grub.d/40_custom}} 或 {{ic|/boot/grub/custom.cfg}} 為目標ISO增加項目。完成後{{ic|grub-mkconfig -o /boot/grub/grub.cfg}} (as root)更新選單。<br />
<br />
==== Arch ISO ====<br />
{{注意|一定要調整第3行的 {{ic|hdX,Y}} ,才能指向ISO檔正確所在的硬碟/分割區。 同時調整 {{ic|img_dev}} 行來對應到相同的位置。 像是, 如果電腦裡已有一個內置硬碟,此時想從隨身碟開啟ISO檔,那麼用{{ic|sdbY}}取代 {{ic|sdaY}}.}}<br />
<br />
menuentry "Archlinux-2011.08.19-netinstall-x86_64.iso" {<br />
set isofile="/archives/archlinux-2011.08.19-netinstall-x86_64.iso"<br />
loopback loop (hd0,7)$isofile<br />
linux (loop)/arch/boot/x86_64/vmlinuz archisolabel=ARCH_201108 img_dev=/dev/sda7 img_loop=$isofile earlymodules=loop<br />
initrd (loop)/arch/boot/x86_64/archiso.img<br />
}<br />
<br />
menuentry "Archlinux-2012.07.15-netinstall-dual.iso" {<br />
set isofile="/archives/archlinux-2012.07.15-netinstall-dual.iso"<br />
loopback loop (hd0,7)$isofile<br />
linux (loop)/arch/boot/x86_64/vmlinuz archisolabel=ARCH_201207 img_dev=/dev/sda7 img_loop=$isofile<br />
initrd (loop)/arch/boot/x86_64/archiso.img<br />
}<br />
<br />
{{Tip|For thumbdrives, use [[Persistent_block_device_naming|Persistent block device names]] for the "img_dev" kernel parameter. '''Ex:''' img_dev&#61;/dev/disk/by-label/CORSAIR}}<br />
<br />
==== Ubuntu ISO ====<br />
{{注意|一定要調整第3行的 {{ic|hdX,Y}} ,才能指向ISO檔正確所在的硬碟/分割區。 同時調整 {{ic|img_dev}} 行來對應到相同的位置。}}<br />
<br />
menuentry "ubuntu-12.04-desktop-amd64.iso" {<br />
set isofile="/path/to/ubuntu-12.04-desktop-amd64.iso"<br />
loopback loop (hdX,Y)$isofile<br />
linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile quiet noeject noprompt splash --<br />
initrd (loop)/casper/initrd.lz<br />
}<br />
<br />
== Using the command shell ==<br />
<br />
Since the MBR is too small to store all GRUB2 modules, only the menu and a few basic commands reside there. The majority of GRUB2 functionality remains in modules in {{ic|/boot/grub}}, which are inserted as needed. In error conditions (e.g. if the partition layout changes) GRUB2 may fail to boot. When this happens, a command shell may appear.<br />
<br />
GRUB2 offers multiple shells/prompts. If there is a problem reading the menu but the bootloader is able to find the disk, you will likely be dropped to the "normal" shell:<br />
sh:grub><br />
<br />
If there is a more serious problem (e.g. GRUB cannot find required files), you may instead be dropped to the "rescue" shell:<br />
grub rescue><br />
<br />
The rescue shell is a restricted subset of the normal shell, offering much less functionality. If dumped to the rescue shell, first try inserting the "normal" module, then starting the "normal" shell:<br />
grub rescue> set prefix=(hdX,Y)/boot/grub<br />
grub rescue> insmod (hdX,Y)/boot/grub/i386-pc/normal.mod<br />
rescue:grub> normal<br />
<br />
=== Pager support ===<br />
<br />
GRUB2 supports pager for reading commands that provide long output (like the help command). This works only in normal shell mode and not in rescue mode. To enable pager, in GRUB2 command shell type:<br />
sh:grub> set pager=1<br />
<br />
== GUI configuration tools ==<br />
<br />
Following package may be installed from [[AUR]]<br />
* [https://aur.archlinux.org/packages.php?ID=44020 grub-customizer] (requires gettext gksu gtkmm hicolor-icon-theme openssl)<br />
*:Customize the bootloader (GRUB2 or BURG)<br />
* [http://kde-apps.org/content/show.php?content=139643 grub2-editor] (requires kdelibs)<br />
*:A KDE4 control module for configuring the GRUB2 bootloader<br />
* [http://kde-apps.org/content/show.php?content=137886 kcm-grub2] (requires kdelibs python2-qt kdebindings-python)<br />
*:This Kcm module manages the most common settings of Grub2.<br />
* [http://sourceforge.net/projects/startup-manager/ startupmanager] (requires gnome-python imagemagick yelp python2 xorg-xrandr)<br />
*:GUI app for changing the settings of GRUB, GRUB2, Usplash and Splashy<br />
<br />
== parttool or legacy hide/unhide ==<br />
<br />
If you have a Windows 9x paradigm with hidden C:\ disks GRUB Legacy had the hide/unhide feature. In GRUB2 this has been replaced by {{ic|parttool}}. For example, to boot the third C:\ disk of three Windows 9x installations on the CLI enter the CLI and:<br />
parttool hd0,1 hidden+ boot-<br />
parttool hd0,2 hidden+ boot-<br />
parttool hd0,3 hidden- boot+<br />
set root=hd0,3<br />
chainloader +1<br />
boot<br />
<br />
== Using the rescue console ==<br />
<br />
See [[#Using the command shell]] first. If unable to activate the standard shell, one possible solution is to boot using a live CD or some other rescue disk to correct configuration errors and reinstall GRUB. However, such a boot disk is not always available (nor necessary); the rescue console is surprisingly robust.<br />
<br />
The available commands in GRUB rescue include {{ic|insmod}}, {{ic|ls}}, {{ic|set}}, and {{ic|unset}}. This example uses {{ic|set}} and {{ic|insmod}}. {{ic|set}} modifies variables and {{ic|insmod}} inserts new modules to add functionality.<br />
<br />
Before starting, the user must know the location of their {{ic|/boot}} partition (be it a separate partition, or a subdirectory under their root):<br />
grub rescue> set prefix=(hdX,Y)/boot/grub<br />
<br />
where X is the physical drive number and Y is the partition number.<br />
<br />
To expand console capabilities, insert the {{ic|linux}} module:<br />
grub rescue> insmod (hdX,Y)/boot/grub/linux.mod<br />
<br />
{{Note|With a separate boot partition, omit {{ic|/boot}} from the path, (i.e. type {{ic|1=set prefix=(hdX,Y)/grub}} and {{ic|insmod (hdX,Y)/grub/linux.mod}}).}}<br />
<br />
This introduces the {{ic|linux}} and {{ic|initrd}} commands, which should be familiar (see [[#Configuration]]).<br />
<br />
An example, booting Arch Linux:<br />
set root=(hd0,5)<br />
linux /boot/vmlinuz-linux root=/dev/sda5<br />
initrd /boot/initramfs-linux.img<br />
boot<br />
<br />
With a separate boot partition, again change the lines accordingly:<br />
set root=(hd0,5)<br />
linux /vmlinuz-linux root=/dev/sda6<br />
initrd /initramfs-linux.img<br />
boot<br />
<br />
After successfully booting the Arch Linux installation, users can correct {{ic|grub.cfg}} as needed and then reinstall GRUB2.<br />
<br />
to reinstall GRUB2 and fix the problem completely, changing {{ic|/dev/sda}} if needed. See [[#Bootloader installation]] for details.<br />
<br />
== Combining the use of UUIDs and basic scripting ==<br />
<br />
If you like the idea of using UUIDs to avoid unreliable BIOS mappings or are struggling with GRUB's syntax, here is an example boot menu item that uses UUIDs and a small script to direct GRUB to the proper disk partitions for your system. All you need to do is replace the UUIDs in the sample with the correct UUIDs for your system. The example applies to a system with a boot and root partition. You will obviously need to modify the GRUB configuration if you have additional partitions:<br />
<br />
menuentry "Arch Linux 64" {<br />
# Set the UUIDs for your boot and root partition respectively<br />
set the_boot_uuid=ece0448f-bb08-486d-9864-ac3271bd8d07<br />
set the_root_uuid=c55da16f-e2af-4603-9e0b-03f5f565ec4a<br />
<br />
# (Note: This may be the same as your boot partition)<br />
<br />
# Get the boot/root devices and set them in the root and grub_boot variables<br />
search --fs-uuid --no-floppy --set=root $the_root_uuid<br />
search --fs-uuid --no-floppy --set=grub_boot $the_boot_uuid<br />
<br />
# Check to see if boot and root are equal.<br />
# If they are, then append /boot to $grub_boot (Since $grub_boot is actually the root partition)<br />
if [ $the_boot_uuid == $the_root_uuid] ; then<br />
set grub_boot=$grub_boot/boot<br />
fi<br />
<br />
# $grub_boot now points to the correct location, so the following will properly find the kernel and initrd<br />
linux ($grub_boot)/vmlinuz-linux root=/dev/disk/by-uuid/$uuid_os_root ro<br />
initrd ($grub_boot)/initramfs-linux.img<br />
}<br />
<br />
== 疑難排解(Troubleshooting) ==<br />
<br />
Any troubleshooting should be added here.<br />
<br />
=== Enable GRUB2 debug messages ===<br />
<br />
Add:<br />
<br />
set pager=1<br />
set debug=all<br />
<br />
to {{ic|grub.cfg}}.<br />
<br />
=== Correct GRUB2 No Suitable Mode Found Error ===<br />
<br />
If you get this error when booting any menuentry:<br />
<br />
error: no suitable mode found<br />
Booting however<br />
<br />
Then you need to initialize GRUB2 graphical terminal ({{ic|gfxterm}}) with proper video mode ({{ic|gfxmode}}) in GRUB2. This video mode is passed by GRUB2 to the linux kernel via 'gfxpayload'. In case of UEFI systems, if the GRUB2 video mode is not initialized, no kernel boot messages will be shown in the terminal (atleast until KMS kicks in).<br />
<br />
Copy {{ic|/usr/share/grub/unicode.pf2}} to ${GRUB2_PREFIX_DIR} ({{ic|/boot/grub/}} in case of BIOS and UEFI systems). If GRUB2 UEFI was installed with {{ic|1=--boot-directory=/boot/efi/EFI}} set, then the directory is {{ic|/boot/efi/EFI/grub/}}:<br />
<br />
# cp /usr/share/grub/unicode.pf2 ${GRUB2_PREFIX_DIR}<br />
<br />
If {{ic|/usr/share/grub/unicode.pf2}} does not exist, install {{Pkg|bdf-unifont}}, create the {{ic|unifont.pf2}} file and then copy it to {{ic|${GRUB2_PREFIX_DIR<nowiki>}</nowiki>}}:<br />
<br />
# grub-mkfont -o unicode.pf2 /usr/share/fonts/misc/unifont.bdf<br />
<br />
Then, in the {{ic|grub.cfg}} file, add the following lines to enable GRUB2 to pass the video mode correctly to the kernel, without of which you will only get a black screen (no output) but booting (actually) proceeds successfully without any system hang.<br />
<br />
BIOS systems:<br />
<br />
insmod vbe<br />
<br />
UEFI systems:<br />
<br />
insmod efi_gop<br />
insmod efi_uga<br />
<br />
After that add the following code (common to both BIOS and UEFI):<br />
<br />
insmod font<br />
<br />
if loadfont ${prefix}/fonts/unicode.pf2<br />
then<br />
insmod gfxterm<br />
set gfxmode=auto<br />
set gfxpayload=keep<br />
terminal_output gfxterm<br />
fi<br />
<br />
As you can see for gfxterm (graphical terminal) to function properly, {{ic|unicode.pf2}} font file should exist in {{ic|${GRUB2_PREFIX_DIR<nowiki>}</nowiki>}}.<br />
<br />
=== msdos-style error message ===<br />
<br />
grub-setup: warn: This msdos-style partition label has no post-MBR gap; embedding won't be possible!<br />
grub-setup: warn: Embedding is not possible. GRUB can only be installed in this setup by using blocklists.<br />
However, blocklists are UNRELIABLE and its use is discouraged.<br />
grub-setup: error: If you really want blocklists, use --force.<br />
<br />
This error may occur when you try installing GRUB2 in a VMware container. Read more about it [https://bbs.archlinux.org/viewtopic.php?pid=581760#p581760 here]. It happens when the first partition starts just after the MBR (block 63), without the usual space of 1 MiB (2048 blocks) before the first partition. Read [[#MBR_aka_msdos_partitioning_specific_instructions]]<br />
<br />
=== UEFI GRUB2 drops to shell ===<br />
<br />
If GRUB loads but drops you into the rescue shell with no errors, it may be because of a missing or misplaced {{ic|grub.cfg}}. This will happen if GRUB2 UEFI was installed with {{ic|--boot-directory}} and {{ic|grub.cfg}} is missing OR if the partition number of the boot partition changed (which is hard-coded into the {{ic|grubx64.efi}} file).<br />
<br />
=== UEFI GRUB2 not loaded ===<br />
In some cases the EFI may fail to load GRUB correctly. Provided everything is set up correctly, the output of:<br />
efibootmgr -v<br />
might look something like this:<br />
BootCurrent: 0000<br />
Timeout: 3 seconds<br />
BootOrder: 0000,0001,0002<br />
Boot0000* Grub HD(1,800,32000,23532fbb-1bfa-4e46-851a-b494bfe9478c)File(\efi\grub\grub.efi)<br />
Boot0001* Shell HD(1,800,32000,23532fbb-1bfa-4e46-851a-b494bfe9478c)File(\EfiShell.efi)<br />
Boot0002* Festplatte BIOS(2,0,00)P0: SAMSUNG HD204UI<br />
If everything works correctly, the EFI would now automatically load GRUB.<br />
<br />
If the screen only goes black for a second and the next boot option is tried afterwards, according to [https://bbs.archlinux.org/viewtopic.php?pid=981560#p981560 this post], moving GRUB to the partition root can help. The boot option has to be deleted and recreated afterwards. The entry for GRUB should look like this then:<br />
Boot0000* Grub HD(1,800,32000,23532fbb-1bfa-4e46-851a-b494bfe9478c)File(\grub.efi)<br />
<br />
=== Invalid signature ===<br />
If trying to boot Windows results in an "invalid signature" error, e.g. after reconfiguring partitions or adding additional hard drives, (re)move GRUB's device configuration and let it reconfigure:<br />
# mv /boot/grub/device.map /boot/grub/device.map-old<br />
# grub-mkconfig -o /boot/grub/grub.cfg<br />
{{ic|grub-mkconfig}} should now mention all found boot options, including Windows. If it works, remove {{ic|/boot/grub/device.map-old}}.<br />
<br />
=== Restore GRUB Legacy ===<br />
<br />
* 將 GRUB2 檔案先移除:<br />
<br />
# mv /boot/grub /boot/grub.nonfunctional<br />
<br />
* 把舊版GRUB( GRUB Legacy )放回 {{ic|/boot}}:<br />
<br />
# cp -af /boot/grub-legacy /boot/grub<br />
<br />
* 將sda的MBR加上後面62個sectors的區塊用備份好的資料取代<br />
<br />
{{注意|這指令同時也回存舊的分割區對應表(partition table),這可能會弄亂你的系統}}<br />
<br />
# dd if=/path/to/backup/first-sectors of=/dev/sdX bs=512 count=1<br />
<br />
比較安全的方法是僅回存MBR的啟動碼:<br />
<br />
# dd if=/path/to/backup/mbr-boot-code of=/dev/sdX bs=446 count=1<br />
<br />
== 參考資料(References) ==<br />
<br />
# Official GRUB2 Manual - https://www.gnu.org/software/grub/manual/grub.html<br />
# Ubuntu wiki page for GRUB2 - https://help.ubuntu.com/community/Grub2<br />
# GRUB2 wiki page describing steps to compile for UEFI systems - https://help.ubuntu.com/community/UEFIBooting<br />
# Wikipedia's page on [[Wikipedia:BIOS Boot partition|BIOS Boot partition]]<br />
<br />
==外部連結(External Links) ==<br />
<br />
# [https://github.com/the-ridikulus-rat/My_Shell_Scripts/blob/master/grub/grub_bios.sh A Linux Bash Shell script to compile and install GRUB(2) for BIOS from BZR Source]<br />
# [https://github.com/the-ridikulus-rat/My_Shell_Scripts/blob/master/grub/grub_uefi.sh A Linux Bash Shell script to compile and install GRUB(2) for UEFI from BZR Source]</div>Wzyboyhttps://wiki.archlinux.org/index.php?title=HP_Pavilion_dv5&diff=280278HP Pavilion dv52013-10-29T13:52:53Z<p>Wzyboy: fix typo</p>
<hr />
<div>[[Category:HP]]<br />
This page will try to guide you how to configure Archlinux distribution on HP Pavillion dv5-1000 series laptop. The main purpose of this howto is the post installation configuration and installing additional pakages to make the basic installation useful. If you have something to add please contribute to this page.<br />
<br />
== Installation ==<br />
<br />
Archlinux installation is easy and there is palnty of information availabe from this Wiki. I will suggest using these documentation for the basic installation. you should also install a desktop environment. I will give some details here for gnome destop and detail instruction use the wiki search function. Vist this useful site [http://arcux.com miggols99's blog].<br />
<br />
== Configurations==<br />
<br />
=== Networking ===<br />
<br />
HP Pavillion dv5-1000 have the following networking devices.<br />
<br />
Wifi controller<br />
Broadcom Corporation BCM4312 802.11b/g (rev 01)<br />
Subsystem: Hewlett-Packard Company Device 137c<br />
Ethernet controller<br />
Realtek Semiconductor Co., Ltd. RTL8101E/RTL8102E PCI Express Fast Ethernet controller (rev 02)<br />
Subsystem: Hewlett-Packard Company Device 3602<br />
<br />
=== Graphic card and Xorg ===<br />
<br />
HP Pavilion dv5-1000 have a Mobile X4500MHD Series Chipset Integrated Graphics Controller, so you must have the package {{Pkg|xf86-video-intel}} [[pacman|installed]].<br />
<br />
in order to configure the card properly you must use intel as Driver in Device section of xorg.conf file e.g. my xorg.conf file look like this. (as of nowadays - 2010 - xserver 1.8+ uses KMS for intel, so no xorg.conf file is needed - suggest removing this whole section):<br />
<br />
Section "ServerLayout"<br />
Identifier "Xorg Configured"<br />
Screen 0 "Screen0" 0 0 <br />
InputDevice "Keyboard0" "CoreKeyboard"<br />
InputDevice "USB Mouse" "CorePointer"<br />
Option "AIGLX" "True"<br />
EndSection<br />
<br />
Section "ServerFlags"<br />
Option "AllowMouseOpenFail" "True"<br />
Option "AutoAddDevices" "True"<br />
EndSection<br />
<br />
Section "Files"<br />
ModulePath "/usr/lib/xorg/modules"<br />
FontPath "/usr/share/fonts/misc:unscaled"<br />
FontPath "/usr/share/fonts/misc"<br />
FontPath "/usr/share/fonts/75dpi:unscaled"<br />
FontPath "/usr/share/fonts/75dpi"<br />
FontPath "/usr/share/fonts/100dpi:unscaled"<br />
FontPath "/usr/share/fonts/100dpi"<br />
EndSection<br />
<br />
Section "Module"<br />
Load "bitmap" # bitmap-fonts<br />
EndSection<br />
<br />
Section "InputDevice"<br />
Identifier "Keyboard0"<br />
Driver "keyboard"<br />
Option "CoreKeyboard"<br />
Option "XkbRules" "xorg"<br />
Option "XkbModel" "pc105"<br />
Option "XkbLayout" "us"<br />
Option "XkbVariant" ""<br />
EndSection<br />
<br />
Section "InputDevice"<br />
Identifier "Serial Mouse"<br />
Driver "mouse"<br />
Option "Protocol" "Microsoft"<br />
Option "Device" "/dev/ttyS0"<br />
Option "Emulate3Buttons" "true"<br />
Option "Emulate3Timeout" "70"<br />
Option "SendCoreEvents" "true"<br />
EndSection<br />
<br />
Section "InputDevice"<br />
Identifier "PS/2 Mouse"<br />
Driver "mouse"<br />
Option "Protocol" "auto"<br />
Option "ZAxisMapping" "4 5"<br />
Option "Device" "/dev/psaux"<br />
Option "Emulate3Buttons" "true"<br />
Option "Emulate3Timeout" "70"<br />
Option "SendCoreEvents" "true"<br />
EndSection<br />
<br />
Section "InputDevice"<br />
Identifier "USB Mouse"<br />
Driver "mouse"<br />
Option "Device" "/dev/input/mice"<br />
Option "SendCoreEvents" "true"<br />
Option "Protocol" "IMPS/2"<br />
Option "ZAxisMapping" "4 5"<br />
Option "Buttons" "5"<br />
EndSection<br />
<br />
# Auto-generated by Archie mkxcfg<br />
<br />
Section "Monitor"<br />
Identifier "Monitor0"<br />
Option "DPMS" "true"<br />
# HorizSync 28.0 - 78.0 # Warning: This may fry very old Monitors<br />
HorizSync 28.0 - 96.0 # Warning: This may fry old Monitors<br />
VertRefresh 50.0 - 75.0 # Very conservative. May flicker.<br />
# VertRefresh 50.0 - 62.0 # Extreme conservative. Will flicker. TFT default.<br />
# Default modes distilled from<br />
# "VESA and Industry Standards and Guide for Computer Display Monitor<br />
# Timing", version 1.0, revision 0.8, adopted September 17, 1998.<br />
# $XFree86: xc/programs/Xserver/hw/xfree86/etc/vesamodes,v 1.4 1999/11/18 16:52:17 tsi Exp $<br />
# 640x350 @ 85Hz (VESA) hsync: 37.9kHz<br />
ModeLine "640x350" 31.5 640 672 736 832 350 382 385 445 +hsync -vsync<br />
# 640x400 @ 85Hz (VESA) hsync: 37.9kHz<br />
ModeLine "640x400" 31.5 640 672 736 832 400 401 404 445 -hsync +vsync<br />
# 720x400 @ 85Hz (VESA) hsync: 37.9kHz<br />
ModeLine "720x400" 35.5 720 756 828 936 400 401 404 446 -hsync +vsync<br />
# 640x480 @ 60Hz (Industry standard) hsync: 31.5kHz<br />
ModeLine "640x480" 25.2 640 656 752 800 480 490 492 525 -hsync -vsync<br />
# 640x480 @ 72Hz (VESA) hsync: 37.9kHz<br />
ModeLine "640x480" 31.5 640 664 704 832 480 489 491 520 -hsync -vsync<br />
# 640x480 @ 75Hz (VESA) hsync: 37.5kHz<br />
ModeLine "640x480" 31.5 640 656 720 840 480 481 484 500 -hsync -vsync<br />
# 640x480 @ 85Hz (VESA) hsync: 43.3kHz<br />
ModeLine "640x480" 36.0 640 696 752 832 480 481 484 509 -hsync -vsync<br />
# 800x600 @ 56Hz (VESA) hsync: 35.2kHz<br />
ModeLine "800x600" 36.0 800 824 896 1024 600 601 603 625 +hsync +vsync<br />
# 800x600 @ 60Hz (VESA) hsync: 37.9kHz<br />
ModeLine "800x600" 40.0 800 840 968 1056 600 601 605 628 +hsync +vsync<br />
# 800x600 @ 72Hz (VESA) hsync: 48.1kHz<br />
ModeLine "800x600" 50.0 800 856 976 1040 600 637 643 666 +hsync +vsync<br />
# 800x600 @ 75Hz (VESA) hsync: 46.9kHz<br />
ModeLine "800x600" 49.5 800 816 896 1056 600 601 604 625 +hsync +vsync<br />
# 800x600 @ 85Hz (VESA) hsync: 53.7kHz<br />
ModeLine "800x600" 56.3 800 832 896 1048 600 601 604 631 +hsync +vsync<br />
# 1024x768i @ 43Hz (industry standard) hsync: 35.5kHz<br />
ModeLine "1024x768" 44.9 1024 1032 1208 1264 768 768 776 817 +hsync +vsync Interlace<br />
# 1024x768 @ 60Hz (VESA) hsync: 48.4kHz<br />
ModeLine "1024x768" 65.0 1024 1048 1184 1344 768 771 777 806 -hsync -vsync<br />
# 1024x768 @ 70Hz (VESA) hsync: 56.5kHz<br />
ModeLine "1024x768" 75.0 1024 1048 1184 1328 768 771 777 806 -hsync -vsync<br />
# 1024x768 @ 75Hz (VESA) hsync: 60.0kHz<br />
ModeLine "1024x768" 78.8 1024 1040 1136 1312 768 769 772 800 +hsync +vsync<br />
# 1024x768 @ 85Hz (VESA) hsync: 68.7kHz<br />
ModeLine "1024x768" 94.5 1024 1072 1168 1376 768 769 772 808 +hsync +vsync<br />
# 1152x864 @ 75Hz (VESA) hsync: 67.5kHz<br />
ModeLine "1152x864" 108.0 1152 1216 1344 1600 864 865 868 900 +hsync +vsync<br />
# 1280x960 @ 60Hz (VESA) hsync: 60.0kHz<br />
ModeLine "1280x960" 108.0 1280 1376 1488 1800 960 961 964 1000 +hsync +vsync<br />
# 1280x960 @ 85Hz (VESA) hsync: 85.9kHz<br />
ModeLine "1280x960" 148.5 1280 1344 1504 1728 960 961 964 1011 +hsync +vsync<br />
# 1280x1024 @ 60Hz (VESA) hsync: 64.0kHz<br />
ModeLine "1280x1024" 108.0 1280 1328 1440 1688 1024 1025 1028 1066 +hsync +vsync<br />
# 1280x1024 @ 75Hz (VESA) hsync: 80.0kHz<br />
ModeLine "1280x1024" 135.0 1280 1296 1440 1688 1024 1025 1028 1066 +hsync +vsync<br />
# 1280x1024 @ 85Hz (VESA) hsync: 91.1kHz<br />
ModeLine "1280x1024" 157.5 1280 1344 1504 1728 1024 1025 1028 1072 +hsync +vsync<br />
# 1600x1200 @ 60Hz (VESA) hsync: 75.0kHz<br />
ModeLine "1600x1200" 162.0 1600 1664 1856 2160 1200 1201 1204 1250 +hsync +vsync<br />
# 1600x1200 @ 65Hz (VESA) hsync: 81.3kHz<br />
ModeLine "1600x1200" 175.5 1600 1664 1856 2160 1200 1201 1204 1250 +hsync +vsync<br />
# 1600x1200 @ 70Hz (VESA) hsync: 87.5kHz<br />
ModeLine "1600x1200" 189.0 1600 1664 1856 2160 1200 1201 1204 1250 +hsync +vsync<br />
# 1600x1200 @ 75Hz (VESA) hsync: 93.8kHz<br />
ModeLine "1600x1200" 202.5 1600 1664 1856 2160 1200 1201 1204 1250 +hsync +vsync<br />
# 1600x1200 @ 85Hz (VESA) hsync: 106.3kHz<br />
ModeLine "1600x1200" 229.5 1600 1664 1856 2160 1200 1201 1204 1250 +hsync +vsync<br />
# 1792x1344 @ 60Hz (VESA) hsync: 83.6kHz<br />
ModeLine "1792x1344" 204.8 1792 1920 2120 2448 1344 1345 1348 1394 -hsync +vsync<br />
# 1792x1344 @ 75Hz (VESA) hsync: 106.3kHz<br />
ModeLine "1792x1344" 261.0 1792 1888 2104 2456 1344 1345 1348 1417 -hsync +vsync<br />
# 1856x1392 @ 60Hz (VESA) hsync: 86.3kHz<br />
ModeLine "1856x1392" 218.3 1856 1952 2176 2528 1392 1393 1396 1439 -hsync +vsync<br />
# 1856x1392 @ 75Hz (VESA) hsync: 112.5kHz<br />
ModeLine "1856x1392" 288.0 1856 1984 2208 2560 1392 1393 1396 1500 -hsync +vsync<br />
# 1920x1440 @ 60Hz (VESA) hsync: 90.0kHz<br />
ModeLine "1920x1440" 234.0 1920 2048 2256 2600 1440 1441 1444 1500 -hsync +vsync<br />
# 1920x1440 @ 75Hz (VESA) hsync: 112.5kHz<br />
ModeLine "1920x1440" 297.0 1920 2064 2288 2640 1440 1441 1444 1500 -hsync +vsync<br />
# Additional modelines<br />
ModeLine "1800x1440" 230 1800 1896 2088 2392 1440 1441 1444 1490 +HSync +VSync<br />
ModeLine "1800x1440" 250 1800 1896 2088 2392 1440 1441 1444 1490 +HSync +VSync<br />
# Extended modelines with GTF timings<br />
# 640x480 @ 100.00 Hz (GTF) hsync: 50.90 kHz; pclk: 43.16 MHz<br />
ModeLine "640x480" 43.16 640 680 744 848 480 481 484 509 -HSync +Vsync<br />
# 768x576 @ 60.00 Hz (GTF) hsync: 35.82 kHz; pclk: 34.96 MHz<br />
ModeLine "768x576" 34.96 768 792 872 976 576 577 580 597 -HSync +Vsync<br />
# 768x576 @ 72.00 Hz (GTF) hsync: 43.27 kHz; pclk: 42.93 MHz<br />
ModeLine "768x576" 42.93 768 800 880 992 576 577 580 601 -HSync +Vsync<br />
# 768x576 @ 75.00 Hz (GTF) hsync: 45.15 kHz; pclk: 45.51 MHz<br />
ModeLine "768x576" 45.51 768 808 888 1008 576 577 580 602 -HSync +Vsync<br />
# 768x576 @ 85.00 Hz (GTF) hsync: 51.42 kHz; pclk: 51.84 MHz<br />
ModeLine "768x576" 51.84 768 808 888 1008 576 577 580 605 -HSync +Vsync<br />
# 768x576 @ 100.00 Hz (GTF) hsync: 61.10 kHz; pclk: 62.57 MHz<br />
ModeLine "768x576" 62.57 768 816 896 1024 576 577 580 611 -HSync +Vsync<br />
# 800x600 @ 100.00 Hz (GTF) hsync: 63.60 kHz; pclk: 68.18 MHz<br />
ModeLine "800x600" 68.18 800 848 936 1072 600 601 604 636 -HSync +Vsync<br />
# 1024x768 @ 100.00 Hz (GTF) hsync: 81.40 kHz; pclk: 113.31 MHz<br />
ModeLine "1024x768" 113.31 1024 1096 1208 1392 768 769 772 814 -HSync +Vsync<br />
# 1152x864 @ 60.00 Hz (GTF) hsync: 53.70 kHz; pclk: 81.62 MHz<br />
ModeLine "1152x864" 81.62 1152 1216 1336 1520 864 865 868 895 -HSync +Vsync<br />
# 1152x864 @ 85.00 Hz (GTF) hsync: 77.10 kHz; pclk: 119.65 MHz<br />
ModeLine "1152x864" 119.65 1152 1224 1352 1552 864 865 868 907 -HSync +Vsync<br />
# 1152x864 @ 100.00 Hz (GTF) hsync: 91.50 kHz; pclk: 143.47 MHz<br />
ModeLine "1152x864" 143.47 1152 1232 1360 1568 864 865 868 915 -HSync +Vsync<br />
# 1280x960 @ 72.00 Hz (GTF) hsync: 72.07 kHz; pclk: 124.54 MHz<br />
ModeLine "1280x960" 124.54 1280 1368 1504 1728 960 961 964 1001 -HSync +Vsync<br />
# 1280x960 @ 75.00 Hz (GTF) hsync: 75.15 kHz; pclk: 129.86 MHz<br />
ModeLine "1280x960" 129.86 1280 1368 1504 1728 960 961 964 1002 -HSync +Vsync<br />
# 1280x960 @ 100.00 Hz (GTF) hsync: 101.70 kHz; pclk: 178.99 MHz<br />
ModeLine "1280x960" 178.99 1280 1376 1520 1760 960 961 964 1017 -HSync +Vsync<br />
# 1280x1024 @ 100.00 Hz (GTF) hsync: 108.50 kHz; pclk: 190.96 MHz<br />
ModeLine "1280x1024" 190.96 1280 1376 1520 1760 1024 1025 1028 1085 -HSync +Vsync<br />
# 1400x1050 @ 60.00 Hz (GTF) hsync: 65.22 kHz; pclk: 122.61 MHz<br />
ModeLine "1400x1050" 122.61 1400 1488 1640 1880 1050 1051 1054 1087 -HSync +Vsync<br />
# 1400x1050 @ 72.00 Hz (GTF) hsync: 78.77 kHz; pclk: 149.34 MHz<br />
ModeLine "1400x1050" 149.34 1400 1496 1648 1896 1050 1051 1054 1094 -HSync +Vsync<br />
# 1400x1050 @ 75.00 Hz (GTF) hsync: 82.20 kHz; pclk: 155.85 MHz<br />
ModeLine "1400x1050" 155.85 1400 1496 1648 1896 1050 1051 1054 1096 -HSync +Vsync<br />
# 1400x1050 @ 85.00 Hz (GTF) hsync: 93.76 kHz; pclk: 179.26 MHz<br />
ModeLine "1400x1050" 179.26 1400 1504 1656 1912 1050 1051 1054 1103 -HSync +Vsync<br />
# 1400x1050 @ 100.00 Hz (GTF) hsync: 111.20 kHz; pclk: 214.39 MHz<br />
ModeLine "1400x1050" 214.39 1400 1512 1664 1928 1050 1051 1054 1112 -HSync +Vsync<br />
# 1600x1200 @ 100.00 Hz (GTF) hsync: 127.10 kHz; pclk: 280.64 MHz<br />
ModeLine "1600x1200" 280.64 1600 1728 1904 2208 1200 1201 1204 1271 -HSync +Vsync<br />
EndSection<br />
<br />
# Auto-generated by Archie mkxcfg<br />
<br />
Section "Device"<br />
Identifier "Card0"<br />
Driver "intel"<br />
VendorName "Intel Corporation"<br />
BoardName "Mobile X4500MHD Series Chipset Integrated Graphics Controller (rev 07)"<br />
VideoRam 262144<br />
Option "CacheLines" "1980"<br />
BusID "PCI:0:2:0"<br />
Option "DRI" "True"<br />
Option "NoDDC" "True"<br />
Option "AccelMethod" "EXA"<br />
Option "ExaNoComposite" "false"<br />
EndSection<br />
<br />
Section "Screen"<br />
Identifier "Screen0"<br />
Device "Card0"<br />
Monitor "Monitor0"<br />
DefaultColorDepth 24<br />
SubSection "Display"<br />
Depth 1<br />
Modes "1024x768" "800x600" "640x480"<br />
EndSubSection<br />
SubSection "Display"<br />
Depth 4<br />
Modes "1024x768" "800x600" "640x480"<br />
EndSubSection<br />
SubSection "Display"<br />
Depth 8<br />
Modes "1024x768" "800x600" "640x480"<br />
EndSubSection<br />
SubSection "Display"<br />
Depth 15<br />
Modes "1024x768" "800x600" "640x480"<br />
EndSubSection<br />
SubSection "Display"<br />
Depth 16<br />
Modes "1024x768" "800x600" "640x480"<br />
EndSubSection<br />
SubSection "Display"<br />
Depth 24<br />
Modes "1024x768" "800x600" "640x480"<br />
EndSubSection<br />
SubSection "Display"<br />
Depth 32<br />
Modes "1024x768" "800x600" "640x480"<br />
EndSubSection<br />
EndSection<br />
<br />
Section "Extensions"<br />
Option "Composite" "Enable"<br />
EndSection<br />
<br />
Section "DRI"<br />
# Mode 0666<br />
Mode 0660<br />
EndSection<br />
<br />
<br />
=== Sound===<br />
<br />
Multimedia controller<br />
IDT integrated Audio HDMI v1.3<br />
Intel Corporation 82801I (ICH9 Family) HD Audio Controller (rev 03)<br />
Subsystem: Hewlett-Packard Company Device 3602<br />
<br />
You need Alsa pakages to make sound work so first of all install {{Pkg|alsa-lib}}, {{Pkg|alsa-utils}} and {{Pkg|alsa-oss}}.<br />
<br />
Now edit the file {{ic|/etc/modprobe.d/sound}} with a text editor if the file does not exist then create one and add the following at the start:<br />
<br />
options snd-hda-intel model=hp-m4<br />
options snd-hda-intel enable_msi=1<br />
options snd slots=snd-hda-intel<br />
alias snd-card-0 snd-hda-intel<br />
alias sound-slot-0 snd-hda-intel<br />
<br />
If the file {{ic|/etc/modprobe.d/sound}} already contain some options it is better to remove them. After making the above changes reboot when the system become functional again make sure that you unmute the front speakers and then test the sound by playing some media file.<br />
<br />
alsamixer<br />
alsactl store</div>Wzyboyhttps://wiki.archlinux.org/index.php?title=Sony_Vaio_VGN-CR120E&diff=280277Sony Vaio VGN-CR120E2013-10-29T13:52:34Z<p>Wzyboy: /* Wireless */ fix typo</p>
<hr />
<div>[[Category:Sony]]<br />
{{out of date}}<br />
==Installation==<br />
See the [[Beginners' Guide]]<br />
<br />
==Video==<br />
00:02.0 VGA compatible controller: Intel Corporation Mobile GM965/GL960 Integrated Graphics Controller (rev 0c)<br />
00:02.1 Display controller: Intel Corporation Mobile GM965/GL960 Integrated Graphics Controller (rev 0c)<br />
<br />
You shouldn't need a xorg.conf to get into X.<br />
<br />
The wide screen resolution, 1280x800 worked out of the box, no hacks/patches/tricks needed.<br />
<br />
==Wireless==<br />
02:00.0 Network controller: Intel Corporation PRO/Wireless 4965 AG or AGN Network Connection (rev 61)<br />
Driver - Built into kernel, Firmware - iwlwifi-4965-ucode from installation disk under 'Support'. Place 'iwl4965' in your modules array in rc.conf.<br />
<br />
==Sound==<br />
The module is snd_hda_intel. Use alsa, it just works.<br />
Mic/Recording - Haven't tried.<br />
<br />
==Media==<br />
CD burning - Works.<br />
DVD burning - Works.<br />
CD Ripping - Works.<br />
<br />
==Motioneye Inscreen Camera==<br />
''lsusb'' will show<br />
05ca:1839 Ricoh Co., Ltd <br />
which has support provided by the r5u870 driver (depends on kernel26<2.6.26).<br />
<br />
download the latest trunk using ''svn'', ''make'', and ''make install'' as per the normal build drill...<br />
svn co http://svn.mediati.org/svn/r5u870/trunk ~/r5u870<br />
cd ~/r5u870<br />
make<br />
make install<br />
'''Note:''' One may forgo the last step in favor of being required to manually load the driver and 'keep it simple' (information on manually loading can be found in the README file that you get from the trunk.<br />
'''Note:''' A package exists in AUR 'r5u870' and 'r5u870-svn' which still work with depends kernel26<2.6.26 and kernel26>2.6.24, feel free to use those too.<br />
All that's left now is<br />
modprobe r5u870<br />
<br />
you can test your webcam with ''xawtv'' like so<br />
xawtv /dev/video0<br />
<br />
''kernel26>2.6.26'': If you have a kernel that falls beyond the depends for 'r5u870' then you can try 'r5u87x' which is a user-space utility that simply loads the camera's firmware into the device. unloading and reloading uvcvideo module will give you your /dev/video* device. There are certain problems with this as any request for a resolution change below 640x480 will report successful by the camera, but actually fails. I will be following developement closely. --[[User:OrionFyre|OrionFyre]] 15:13, 14 November 2008 (EST)<br />
<br />
''flashcam note'' Flashcam project was a video loopback device that provided a v4l device that worked with flash, this project is now obsolete as flash10 supports v4l2 and as it too is subject to the same breakage that occures to r5u870 with kernel26>2.6.26. My intention was to continue to use flashcam to take vga video (which works with uvcvideo) and have flashcam provide the proper resolution needed for the various applications--[[User:OrionFyre|OrionFyre]] 15:13, 14 November 2008 (EST)<br />
<br />
==Untested==<br />
*3D Support<br />
*Mic<br />
<br />
==lspci output==<br />
00:00.0 Host bridge: Intel Corporation Mobile PM965/GM965/GL960 Memory Controller Hub (rev 0c)<br />
00:02.0 VGA compatible controller: Intel Corporation Mobile GM965/GL960 Integrated Graphics Controller (rev 0c)<br />
00:02.1 Display controller: Intel Corporation Mobile GM965/GL960 Integrated Graphics Controller (rev 0c)<br />
00:1a.0 USB Controller: Intel Corporation 82801H (ICH8 Family) USB UHCI Contoller #4 (rev 03)<br />
00:1a.1 USB Controller: Intel Corporation 82801H (ICH8 Family) USB UHCI Controller #5 (rev 03)<br />
00:1a.7 USB Controller: Intel Corporation 82801H (ICH8 Family) USB2 EHCI Controller #2 (rev 03)<br />
00:1b.0 Audio device: Intel Corporation 82801H (ICH8 Family) HD Audio Controller (rev 03)<br />
00:1c.0 PCI bridge: Intel Corporation 82801H (ICH8 Family) PCI Express Port 1 (rev 03)<br />
00:1c.1 PCI bridge: Intel Corporation 82801H (ICH8 Family) PCI Express Port 2 (rev 03)<br />
00:1c.2 PCI bridge: Intel Corporation 82801H (ICH8 Family) PCI Express Port 3 (rev 03)<br />
00:1d.0 USB Controller: Intel Corporation 82801H (ICH8 Family) USB UHCI Controller #1 (rev 03)<br />
00:1d.1 USB Controller: Intel Corporation 82801H (ICH8 Family) USB UHCI Controller #2 (rev 03)<br />
00:1d.2 USB Controller: Intel Corporation 82801H (ICH8 Family) USB UHCI Controller #3 (rev 03)<br />
00:1d.7 USB Controller: Intel Corporation 82801H (ICH8 Family) USB2 EHCI Controller #1 (rev 03)<br />
00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev f3)<br />
00:1f.0 ISA bridge: Intel Corporation 82801HEM (ICH8M) LPC Interface Controller (rev 03)<br />
00:1f.2 IDE interface: Intel Corporation 82801HBM/HEM (ICH8M/ICH8M-E) SATA IDE Controller (rev 03)<br />
00:1f.3 SMBus: Intel Corporation 82801H (ICH8 Family) SMBus Controller (rev 03)<br />
02:00.0 Network controller: Intel Corporation PRO/Wireless 4965 AG or AGN Network Connection (rev 61)<br />
06:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8101E PCI Express Fast Ethernet controller (rev 01)<br />
08:07.0 CardBus bridge: Texas Instruments PCIxx12 Cardbus Controller<br />
08:07.1 FireWire (IEEE 1394): Texas Instruments PCIxx12 OHCI Compliant IEEE 1394 Host Controller<br />
08:07.2 Mass storage controller: Texas Instruments 5-in-1 Multimedia Card Reader (SD/MMC/MS/MS PRO/xD)</div>Wzyboyhttps://wiki.archlinux.org/index.php?title=Lenovo_ThinkPad_X1_Carbon&diff=278354Lenovo ThinkPad X1 Carbon2013-10-11T06:57:07Z<p>Wzyboy: /* UEFI */ fix typo</p>
<hr />
<div>[[Category:Lenovo]]<br />
== Model description ==<br />
<br />
Lenovo ThinkPad X1 Carbon (X1C).<br />
There is also a touch version. Comes without optical drive. <br />
Has UEFI BIOS with BIOS-legacy fallback mode.<br />
<br />
{{tip| A great resource for thinkpads is<br />
http://www.thinkwiki.org/wiki/ThinkWiki}}<br />
<br />
=== Legacy-BIOS ===<br />
<br />
This procedure is far less involved then UEFI and works perfectly.<br />
<br />
In order to turn off UEFI booting you will need to boot into your BIOS and change the boot mode to Legacy. Afterward, follow the [[Beginner's Guide]] for standard installation instructions.<br />
<br />
=== UEFI ===<br />
<br />
See https://bbs.archlinux.org/viewtopic.php?pid=1288500#p1288500<br />
<br />
1. You follow the guide from here and skip the part about errors and refind: [[Unified_Extensible_Firmware_Interface#Create_UEFI_bootable_USB_from_ISO|Create_UEFI_bootable_USB_from_ISO]]<br />
<br />
2. Make sure you USB is mounted to /boot/efi and install grub, like so:<br />
$ grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=arch_grub --boot-directory=/boot/efi/ --recheck --debug<br />
<br />
OBS: You can remove the entry from your EFI bootmanger, with efibootmgr by issuing:<br />
$ efibootmgr -b XX -B<br />
3. Now you can choose if you wanna hack you grub.cfg or use the custom config in grub.d. Either way generate the grub.cfg:<br />
$ grub-mkconfig -o /boot/efi/grub/grub.cfg<br />
<br />
4. Make certain appropriate changes have been made to grub.cfg. My working example, which could use cleaning:<br />
{{hc|/etc/grub.d/10_linux|<nowiki><br />
### BEGIN /etc/grub.d/10_linux ###<br />
menuentry 'Arch Linux test' {<br />
load_video<br />
set gfxpayload=keep<br />
insmod gzio<br />
insmod part_gpt<br />
insmod ext2<br />
set root='hd0,gpt1'<br />
if [ x$feature_platform_search_hint = xy ]; then<br />
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt1 --hint-efi=hd0,gpt1 B35D-FE34<br />
else<br />
search --no-floppy --fs-uuid --set=root B35D-FE34<br />
fi<br />
echo 'Loading Linux core repo kernel ...'<br />
linux /arch/boot/x86_64/vmlinuz root=UUID=B35D-FE34 ro archisobasedir=arch archisolabel=ARCH_201306<br />
echo 'Loading initial ramdisk ...'<br />
initrd /arch/boot/x86_64/archiso.img<br />
}<br />
<br />
<br />
### END /etc/grub.d/10_linux ###<br />
</nowiki>}}<br />
<br />
5. Move the grub.efi to overwrite the archiso supplied one (which btw works on my desktop. I guess GRUB includes more workarounds for buggy firmware from manufactureres. See this video, if you have time: http://mjg59.dreamwidth.org/10014.html<br />
$ mv /boot/efi/EFI/arch_grub/grubx64.efi /mnt/efi/EFI/boot/bootx64.efi<br />
<br />
Success. Somethings are implied, like GPT partitiontable etc.<br />
<br />
== Hardware ==<br />
<br />
Almost everything works out of the box.<br />
<br />
=== Audio ===<br />
Sound works out of the box.<br />
<br />
=== Network ===<br />
<br />
==== Wired ====<br />
<br />
Comes with USB->Ethernet plug. Works out of the box.<br />
<br />
==== Wireless ====<br />
<br />
Works out of the box. Uses the following module<br />
* iwlwifi<br />
<br />
----<br />
{{ic|lspci}} ''output: Network controller: Intel Corporation Centrino Advanced-N 6205 [Taylor Peak] (rev 96)''<br />
<br />
=== Touchscreen ===<br />
<br />
Works out of the box.<br />
Haven't looked for possibilities to configure multi-touch.<br />
<br />
=== Video ===<br />
<br />
The video card installed is Intel HD Graphics 4000. See [[intel]] for more info.<br />
<br />
Install the video driver with {{ic|pacman -S xf86-video-intel}}<br />
<br />
==== SNA ====<br />
<br />
To use [[Intel Graphics#Tips_and_tricks|SNA acceleration method]] add <br />
<br />
{{hc|/etc/X11/xorg.conf.d/20-intel.conf|<nowiki><br />
Section "Device"<br />
Identifier "Intel Graphics"<br />
Driver "intel"<br />
Option "AccelMethod" "sna"<br />
EndSection<br />
</nowiki>}}<br />
<br />
==== EDID bug ====<br />
<br />
{{Note|Update: This is due to the use of a mini-DP->VGA-adapter. Tested without bugs with a mini-DP->DP-cable.}}<br />
<br />
<br />
There is a bug getting EDID for the external screen when connected at bootup.<br />
<br />
I get this error message<br />
[ 93.736330] [drm:intel_dp_i2c_aux_ch] *ERROR* too many retries, giving up<br />
<br />
If external screen is connected after bootup everything works fine.<br />
<br />
I had to manually add a modeline and set the preferred resolution with this script.<br />
{{hc|/usr/local/bin/dp-output|<nowiki><br />
# Monitor setup<br />
EXTERNAL_OUTPUT="DP1"<br />
INTERNAL_OUTPUT="LVDS1"<br />
<br />
xrandr |grep $EXTERNAL_OUTPUT | grep " connected " | if [ $? -eq 0 ]; then<br />
xrandr --newmode 1920x1200_60 154 1920 1968 2000 2080 1200 1203 1209 1235 -hsync +vsync<br />
xrandr --addmode DP1 1920x1200_60<br />
xrandr --output $INTERNAL_OUTPUT --off --output $EXTERNAL_OUTPUT --mode 1920x1200_60<br />
fi<br />
</nowiki>}}<br />
<br />
And add the script to startup at X-session start. Since I use [[slim]] it`s done with this setting in slim.conf<br />
{{hc|/etc/slim.conf|sessionstart_cmd dp-output}}<br />
<br />
=== KMS ===<br />
Get [[KMS]] working by adding i915 to the modules line <br />
{{hc|/etc/mkinitcpio.conf|<nowiki>MODULES="i915"</nowiki>}}<br />
<br />
$ mkinitcpio -p linux<br />
<br />
You also have to enable VT in BIOS.<br />
<br />
=== Webcam ===<br />
Works out of the box. Tested with guvcview<br />
<br />
=== Fingerprint Reader ===<br />
<br />
{{AUR|fingerprint-gui}} from the [[AUR]] is already patched to work with the X1's newer fingerprint reader. To get the gui's dropdown to recognize your device, you'll have to add your user to the {{ic|plugdev}} group:<br />
<br />
$ gpasswd -a <username> plugdev<br />
<br />
See [[fingerprint-gui]] for more information about config<br />
<br />
----<br />
{{ic|lsusb}} ''output: 147e:2020 Upek TouchChip Fingerprint Coprocessor (WBF advanced mode)''<br />
<br />
=== WWAN (Mobile broadband) ===<br />
<br />
This model includes a [http://www.thinkwiki.org/wiki/Ericsson_H5321_gw_Mobile_Broadband_Module Ericsson H5321gw] adapter that can be used as a mobile broadband adapter and GPS.<br />
<br />
The SIM-card must be inserted in the back of the laptop.<br />
<br />
Add text to the following file and reboot<br />
<br />
{{hc|/etc/modprobe.d/avoid-mbib.conf|<nowiki>options cdc_ncm prefer_mbim=N</nowiki>}}<br />
<br />
Tested OK with [[networkmanager]] with {{pkg|modemmanager}} installed<br />
----<br />
{{ic|lsusb}} ''output: 0bdb:1926 Ericsson Business Mobile Networks BV''<br />
<br />
=== GPS ===<br />
<br />
Install gpsd from extra and mbm-gpsd-git from AUR.<br />
Add this to the following file<br />
{{hc|/etc/udev/rules.d/99-mbm.rules|<nowiki><br />
ATTRS{idVendor}=="0bdb", ATTRS{idProduct}=="1926", ENV{ID_USB_INTERFACE_NUM}=="09", ENV{MBM_CAPABILITY}="gps_nmea"<br />
ATTRS{idVendor}=="0bdb", ATTRS{idProduct}=="1926", ENV{ID_USB_INTERFACE_NUM}=="03", ENV{MBM_CAPABILITY}="gps_ctrl"<br />
</nowiki>}}<br />
<br />
Reboot to reload udev rules.<br />
<br />
Run {{ic|sudo mbm-gpsd}}<br />
<br />
See if there's GPS-output<br />
{{ic|cat /dev/gps0}}<br />
<br />
Run {{ic|sudo gpsd -b -N /dev/gps0}}<br />
<br />
To test it {{ic|xgps}}<br />
<br />
Or use e.g. {{AUR|foxtrotgps}} in [[AUR]].<br />
<br />
See [http://www.thinkwiki.org/wiki/Ericsson_H5321_gw_Mobile_Broadband_Module this link] for more info.<br />
----<br />
{{ic|lsusb}} ''output: 0bdb:1926 Ericsson Business Mobile Networks BV''<br />
<br />
=== Keyboard backlight ===<br />
Works out of the box. Use FN+Space<br />
<br />
=== Bluetooth ===<br />
Works out of the box.<br />
Test with:<br />
$ systemctl start bluetooth<br />
$ bluetoothctl<br />
<br />
[bluetooth]# power on<br />
<br />
== Other hardware ==<br />
<br />
=== Docking ===<br />
This model comes without a docking port.<br />
<br />
Since the video for USB 3 Docking Stations currently isn't supported[http://www.displaylink.org/forum/showthread.php?t=1748], I had to go for [http://www.thinkwiki.org/wiki/USB_Port_Replicator_with_Digital_Video USB Port Replicator with Digital Video (USB 2.0)]<br />
<br />
This works:<br />
* USB-devices connected to dock<br />
* Audio<br />
* Microphone<br />
* Ethernet<br />
* Video (follow [[DisplayLink]] guide)</div>Wzyboyhttps://wiki.archlinux.org/index.php?title=Netctl&diff=253615Netctl2013-04-10T14:49:17Z<p>Wzyboy: /* Installation */ `wifi-menu' is a command rather than a package</p>
<hr />
<div>{{Lowercase title}}<br />
[[Category:Networking]]<br />
[[es:Netcfg]]<br />
[[fr:Netcfg]]<br />
[[it:Netcfg]]<br />
[[ja:Netcfg]]<br />
[[ro:Netcfg]]<br />
[[ru:Netcfg]]<br />
[[tr:netcfg]]<br />
[[zh-CN:Netcfg]]<br />
{{Article summary start}}<br />
{{Article summary text|A guide to configuring the network using netctl and network profile scripts.}}<br />
{{Article summary end}}<br />
Netctl is a new Arch project slated to replace [[netcfg]]. Users should regard it as the future of CLI-based network management on Arch Linux.<br />
<br />
==Installation==<br />
The {{Pkg|netctl}} package is available in [[Official Repositories#&#91;core&#93;|&#91;core&#93;]]. Installing netctl will replace netcfg. As of netctl version 0.7, optional dependencies include<br />
*{{Pkg|dialog}}, for menu based WiFi assistance ({{ic|wifi-menu}})<br />
*{{Pkg|dhclient}}, for DHCP support<br />
*{{Pkg|dhcpcd}}, for DHCP support (instead of dhclient)<br />
*{{Pkg|wpa_supplicant}}, for wireless network support<br />
*{{Pkg|ifplugd}}, for automatic wired connections through {{ic|netctl-ifplugd}}<br />
*{{Pkg|ifenslaved}}, for bond connections<br />
*{{Pkg|bridge-utils}}, for bridge connections<br />
*{{Pkg|ppp}}, for pppoe connection<br />
<br />
==Recommended Reading==<br />
Considerable effort has gone into the construction of quality man pages. Users are encouraged to read the following man pages prior to using netctl:<br />
*netctl<br />
*netctl.profile<br />
*netctl.special<br />
<br />
==Configuration==<br />
<br />
{{ic|netctl}} may be used to introspect and control the state of the systemd services for the network profile manager. Example configuration files are provided for the user to assist them in configuring their network connection. These example profiles are located in {{ic|/etc/netctl/examples/}}. The common configurations include:<br />
*ethernet-dhcp<br />
*ethernet-static<br />
*wireless-wpa<br />
*wireless-wpa-static<br />
<br />
To use an example profile, simply copy one of them from {{ic|/etc/netctl/examples/<profile>}} to {{ic|/etc/netctl/<profile>}} and configure it to your needs:<br />
# cp /etc/netctl/examples/wireless-wpa /etc/netctl/my-wireless-wpa<br />
<br />
Once you have created your profile, make an attempt to establish a connection using the newly created profile by running:<br />
# netctl start <profile><br />
<br />
If issuing the above command results in a failure, then use {{ic|journalctl -xn}} and {{ic|netctl status <profile>}} in order to obtain a more in depth explanation of the failure. Make the needed corrections to the failed configuration and retest.<br />
<br />
Once the profile is started successfully then it can be {{ic|enabled}} using {{ic|netctl enable <profile>}}. This will create the proper symlink for the profile to be used by {{ic|netctl-auto@.service}}.<br />
<br />
{{Note| the systemd service {{ic|netctl-auto@<interface>.service}} will need to be enabled in order to allow automatic wireless connection at boot to become functional.}}<br />
<br />
{{Note| If there is ever a need to alter a currently enabled profile. {{ic|netctl reenable <profile>}} will have to executed in order to apply the changes.}}<br />
<br />
===Migrating from netcfg===<br />
<br />
{{ic|netctl}} uses {{ic|/etc/netctl}} to store its profiles, ''not'' {{ic|/etc/network.d}} ({{ic|netcfg}}'s profile storage location).<br />
<br />
In order to migrate from netcfg, at least the following is needed:<br />
*Move network profile files to the new directory.<br />
*Rename variables therein according to netctl.profile(5) (most have only become CamelCase i.e CONNECTION= becomes Connection=).<br />
*Unquote interface variables and other variables that don't strictly need quoting (this is mainly a style thing).<br />
*Run {{ic|netctl enable <profile>}} for every profile in the old NETWORKS array. 'last' doesn't work this way, see netctl.special(7).<br />
*Use {{ic|netctl list}} / {{ic|netctl start <profile>}} instead of netcfg-menu. wifi-menu remains available.<br />
<br />
===Password Encryption (256-bit PSK)===<br />
<br />
Users ''not'' wishing to have their passwords stored in ''plain text'' have the option of generating a 256-bit Encrypted PSK.<br />
<br />
If you have not done so already, install {{pkg|wpa_actiond}} from the [[Official Repositories#&#91;core&#93;|&#91;core&#93;]] repository using [[pacman]]<br />
# pacman -S wpa_actiond<br />
<br />
Next, generate your 256-bit Encrypted PSK using [[WPA_supplicant#Configuration_file|wpa_passphrase]]:<br />
{{hc|Usage: wpa_passphrase [ssid] [passphrase]|<br />
2=$ wpa_passphrase archlinux freenode|<br />
network={<br />
ssid="archlinux"<br />
#psk="freenode"<br />
psk=64cf3ced850ecef39197bb7b7b301fc39437a6aa6c6a599d0534b16af578e04a<br />
}<br />
{{Note|This information will be used in your profile so do not close the terminal}}<br />
}}<br />
<br />
In a second terminal window copy the example file {{ic|wireless-wpa}} from {{ic|/etc/netctl/examples}} to {{ic|/etc/netctl}}.<br />
# cp /etc/netctl/examples/wireless-wpa /etc/netctl/wireless-wpa<br />
<br />
You will then need to edit {{ic|/etc/netctl/wireless-wpa}} using your favorite text editor and add the ''Encrypted Pre-shared Key'' that was generated early using wpa_passphrase to the {{ic|'''Key'''}} variable of this profile.<br />
<br />
Once completed your network profile {{ic|wireless-wpa}} containing a 256-bit Encrypted PSK should resemble:<br />
{{hc|/etc/netctl/wireless-wpa|2=<br />
Description='A simple WPA encrypted wireless connection using 256-bit Encrypted PSK'<br />
Interface=wlp2s2<br />
Connection=wireless<br />
Security=wpa<br />
IP=dhcp<br />
ESSID=archlinux<br />
Key=\"64cf3ced850ecef39197bb7b7b301fc39437a6aa6c6a599d0534b16af578e04a<br />
}}<br />
{{Note|1=Make sure to use the '''special non-quoted rules''' for Key= that are explained at the end of netctl.profile(5)}}<br />
<br />
==Support==<br />
Official announcement thread: https://bbs.archlinux.org/viewtopic.php?id=157670</div>Wzyboyhttps://wiki.archlinux.org/index.php?title=Fcitx_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=242937Fcitx (简体中文)2013-01-04T09:02:39Z<p>Wzyboy: /* 安装 FCITX */ fcitx-im</p>
<hr />
<div>[[Category:简体中文]]<br />
[[Category:Internationalization (简体中文)]]<br />
[[en:Fcitx]]<br />
'''Fcitx''' (Flexible Input Method Framework) ──即小企鹅输入法,它是一个以 GPL 方式发布的输入法平台(即原来的 G 五笔),包括五笔、拼音(全拼和双拼)、二笔、区位等输入模块,支持简入繁出,是在 Linux 操作系统中常用的中文输入法。它的优点是,短小精悍、跟程序的兼容性比较好。<br />
<br />
==安装 FCITX ==<br />
{{Pkg|fcitx}} 在 [community] 库中,可以通过 [[Pacman]] 来安装:<br />
<br />
为了在 gtk 与 qt 程序中获得良好的输入体验(例如光标跟随与显示预编辑字符串)并避免一些 xim 无法解决的 bug, 请根据需要安装对应的输入法模块: {{Pkg|fcitx-gtk2}}, {{Pkg|fcitx-gtk3}} 以及 {{Pkg|fcitx-qt}}. 若要一次性安装 Fcitx 主程序和相关的模块,可使用此命令:<br />
<br />
pacman -S fcitx-im<br />
<br />
==使用 FCITX 输入中文==<br />
<br />
使用 FCITX 之前,你必须先进行一些环境设定:<br />
*如果你采用 KDM、GDM、LightDM 等显示管理器,请在~/.xprofile (没有则新建一个)中加入如下3行,如果你采用 startx 或者 Slim 启动 (即使用.xinitrc的场合),则在 ~/.xinitrc 中加入:<br />
<br />
export GTK_IM_MODULE=fcitx<br />
export QT_IM_MODULE=fcitx<br />
export XMODIFIERS="@im=fcitx"<br />
<br />
以上设置使用了fcitx提供的gtk/qt输入法模块, 请根据需要安装 {{Pkg|fcitx-gtk2}}, {{Pkg|fcitx-gtk3}} 以及 {{Pkg|fcitx-qt}}.<br />
<br />
你可以选择在gtk/qt程序中使用xim, 为此你可以将上面的环境变量的对应设置改成如下的值<br />
<br />
export GTK_IM_MODULE=xim<br />
export QT_IM_MODULE=xim<br />
<br />
{{warning| 使用xim输入很可能会遇到一些包括不能输入, 没有光标跟随, 重启输入法时应用程序卡死在内的无法由fcitx解决的问题. 对于在使用xim时遇到的这些问题, fcitx无法提供任何支持.}}<br />
<br />
*重新登录后让环境变量生效。<br />
<br />
如果你使用 XDG 兼容的桌面环境如 [[KDE]], [[GNOME]], [[XFCE]], [[LXDE]], 当你重新登录后,Fcitx 应该会自动启动,如果没有的话,可以打开控制台并运行:<br />
<br />
fcitx<br />
<br />
为检验 fcitx 是否正常运行, 打开一个程序,比如 leafpad, 按 CTRL+Space 激活 Fcitx 并试着输入几个字。<br />
<br />
如果 Fcitx 没有随桌面环境自动启动或者希望修改fcitx启动参数,请用桌面环境提供的自动启动工具配置或者编辑用户目录{{ic|~/.config/autostart/}}下的{{ic|fcitx-autostart.desktop}}文件确认自动启动是否被禁用. 如果用户目录下的文件尚不存在, 你可以复制自动启动文件 {{ic|/etc/xdg/autostart/fcitx-autostart.desktop}} 到用户目录<br />
<br />
cp /etc/xdg/autostart/fcitx-autostart.desktop ~/.config/autostart/<br />
<br />
如果你使用的桌面环境不自动支持xdg的自动启动设置, 请在你使用的启动脚本里面添加<br />
<br />
fcitx<br />
<br />
以实现自动启动<br />
<br />
当ibus等其它输入法程序同时启动且开启了xim支持时, 可能会造成fcitx启动失败, 请确认禁用了其它输入法程序的自动启动.<br />
<br />
== 全局配置说明 ==<br />
<br />
Fcitx 提供了图形界面的配置程序,你可以安装他们:{{Pkg|kcm-fcitx}}(基于KDE 的 kcm), {{Pkg|fcitx-configtool}}(基于 gtk3), 或者从 [[Arch User Repository|AUR]] 安装 {{AUR|fcitx-configtool-gtk2}}(基于 gtk2, 不支持)。<br />
<br />
==桌面环境整合==<br />
<br />
===Gnome-Shell===<br />
<br />
你可以在 [[Arch User Repository|AUR]] 安装 {{AUR|gnome-shell-extension-kimpanel-git}}, 它提供了类似 ibus-gjs 的用户体验.<br />
<br />
===KDE===<br />
<br />
你可以安装 {{Pkg|kcm-fcitx}} 以及 {{Pkg|kdeplasma-addons-applets-kimpanel}}.<br />
<br />
== 快捷键 ==<br />
默认快捷键<br />
Ctrl+Space 激活输入法<br />
左Shift 临时切换到英文<br />
Ctrl+Shift 输入法间切换<br />
-/= 向前/向后翻页<br />
<br />
你可以在配置界面的全局配置中修改这些快捷键<br />
<br />
== 禁用输入法 ==<br />
或许你并不希望看到一些输入法,比如双拼。那么你可以在配置界面里禁用相应的输入法<br />
<br />
== 扩充拼音词库 ==<br />
用户配置拼音词库是在~/.config/fcitx/pinyin下,其中pybase.mb是拼音单字库 pyphrase.mb拼音词库(如果这两文件没有,那么fcitx就读取此目录/usr/share/fcitx/pinyin),将你下载的词库放置到此目录后,重启(ctrl+5)fcitx就可以了。<br />
mv pybase.mb pyphrase.mb ~/.config/fcitx/pinyin/<br />
<br />
== Vim ==<br />
如果你经常在vim下使用fcitx,可以安装[http://www.vim.org/scripts/script.php?script_id=3764 fcitx.vim]。或者简单地在{{ic|~/.vimrc}}添加如下代码,可实现退出插入模式时,关闭fcitx;进入插入模式时,启用fcitx:<br />
"##### auto fcitx ###########<br />
let g:input_toggle = 1<br />
function! Fcitx2en()<br />
let s:input_status = system("fcitx-remote")<br />
if s:input_status == 2<br />
let g:input_toggle = 1<br />
let l:a = system("fcitx-remote -c")<br />
endif<br />
endfunction<br />
<br />
function! Fcitx2zh()<br />
let s:input_status = system("fcitx-remote")<br />
if s:input_status != 2 && g:input_toggle == 1<br />
let l:a = system("fcitx-remote -o")<br />
let g:input_toggle = 0<br />
endif<br />
endfunction<br />
<br />
set ttimeoutlen=150<br />
"退出插入模式<br />
autocmd InsertLeave * call Fcitx2en()<br />
"进入插入模式<br />
autocmd InsertEnter * call Fcitx2zh()<br />
"##### auto fcitx end ######<br />
<br />
要注意的是,由于要调用外部程序,这将明显拖慢会反复进出插入模式的映射。建议改写这样的映射。使用带 Python 支持的 Vim 配合 fcitx.vim 亦可改善这种情况。<br />
<br />
==疑难杂症==<br />
<br />
* '''注意:'''<br />
当LC_CTYPE为英文时, 会出现Emacs下无法使用输入法的情况, 如出现此情况, 请在启动Emacs时将LC_CTYPE设为zh_CN.UTF-8. (终端下使用emacs无此问题, 输入法会由终端程序处理).<br />
<br />
* '''输入法模块'''<br />
{{warning|即使未安装输入法模块, 一般还是可以在大部分程序中使用输入法, 不过很可能出现从无法光标跟随, 无法显示预编辑字符串, 到无法输入甚至程序卡死等情况. 如无特殊情况请安装全部输入法模块}}<br />
<br />
如果你已经将IM MODULE设定为fcitx且遇到了无法激活输入法的问题, 请根据出现问题的程序检查对应的输入法模块包是否已经安装<br />
<br />
部分程序无法使用gtk/qt的输入法模块, 如果你需要使用这些程序, 请注意xim设置以及xim下可能遇到的以上问题. 这些程序包括: 所有不使用gtk/qt的程序(如使用tk, motif, 或者直接使用xlib的程序), emacs, opera, openoffice, libreoffice, skype<br />
<br />
* '''火狐右键和菜单无法弹出的问题'''<br />
firefox升级到13后可能与xim发生冲突造成菜单无法弹出等问题,解决办法是把环境配置文件中的<br />
export GTK_IM_MODULE=xim<br />
export QT_IM_MODULE=xim<br />
换成<br />
export GTK_IM_MODULE=fcitx<br />
export QT_IM_MODULE=fcitx<br />
<br />
* '''Ctrl + Space 在GTK2程序中无法调出输入法'''<br />
locale为英文时,有可能会出现在GTK2程序中无法用Ctrl+Space键调出输入法,此时应该手动进行如下设置( [http://fcitx.github.com/handbook/faq.html#ctrl_space FAQ]) <br />
gtk-query-immodules-2.0 > /etc/gtk-2.0/gtk.immodules<br />
#编辑 gtk.immodules,找到类似于以下的行,并如下添加 en:<br />
"xim" "X Input Method" "gtk20" "/usr/share/locale" "en:ko:ja:th:zh"<br />
{{warning|升级gtk相应模块时有可能会重新生成此文件,此时请重新编辑该文件.}}<br />
<br />
== 外部资源 ==<br />
*[https://github.com/fcitx/fcitx/ Fcitx GitHub]<br />
*[https://code.google.com/p/fcitx/ Fcitx Google Code]<br />
*[http://fcitx-im.org/ Fcitx Wiki]</div>Wzyboyhttps://wiki.archlinux.org/index.php?title=Fcitx&diff=242936Fcitx2013-01-04T09:01:33Z<p>Wzyboy: /* Installation */ fcitx-im group</p>
<hr />
<div>[[Category:Internationalization]]<br />
[[zh-CN:Fcitx]]<br />
[http://code.google.com/p/fcitx/ FCITX] (Flexible Input Method Framework) is a [http://en.wikipedia.org/wiki/Input_method input method framework] aiming at providing environment independent language support for Linux. It supports a lot of different languages and also provides many useful non-CJK features.<br />
<br />
==Installation==<br />
{{Pkg|fcitx}} can be installed with [[Pacman]] from the [community] repository.<br />
<br />
In order to have a better experience in gtk and qt programs (especially gtk programs) (e.g. better cursor following) and get rid of many unsolvable problems/bugs caused by xim, please install the corresponding input method modules for gtk and qt: {{Pkg|fcitx-gtk2}} (for gtk2 programs), {{Pkg|fcitx-gtk3}} (for gtk3 programs) and {{Pkg|fcitx-qt}} (for qt programs). You can install all four of them in a bundle by issuing this command:<br />
<br />
pacman -S fcitx-im<br />
<br />
==Using FCITX to Input==<br />
Before you can make use of FCITX for input, you have to setup some environment variables. It is quite simple.<br />
*Adding the following lines to your desktop startup script files ({{ic|.xprofile}} or {{ic|.profile}} when you are using KDM, GDM or LightDM, and {{ic|.xinitrc}} when you are using startx or Slim). With these lines, fcitx will work along with gtk/qt input method modules and support xim programs (Please make sure the necessary input method modules are already installed):<br />
<br />
export GTK_IM_MODULE=fcitx<br />
export QT_IM_MODULE=fcitx<br />
export XMODIFIERS="@im=fcitx"<br />
<br />
Optionally, you can also choose to use xim in your gtk and/or qt programs, in which case you need to change the corresponding lines above as following:<br />
<br />
export GTK_IM_MODULE=xim<br />
export QT_IM_MODULE=xim<br />
<br />
{{Warning| Using xim can sometimes cause problems that are not solvable by any input method including not being able to input, no cursor following, application freeze on input method restart. For these xim related problems, Fcitx cannot provide any fix or support. This is the same with any other input method framework, so please use toolkit (gtk/qt) input method modules instead of xim whenever possible}}<br />
<br />
*Re-login to make such environment effective.<br />
<br />
If you are using any XDG compatible desktop environment such as [[KDE]], [[GNOME]], [[XFCE]], [[LXDE]], after you relogin, the autostart should work out of box. If not, open your favorite terminal, type:<br />
<br />
$ fcitx<br />
<br />
To see if fcitx is working correctly, open an application such as leafpad and press CTRL+Space (the default shortcut for switching input method) to invoke FCITX and input some words.<br />
<br />
If Fcitx failed to start with your desktop automatically or if you want to change the parameters to start fcitx, please use tools provided by your desktop environment to configure xdg auto start or edit the {{ic|fcitx-autostart.desktop}} file in your {{ic|~/.config/autostart/}} directory (copy it from {{ic|/etc/xdg/autostart/}} if it doesn't exist yet).<br />
<br />
If your desktop environment does not support xdg auto start, please add the following command to your startup script (after the environment variables are set up properly).<br />
<br />
$ fcitx<br />
<br />
When other input methods with xim support is also running, Fcitx may fail to start due to xim error. Please make sure no other input method is running before you start Fcitx.<br />
<br />
==Configuration==<br />
<br />
Fcitx provides GUI configure tool. You can install either {{Pkg|kcm-fcitx}}(based on kcm), {{Pkg|fcitx-configtool}}(based on gtk3), or {{AUR|fcitx-configtool-gtk2}}(based on gtk2, unsupported) from [[Arch User Repository|AUR]].<br />
<br />
==Desktop Environment Integration==<br />
<br />
===Gnome-Shell===<br />
<br />
You can install {{AUR|gnome-shell-extension-kimpanel-git}} package in [[Arch User Repository|AUR]], which provides a similar user experience as ibus-gjs.<br />
<br />
===KDE===<br />
<br />
You can install {{Pkg|kcm-fcitx}} and {{Pkg|kdeplasma-addons-applets-kimpanel}}.<br />
<br />
{{Pkg|kcm-fcitx}} is a kcontrol module for fcitx.<br />
<br />
{{Pkg|kdeplasma-addons-applets-kimpanel}} is a plasmoids providing native feeling under kde. Simply add kimpanel to plasma and fcitx will automatically switch to it without extra configuration.<br />
<br />
==Install other components of fcitx==<br />
All components of fcitx will requires fcitx to restart after install.<br />
<br />
===Keyboard layout integration===<br />
fcitx-keyboard is now built-in supported. Open a configuration tool ({{Pkg|kcm-fcitx}} or {{Pkg|fcitx-configtool}} mentioned above), you might want to uncheck the "Show only current language" and find your keyboard layout.<br />
<br />
In order to enable spell checking, press ctrl + alt + h when fcitx is on a input method provides by fcitx-keyboard. Then that's it, you can type long word, to see whether it works.<br />
<br />
===Chinese Input===<br />
fcitx built-in provides fcitx-pinyin and fcitx-table inside {{Pkg|fcitx}} package, which supports [[wikipedia:Pinyin|Pinyin]] and table-based input method, for example, [[wikipedia:Wubi|Wubi]].<br />
<br />
If you want better support for pinyin, you can install, {{Pkg|fcitx-cloudpinyin}}, {{Pkg|fcitx-sunpinyin}}, {{Pkg|fcitx-googlepinyin}} or {{Pkg|fcitx-libpinyin}}.<br />
<br />
If you need [[wikipedia:Bopomofo|Bopomofo]] support, you can install {{Pkg|fcitx-chewing}} or {{Pkg|fcitx-libpinyin}}.<br />
<br />
If you need [[wikipedia:Cangjie_input_method|Cangjie]], [[wikipedia:Zhengma|Zhengma]], [[wikipedia:Boshiamy|Boshiamy]] support, you can install {{AUR|fcitx-table-extra}} in [[Arch User Repository|AUR]].<br />
<br />
===Japanese Input Method===<br />
Install {{Pkg|fcitx-anthy}} or {{Pkg|fcitx-mozc}}.<br />
<br />
===Korean Input Method===<br />
Install {{AUR|fcitx-hangul}} in [[Arch User Repository|AUR]].<br />
<br />
===Other language===<br />
[http://www.m17n.org/index.html m17n] provides quite a long other language support, you can install m17n support for fcitx with {{AUR|fcitx-m17n}} in [[Arch User Repository|AUR]].<br />
<br />
==Troubleshooting==<br />
* Emacs<br />
If your LC_CTYPE is English, you may not be able to use input method in emacs due to a old emacs' bug. You can set your LC_CTYPE to something else such as "zh_CN.UTF-8" before emacs starts to get rid of this problem.<br />
<br />
* Input method module<br />
{{Warning| You may still be able to use input method in most programs without the input method module, however, you may have unsolvable weird problems if you do so.}}<br />
<br />
{{Warning| for firefox above version 13, the popup menu may fail to work due to xim, please make sure that fcitx-gtk2 along with a latest version fcitx are installed.}}<br />
<br />
* Ctrl+Space fail to work in GTK2 programs<br />
<br />
This problem sometimes happens when locale is set as English. From the official [http://fcitx.github.com/handbook/faq.html#ctrl_space FAQ], simply use:<br />
<br />
# gtk-query-immodules-2.0 > /etc/gtk-2.0/gtk.immodules<br />
<br />
then edit gtk.immodules,and change the corresponding line as below:<br />
<br />
"xim" "X Input Method" "gtk20" "/usr/share/locale" "en:ko:ja:th:zh"<br />
<br />
{{Warning| This file might be regenerated when gtk2 modules are updated, please remember to edit it.}}<br />
<br />
<br />
If you have set the *_IM_MODULE environment variables to fcitx but cannot activate fcitx, please check if you have installed the corresponding input method modules.<br />
<br />
Some programs can only use xim, if you are using these programs, please make sure your $XMODIFIERS is set properly and be aware of the problems you may have. These programs includes: all programs that are not using gtk or qt (e.g. programs that use tk, motif, or xlib directly), emacs, opera, openoffice, libreoffice, skype<br />
<br />
==See also==<br />
*[https://github.com/fcitx/fcitx/ Fcitx GitHub]<br />
*[https://code.google.com/p/fcitx/ Fcitx Google Code]<br />
*[http://fcitx-im.org/ Fcitx Wiki]</div>Wzyboyhttps://wiki.archlinux.org/index.php?title=Thunderbird&diff=236759Thunderbird2012-11-25T14:11:05Z<p>Wzyboy: /* Via addons.mozilla.org */</p>
<hr />
<div>[[Category:Email Client]]<br />
[[fr:Thunderbird]]<br />
[[it:Thunderbird]]<br />
{{Article summary start}}<br />
{{Article summary text|This article discusses the installation and configuration of the e-mail client, Mozilla Thunderbird. It also provides information about several popular add-ons and extensions to the program, including EnigMail, Lightning, and WebMail.}}<br />
{{Article summary heading|Related}}<br />
{{Article summary wiki|Thunderbird Export URLs}}<br />
{{Article summary wiki|Firefox}}<br />
{{Article summary end}}<br />
<br />
'''Mozilla Thunderbird''' is an email, newsgroup, and news feed client designed around simplicity and full-featuredness while avoiding bloat. It supports POP, IMAP, SMTP, S/MIME, and OpenPGP encryption (through the Enigmail extension). Similarly to Firefox, it has a wide variety of extension and addons available for download that add more features.<br />
<br />
==Installation==<br />
The {{Pkg|thunderbird}} package can be found in the [extra] repository and installed with [[pacman]]:<br />
# pacman -S thunderbird<br />
<br />
There are a number of language packs available if English is not your preferred language. To see a list of available language packs, try:<br />
$ pacman -Ss thunderbird-i18n<br />
<br />
==Extensions==<br />
<br />
===Encryption with EnigMail===<br />
<br />
====Installation====<br />
<br />
=====Via addons.mozilla.org=====<br />
<br />
{{Note|This method won't work for x86_64, see [[#Via AUR]].}}<br />
{{Note| The section below that points you to the static builds seems to work fine for x86_x64. The aur is out of date (07/25/12). You have to use the nightly builds though because arch is using v14 of thunderbird. }}<br />
<br />
The first step to setting up email encryption is to download the GNU Privacy Guard (GnuPG). GnuPG is required by pacman, which is a part of 'base' system, so you do not have to install them manually.<br />
<br />
EnigMail can be downloaded from [https://addons.mozilla.org/en-US/thunderbird/addon/71 here], at Mozilla's addon database. Make sure that it is installed as a Thunderbird addon and isn't automatically interpreted to be a Firefox addon. This can be done by going to Tools -> Add-ons and clicking Install, then selecting the XPI addon package. Congratulations, EnigMail is now installed. You should now restart Thunderbird.<br />
<br />
=====Via enigmail.mozdev.org=====<br />
<br />
{{Note| As of 07/25/12 this worked. It is nightly build though. Who knows if it will work tommorow?!}}<br />
<br />
EnigMail addons that works for x86_64 can be downloaded from [http://enigmail.mozdev.org/download/download-static.php.html this] page. Select the Arch build of the addon and follow the instructions in the previous section to install.<br />
<br />
=====Via AUR=====<br />
<br />
There is an [[AUR]] package: {{AUR|enigmail}}.<br />
<br />
=====Issues with the x86_64 version of enigmail=====<br />
<br />
It is possible that Thunderbird (Lanikai) hasn't got the same build-type (Error: Linux_x86-gcc3) as the enigmail (x86_64) and won't get installed. Downloading Thunderbird in the i686 version an installing enigmail by the Add-On application works fine.<br />
<br />
If you download Thunderbird manually, remember copying the files to {{ic|/opt}} and creating a directory for Thunderbird. To still be able start Thunderbird from the "default location" create a file that points at {{ic|/opt/thunderbird/thunderbird}} for example.<br />
<br />
Open a new file called thunderbird.<br />
<br />
# nano /usr/bin/thunderbird<br />
<br />
Write in the file:<br />
<br />
/opt/thunderbird/thunderbird<br />
<br />
Finish with setting the right permissions and "updating" your shell.<br />
<br />
# chmod 755 /usr/bin/thunderbird<br />
# bash<br />
<br />
====Creating a Keypair====<br />
<br />
A keypair can be created by opening Thunderbird and finding the 'OpenPGP' menu and clicking 'Setup Wizard'. The wizard will now help you create your keypair. All of the options are fairly self-explanatory and are not discussed in this article.<br />
<br />
====Sharing your Public Key====<br />
<br />
There are a variety of ways to distribute your public key. One way is to upload it to a public keyserver network. Another is to share it with friends who are also using email encryption.<br />
<br />
====Encrypting your Emails====<br />
<br />
First of all, encryption does not always work properly with emails containing HTML. It is best to make all of the encrypted emails you wish to send plaintext. This can be ensured by going to Options in the 'New Email' window and finding Format, then clicking on "Plain-text only".<br />
<br />
Once you have chosen a recipient and title and have written your message, you can sign and encrypt the message by using the OpenPGP menu. Once that is done, simply click "Send" and your encrypted email has been sent.<br />
<br />
====Decrypting Emails====<br />
<br />
This article will not go into the details of key signing.<br />
<br />
Assuming that the email was encrypted properly, just trying to open it should result in a popup window asking you to type in your keyphrase. Do so now, and the email will be decrypted for your viewing pleasure.<br />
<br />
===Adding a Calendar with Lightning===<br />
<br />
Lightning is an extension that brings Sunbird's functionality to Thunderbird. This integrates calendar functions into Thunderbird.<br />
<br />
===Adding a Webmail Account with WebMail===<br />
<br />
This issue is covered in the article [[Webmail with Thunderbird]].<br />
<br />
===Plain-text Mode and Font Uniformity===<br />
<br />
Plain-text mode lets you view all your emails without HTML rendering. It can be configured from ''View menu > Message Body As'' option. This defaults to monospace font but font size is still inherited from original system fontconfig settings. You can uniform the default font and font size across all emails by overwriting it fontconfig user configuration. Appending below in user font config file before the closing </fontconfig> tag, will use replace monospace with Ubuntu Mono font with size of 10 pixels (provided you have already installed Ubuntu font family). Then run 'fc-cache -fv' to update system font cache.<br />
<br />
# vim /etc/fonts/conf.d/50-user.conf<br />
<match target="pattern"><br />
<test qual="any" name="family"><string>monospace</string></test><br />
<edit name="family" mode="assign" binding="same"><string>Ubuntu Mono</string></edit><br />
<!-- For Thunderbird, lowering default font size to 10 for uniformity --><br />
<edit name="pixelsize" mode="assign"><int>10</int></edit><br />
</match><br />
<br />
===Resizeable tray icon===<br />
<br />
There are a number of plugins that let Thunderbird close to tray, but most of them seem to make use of {{ic|/usr/lib/thunderbird-5.0/chrome/icons/default/default16.png}}, and if you are using a big screen and a bigger-than-standard dock (e.g. Avant Window Navigator) the icon could appear too little compared to the other tray icons.<br />
<br />
To make those plugins use the icons from {{ic|/usr/share/icons/hicolor/}} you just have to disable {{ic|/usr/lib/thunderbird-5.0/chrome/icons/default/default16.png}} renaming it for example to {{ic|default16.png.disabled}}, not forgetting to prevent pacman from reinstalling it by adding the following line to {{ic|/etc/pacman.conf}}:<br />
NoExtract = usr/lib/thunderbird-5.0/chrome/icons/default/default16.png<br />
<br />
===Links in Thunderbird do NOT open in Firefox===<br />
If you update from Firefox 3 to Firefox 4, you may no longer be able to click on a link in Thunderbird and have it open in Firefox. Especially if you are using KDE. To correct the problem, issue the following as your user, from the command line:<br />
<br />
gconftool-2 --type=string -s /desktop/gnome/url-handlers/http/command "firefox %s"<br />
gconftool-2 --type=string -s /desktop/gnome/url-handlers/https/command "firefox %s"<br />
<br />
Another option is go to the preferences => advanced => general and then select Config Editor.<br />
<br />
Search for "network.protocol-handler.warn-external"<br />
<br />
those following three were false, turn then to true, and then Thunderbird will ask you when clicking on liks which application to use. Select /usr/bin/firefox or /usr/bin/xdg-open and do not forgot to select remember my choice wink<br />
<br />
network.protocol-handler.warn-external.ftp<br />
network.protocol-handler.warn-external.http<br />
network.protocol-handler.warn-external.https<br />
<br />
the mimetype where saved on ~/.thunderbird/.default/mimeTypes.rdf<br />
<br />
=== Webmail with Thunderbird ===<br />
Please see upstream wiki: [http://kb.mozillazine.org/Using_webmail_with_your_email_client Using webmail with your email client].<br />
<br />
== Troubleshooting ==<br />
<br />
=== Segfault at startup ===<br />
<br />
A [https://bugzilla.mozilla.org/show_bug.cgi?id=292127 problem (mozilla-bug)] arises on systems configured to use ldap to fetch user information: Thunderbird segfaults at startup. A [https://bugzilla.mozilla.org/show_bug.cgi?id=292127#c7 work around] exists.<br />
<br />
=== Folder name in local language but menus in english after Thunderbird update ===<br />
<br />
First, verify that you have package <i>thunderbird-i18n-xx</i> installed, where "<i>xx</i>" is the language you want. If not, install it. If you have it already installed remove it with <code>sudo pacman -R thunderbird-i18n-xx</code> and reinstall it again.</div>Wzyboyhttps://wiki.archlinux.org/index.php?title=Thunderbird&diff=236758Thunderbird2012-11-25T14:08:43Z<p>Wzyboy: /* Via addons.mozilla.org */</p>
<hr />
<div>[[Category:Email Client]]<br />
[[fr:Thunderbird]]<br />
[[it:Thunderbird]]<br />
{{Article summary start}}<br />
{{Article summary text|This article discusses the installation and configuration of the e-mail client, Mozilla Thunderbird. It also provides information about several popular add-ons and extensions to the program, including EnigMail, Lightning, and WebMail.}}<br />
{{Article summary heading|Related}}<br />
{{Article summary wiki|Thunderbird Export URLs}}<br />
{{Article summary wiki|Firefox}}<br />
{{Article summary end}}<br />
<br />
'''Mozilla Thunderbird''' is an email, newsgroup, and news feed client designed around simplicity and full-featuredness while avoiding bloat. It supports POP, IMAP, SMTP, S/MIME, and OpenPGP encryption (through the Enigmail extension). Similarly to Firefox, it has a wide variety of extension and addons available for download that add more features.<br />
<br />
==Installation==<br />
The {{Pkg|thunderbird}} package can be found in the [extra] repository and installed with [[pacman]]:<br />
# pacman -S thunderbird<br />
<br />
There are a number of language packs available if English is not your preferred language. To see a list of available language packs, try:<br />
$ pacman -Ss thunderbird-i18n<br />
<br />
==Extensions==<br />
<br />
===Encryption with EnigMail===<br />
<br />
====Installation====<br />
<br />
=====Via addons.mozilla.org=====<br />
<br />
{{Note|This method won't work for x86_64, see [[#Via AUR]].}}<br />
{{Note| The section below that points you to the static builds seems to work fine for x86_x64. The aur is out of date (07/25/12). You have to use the nightly builds though because arch is using v14 of thunderbird. }}<br />
<br />
The first step to setting up email encryption is to download the GNU Privacy Guard (GnuPG). Several packages are needed for this:<br />
# pacman -S gnupg gpgme<br />
<br />
EnigMail can be downloaded from [https://addons.mozilla.org/en-US/thunderbird/addon/71 here], at Mozilla's addon database. Make sure that it is installed as a Thunderbird addon and isn't automatically interpreted to be a Firefox addon. This can be done by going to Tools -> Add-ons and clicking Install, then selecting the XPI addon package. Congratulations, EnigMail is now installed. You should now restart Thunderbird.<br />
<br />
=====Via enigmail.mozdev.org=====<br />
<br />
{{Note| As of 07/25/12 this worked. It is nightly build though. Who knows if it will work tommorow?!}}<br />
<br />
EnigMail addons that works for x86_64 can be downloaded from [http://enigmail.mozdev.org/download/download-static.php.html this] page. Select the Arch build of the addon and follow the instructions in the previous section to install.<br />
<br />
=====Via AUR=====<br />
<br />
There is an [[AUR]] package: {{AUR|enigmail}}.<br />
<br />
=====Issues with the x86_64 version of enigmail=====<br />
<br />
It is possible that Thunderbird (Lanikai) hasn't got the same build-type (Error: Linux_x86-gcc3) as the enigmail (x86_64) and won't get installed. Downloading Thunderbird in the i686 version an installing enigmail by the Add-On application works fine.<br />
<br />
If you download Thunderbird manually, remember copying the files to {{ic|/opt}} and creating a directory for Thunderbird. To still be able start Thunderbird from the "default location" create a file that points at {{ic|/opt/thunderbird/thunderbird}} for example.<br />
<br />
Open a new file called thunderbird.<br />
<br />
# nano /usr/bin/thunderbird<br />
<br />
Write in the file:<br />
<br />
/opt/thunderbird/thunderbird<br />
<br />
Finish with setting the right permissions and "updating" your shell.<br />
<br />
# chmod 755 /usr/bin/thunderbird<br />
# bash<br />
<br />
====Creating a Keypair====<br />
<br />
A keypair can be created by opening Thunderbird and finding the 'OpenPGP' menu and clicking 'Setup Wizard'. The wizard will now help you create your keypair. All of the options are fairly self-explanatory and are not discussed in this article.<br />
<br />
====Sharing your Public Key====<br />
<br />
There are a variety of ways to distribute your public key. One way is to upload it to a public keyserver network. Another is to share it with friends who are also using email encryption.<br />
<br />
====Encrypting your Emails====<br />
<br />
First of all, encryption does not always work properly with emails containing HTML. It is best to make all of the encrypted emails you wish to send plaintext. This can be ensured by going to Options in the 'New Email' window and finding Format, then clicking on "Plain-text only".<br />
<br />
Once you have chosen a recipient and title and have written your message, you can sign and encrypt the message by using the OpenPGP menu. Once that is done, simply click "Send" and your encrypted email has been sent.<br />
<br />
====Decrypting Emails====<br />
<br />
This article will not go into the details of key signing.<br />
<br />
Assuming that the email was encrypted properly, just trying to open it should result in a popup window asking you to type in your keyphrase. Do so now, and the email will be decrypted for your viewing pleasure.<br />
<br />
===Adding a Calendar with Lightning===<br />
<br />
Lightning is an extension that brings Sunbird's functionality to Thunderbird. This integrates calendar functions into Thunderbird.<br />
<br />
===Adding a Webmail Account with WebMail===<br />
<br />
This issue is covered in the article [[Webmail with Thunderbird]].<br />
<br />
===Plain-text Mode and Font Uniformity===<br />
<br />
Plain-text mode lets you view all your emails without HTML rendering. It can be configured from ''View menu > Message Body As'' option. This defaults to monospace font but font size is still inherited from original system fontconfig settings. You can uniform the default font and font size across all emails by overwriting it fontconfig user configuration. Appending below in user font config file before the closing </fontconfig> tag, will use replace monospace with Ubuntu Mono font with size of 10 pixels (provided you have already installed Ubuntu font family). Then run 'fc-cache -fv' to update system font cache.<br />
<br />
# vim /etc/fonts/conf.d/50-user.conf<br />
<match target="pattern"><br />
<test qual="any" name="family"><string>monospace</string></test><br />
<edit name="family" mode="assign" binding="same"><string>Ubuntu Mono</string></edit><br />
<!-- For Thunderbird, lowering default font size to 10 for uniformity --><br />
<edit name="pixelsize" mode="assign"><int>10</int></edit><br />
</match><br />
<br />
===Resizeable tray icon===<br />
<br />
There are a number of plugins that let Thunderbird close to tray, but most of them seem to make use of {{ic|/usr/lib/thunderbird-5.0/chrome/icons/default/default16.png}}, and if you are using a big screen and a bigger-than-standard dock (e.g. Avant Window Navigator) the icon could appear too little compared to the other tray icons.<br />
<br />
To make those plugins use the icons from {{ic|/usr/share/icons/hicolor/}} you just have to disable {{ic|/usr/lib/thunderbird-5.0/chrome/icons/default/default16.png}} renaming it for example to {{ic|default16.png.disabled}}, not forgetting to prevent pacman from reinstalling it by adding the following line to {{ic|/etc/pacman.conf}}:<br />
NoExtract = usr/lib/thunderbird-5.0/chrome/icons/default/default16.png<br />
<br />
===Links in Thunderbird do NOT open in Firefox===<br />
If you update from Firefox 3 to Firefox 4, you may no longer be able to click on a link in Thunderbird and have it open in Firefox. Especially if you are using KDE. To correct the problem, issue the following as your user, from the command line:<br />
<br />
gconftool-2 --type=string -s /desktop/gnome/url-handlers/http/command "firefox %s"<br />
gconftool-2 --type=string -s /desktop/gnome/url-handlers/https/command "firefox %s"<br />
<br />
Another option is go to the preferences => advanced => general and then select Config Editor.<br />
<br />
Search for "network.protocol-handler.warn-external"<br />
<br />
those following three were false, turn then to true, and then Thunderbird will ask you when clicking on liks which application to use. Select /usr/bin/firefox or /usr/bin/xdg-open and do not forgot to select remember my choice wink<br />
<br />
network.protocol-handler.warn-external.ftp<br />
network.protocol-handler.warn-external.http<br />
network.protocol-handler.warn-external.https<br />
<br />
the mimetype where saved on ~/.thunderbird/.default/mimeTypes.rdf<br />
<br />
=== Webmail with Thunderbird ===<br />
Please see upstream wiki: [http://kb.mozillazine.org/Using_webmail_with_your_email_client Using webmail with your email client].<br />
<br />
== Troubleshooting ==<br />
<br />
=== Segfault at startup ===<br />
<br />
A [https://bugzilla.mozilla.org/show_bug.cgi?id=292127 problem (mozilla-bug)] arises on systems configured to use ldap to fetch user information: Thunderbird segfaults at startup. A [https://bugzilla.mozilla.org/show_bug.cgi?id=292127#c7 work around] exists.<br />
<br />
=== Folder name in local language but menus in english after Thunderbird update ===<br />
<br />
First, verify that you have package <i>thunderbird-i18n-xx</i> installed, where "<i>xx</i>" is the language you want. If not, install it. If you have it already installed remove it with <code>sudo pacman -R thunderbird-i18n-xx</code> and reinstall it again.</div>Wzyboyhttps://wiki.archlinux.org/index.php?title=Lighttpd&diff=232347Lighttpd2012-10-29T02:38:53Z<p>Wzyboy: /* Basic Setup */</p>
<hr />
<div>[[cs:Lighttpd]]<br />
[[es:Lighttpd]]<br />
[[ru:Lighttpd]]<br />
[[zh-CN:Lighttpd]]<br />
[[zh-TW:Lighttpd]]<br />
[[Category:Web Server]]<br />
<br />
[http://www.lighttpd.net/ Lighttpd] is "a secure, fast, compliant, and very flexible [[Wikipedia:Web server|web-server]] that has been optimized for high-performance environments. It has a very low memory footprint compared to other webservers and takes care of cpu-load. Its advanced feature-set ([[Wikipedia:FastCGI|FastCGI]], [[Wikipedia:Common Gateway Interface|CGI]], Auth, Output-Compression, URL-Rewriting and many more) make lighttpd the perfect webserver-software for every server that suffers load problems."<br />
<br />
==Installation==<br />
Lighttpd is available in the extra repository so:<br />
# pacman -S lighttpd<br />
<br />
==Configuration==<br />
===Basic Setup===<br />
The lighttpd configuration file is: {{ic|/etc/lighttpd/lighttpd.conf}}. By default it should produce a working test page. <br />
<br />
To check your {{ic|lighttpd.conf}} for bugs you can use this command - helps finding misconfigurations very fast:<br />
<br />
$ lighttpd -t -f /etc/lighttpd/lighttpd.conf<br />
<br />
The default configuration file specifies {{ic|/srv/http/}} as the document directory served.<br />
<br />
It may be necessary to add a user and group for {{ic|http}} if you do not already have one. That user needs to have write permissions to {{ic|/var/log/lighttpd}} as well, so we will make it the owner of the folder:<br />
# groupadd http<br />
# adduser http<br />
# chown -R http /var/log/lighttpd<br />
<br />
To test the install<br />
# rc.d start lighttpd<br />
# echo 'TestMe!' >> /srv/http/index.html<br />
# chmod 755 /srv/http/index.html<br />
<br />
Then point your browser to {{ic|localhost}}, and you should see the test page.<br />
<br />
You may want to add lighttpd to the daemons list in {{ic|/etc/rc.conf}} to start the server on boot.<br />
<br />
Example configuration files are available in {{ic|/usr/share/doc/lighttpd/}}.<br />
<br />
===FastCGI===<br />
<br />
Install fcgi<br />
# pacman -S fcgi<br />
Now you have lighttpd with fcgi support. If it was that what you wanted you are all set. People that want Ruby on Rails, PHP or Python should continue.<br />
{{Box Note | New default user and group: Instead of group "nobody" lighttpd now runs as user/group "http" by default.}}<br />
<br />
First copy the example config file form {{ic|/usr/share/doc/lighttpd/config/conf.d/fastcgi.conf}} to {{ic|/etc/lighttpd/conf.d}}<br />
<br />
The following needs adding to the config file, {{ic|/etc/lighttpd/conf.d/fastcgi.conf}}<br />
server.modules += ( "mod_fastcgi" )<br />
<br />
#server.indexfiles += ( "dispatch.fcgi" ) #this is deprecated<br />
index-file.names += ( "dispatch.fcgi" ) #dispatch.fcgi if rails specified<br />
<br />
server.error-handler-404 = "/dispatch.fcgi" #too<br />
fastcgi.server = (<br />
".fcgi" => (<br />
"localhost" => ( <br />
"socket" => "/run/lighttpd/rails-fastcgi.sock",<br />
"bin-path" => "/path/to/rails/application/public/dispatch.fcgi"<br />
)<br />
)<br />
)<br />
<br />
Then in {{ic|/etc/lighttpd/lighttpd.conf}}:<br />
include "conf.d/fastcgi.conf"<br />
<br />
For PHP or Ruby on Rails see the next sections.<br />
<br />
====PHP====<br />
<br />
Install php and required modules (see also [[PHP]] and [[LAMP]]):<br />
# pacman -S php php-cgi<br />
<br />
Check that php-cgi is working {{Ic|php-cgi --version}}<br />
<br />
PHP 5.4.3 (cgi-fcgi) (built: May 8 2012 17:10:17)<br />
Copyright (c) 1997-2012 The PHP Group<br />
Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies<br />
<br />
If you get a similar output then php is installed correctly.<br />
<br />
{{Note|Please keep in mind if you receive errors like ''No input file found'' after attempting to access your php files then make sure {{ic|/etc/php/php.ini}} has the directives enabled:}}<br />
cgi.fix_pathinfo=1<br />
open_basedir = /srv/http/:/home/:/tmp/:/usr/share/pear/:/another/path:/second/path<br />
And that the files are world readable, <br />
# chmod -R 755<br />
<br />
In {{ic|/etc/lighttpd/conf.d/fastcgi.conf}} add:<br />
server.modules += ( "mod_fastcgi" )<br />
<br />
#server.indexfiles += ( "index.php" ) #this is deprecated<br />
index-file.names += ( "index.php" )<br />
<br />
fastcgi.server = (<br />
".php" => (<br />
"localhost" => ( <br />
"bin-path" => "/usr/bin/php-cgi",<br />
"socket" => "/run/lighttpd/php-fastcgi.sock",<br />
"max-procs" => 4, # default value<br />
"bin-environment" => (<br />
"PHP_FCGI_CHILDREN" => "1", # default value<br />
),<br />
"broken-scriptfilename" => "enable"<br />
))<br />
)<br />
<br />
Then in {{ic|/etc/lighttpd/lighttpd.conf}}:<br />
include "conf.d/fastcgi.conf"<br />
<br />
===== Using php-fpm =====<br />
<br />
There is no adaptive spawning anymore in recent lighttpd releases. For dynamic management of PHP processes, you can use {{Pkg|php-fpm}}.<br />
# pacman -S php-fpm<br />
# rc.d start php-fpm<br />
{{Note|You can configure the number of servers in the pool and tweak other configuration options by editing the file {{ic|/etc/php/php-fpm.conf}}. More details on ''php-fpm'' can be found on the [http://php-fpm.anight.org/ php-fpm website]. You should also note that when you make changes to /etc/php/php.ini you will need to restart php-fpm}}<br />
<br />
In {{ic|/etc/lighttpd/conf.d/fastcgi.conf}} add:<br />
server.modules += ( "mod_fastcgi" )<br />
<br />
index-file.names += ( "index.php" ) <br />
<br />
fastcgi.server = (<br />
".php" => (<br />
"localhost" => ( <br />
"socket" => "/run/php-fpm/php-fpm.sock",<br />
"broken-scriptfilename" => "enable"<br />
))<br />
)<br />
<br />
===== eAccelerator =====<br />
<br />
Install {{AUR|eaccelerator}} from the [[Arch User Repository|AUR]].<br />
<br />
Add own config file for eaccelerator:<br />
<br />
{{hc|/etc/php/conf.d/eaccelerator-own.ini|2=<br />
zlib.output_compression = On<br />
cgi.fix_pathinfo=1<br />
eaccelerator.cache_dir="/home/phpuser/eaccelerator/cache"<br />
}}<br />
<br />
{{Tip|I additionally set {{ic|safe_mod}} to {{ic|On}} in my setup, but this is not required.}}<br />
<br />
===== Try a php page =====<br />
Create the following php page, name it index.php, and place a copy in both /srv/http/ and /srv/http-ssl/html/<br />
<?php<br />
phpinfo();<br />
?><br />
Try navigating with a web browser to both the http and https address of your server. You should see the phpinfo page.<br />
<br />
Check eaccelerator caching:<br />
# ls -l /home/phpuser/eaccelerator/cache<br />
<br />
If the above command outputs the following:<br />
-rw------- 1 phpuser phpuser 456 2005-05-05 14:53 eaccelerator-277.58081<br />
-rw------- 1 phpuser phpuser 452 2005-05-05 14:53 eaccelerator-277.88081<br />
Then eaccelerator is happily caching your php scripts to help speed things up.<br />
<br />
====Ruby on Rails====<br />
Install and configure FastCGI (see [[#FastCGI]] above).<br />
<br />
Install [[ruby]] from [extra] and {{AUR|ruby-fcgi}} from [[AUR]].<br />
<br />
Follow instructions on [[RubyOnRails]].<br />
<br />
==== Python FastCGI ====<br />
Install and configure FastCGI (see [[#FastCGI]] above).<br />
<br />
Install flup:<br />
# pacman -S python-flup<br />
Configure:<br />
fastcgi.server = (<br />
".py" =><br />
(<br />
"python-fcgi" =><br />
(<br />
"socket" => "/run/lighttpd/fastcgi.python.socket",<br />
"bin-path" => "test.py",<br />
"check-local" => "disable",<br />
"max-procs" => 1,<br />
)<br />
)<br />
)<br />
Put the test.py in the root of your server (don't forget to chmod +x it)<br />
<br />
{{bc|1=<br />
#!/usr/bin/env python2<br />
<br />
def myapp(environ, start_response):<br />
print 'got request: %s' % environ<br />
start_response('200 OK', [('Content-Type', 'text/plain')])<br />
return ['Hello World!']<br />
<br />
if __name__ == '__main__':<br />
from flup.server.fcgi import WSGIServer<br />
WSGIServer(myapp).run()<br />
}}<br />
<br />
[https://bbs.archlinux.org/viewtopic.php?pid=734173#p734173 Thanks to firecat53 for his explanation]<br />
<br />
=== SSL ===<br />
Generate an SSL Cert, e.g. like that: <br />
# mkdir /etc/lighttpd/certs<br />
# openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout /etc/lighttpd/certs/www.example.com.pem -out /etc/lighttpd/certs/www.example.com.pem<br />
# chmod 600 /etc/lighttpd/certs/www.example.com.pem<br />
<br />
Edit {{ic|/etc/lighttpd/lighttpd.conf}}.<br />
To make lighttpd SSL-only (you probably need to set the server port to 443 as well)<br />
ssl.engine = "enable" <br />
ssl.pemfile = "/etc/lighttpd/certs/www.example.com.pem"<br />
To enable SSL in addition to normal HTTP<br />
$SERVER["socket"] == ":443" {<br />
ssl.engine = "enable" <br />
ssl.pemfile = "/etc/lighttpd/certs/www.example.com.pem" <br />
}<br />
If you want to serve different sites, you can change the document root inside the socket conditional:<br />
$SERVER["socket"] == ":443" {<br />
server.document-root = "/srv/ssl" # use your ssl directory here<br />
ssl.engine = "enable"<br />
ssl.pemfile = "/etc/lighttpd/certs/www.example.com.pem" # use the path where you created your pem file<br />
}<br />
or as alternative you can use the scheme conditional to distinguish between secure and normal requests. <br />
$HTTP["scheme"] == "https" {<br />
server.document-root = "/srv/ssl" # use your ssl directory here<br />
ssl.engine = "enable"<br />
ssl.pemfile = "/etc/lighttpd/certs/www.example.com.pem" # use the path where you created your pem file<br />
}<br />
Note that you cannot use the scheme conditional around ssl.engine above, since lighttpd needs to know on what port to enable SSL.<br />
<br />
===== Server Name Indication =====<br />
<br />
To use [http://en.wikipedia.org/wiki/Server_Name_Indication SNI] with lighttpd, simply put additional ssl.pemfile configuration directives inside host conditionals. It seems a default ssl.pemfile is still required, though.<br />
<br />
$HTTP["host"] == "www.example.org" {<br />
ssl.pemfile = "/etc/lighttpd/certs/www.example.org.pem" <br />
}<br />
<br />
$HTTP["host"] == "mail.example.org" {<br />
ssl.pemfile = "/etc/lighttpd/certs/mail.example.org.pem" <br />
}<br />
<br />
==== Redirect HTTP requests to HTTPS ====<br />
You should add "mod_redirect" in server.modules array in {{ic|/etc/lighttpd/lighttpd.conf}}:<br />
server.modules = (<br />
...<br />
"mod_redirect", <br />
...<br />
)<br />
<br />
$SERVER["socket"] == ":80" {<br />
$HTTP["host"] =~ "example.org" {<br />
url.redirect = ( "^/(.*)" => "https://example.org/$1" )<br />
server.name = "example.org" <br />
}<br />
}<br />
<br />
$SERVER["socket"] == ":443" {<br />
ssl.engine = "enable" <br />
ssl.pemfile = "/etc/lighttpd/ssl/server.pem" <br />
server.document-root = "..." <br />
}<br />
<br />
To redirect all hosts to their secure equivalents use the following in place of the socket 80 configuration above:<br />
$SERVER["socket"] == ":80" {<br />
$HTTP["host"] =~ "(.*)" {<br />
url.redirect = ( "^/(.*)" => "https://%1/$1" )<br />
}<br />
}<br />
<br />
To redirect all hosts for part of the site (e.g. secure or phpmyadmin):<br />
$SERVER["socket"] == ":80" {<br />
$HTTP["url"] =~ "^/secure" {<br />
url.redirect = ( "^/(.*)" => "https://example.com/$1" )<br />
}<br />
}<br />
<br />
=== Output Compression ===<br />
<br />
In {{ic|/etc/lighttpd/lighttpd.conf}} add<br />
var.cache_dir = "/var/cache/lighttpd"<br />
Then create directory for a compressed files:<br />
# mkdir /var/cache/lighttpd/compress<br />
# chown http:http /var/cache/lighttpd/compress<br />
Copy example configuration file:<br />
# mkdir /etc/lighttpd/conf.d<br />
# cp /usr/share/doc/lighttpd/config/conf.d/compress.conf /etc/lighttpd/conf.d/<br />
Add following in {{ic|/etc/lighttpd/lighttpd.conf}}:<br />
include "conf.d/compress.conf"<br />
{{Box Note | You can not do this (copy compress.conf) and add a needed content in {{ic|/etc/lighttpd/lighttpd.conf}} instead.}}<br />
<br />
==Troubleshooting==<br />
=== Lighttpd downloads .php files ===<br />
If lighttpd downloads {{ic|.php}} files instead of "initializing" them you probably missed to add these lines to your {{ic|/etc/lighttpd/lighttpd.conf}}.<br />
<br />
{{bc|1=<br />
server.modules = (<br />
"mod_fastcgi",<br />
)<br />
<br />
fastcgi.server = ( ".php" => ((<br />
"bin-path" => "/usr/bin/php-cgi", #depends where your php-cgi has been installed. Default here.<br />
"socket" => "/tmp/php.socket",<br />
"max-procs" => 2,<br />
"bin-environment" => (<br />
"PHP_FCGI_CHILDREN" => "16",<br />
"PHP_FCGI_MAX_REQUESTS" => "10000"<br />
),<br />
"bin-copy-environment" => (<br />
"PATH", "SHELL", "USER"<br />
),<br />
"broken-scriptfilename" => "enable"<br />
)))<br />
<br />
}}<br />
<br />
=== Styles (CSS) not working properly ===<br />
The default lighttpd config does not include a mimetype definition for CSS so when standards compliant browsers get text/html instead of text/css they get confused and nothing displays properly. To fix this add an entry for CSS.<br />
<br />
{{bc|1=<br />
mimetype.assign = (<br />
".html" => "text/html",<br />
".txt" => "text/plain",<br />
".jpg" => "image/jpeg",<br />
".png" => "image/png",<br />
".css" => "text/css",<br />
"" => "application/octet-stream"<br />
)<br />
}}<br />
New lines are not needed and are only used here for readability.<br />
<br />
Note: The "application/octet-stream" declaration must be at the end. It is a catch-all, and any declarations after it will be ignored.<br />
<br />
== See also ==<br />
* [http://redmine.lighttpd.net/projects/lighttpd/wiki Lighttpd wiki]</div>Wzyboyhttps://wiki.archlinux.org/index.php?title=Network_configuration&diff=228346Network configuration2012-10-13T03:01:51Z<p>Wzyboy: /* Calculating Addresses */ internal links</p>
<hr />
<div>[[Category:Networking]]<br />
[[Category:Getting and installing Arch]]<br />
[[cs:Configuring Network]]<br />
[[es:Configuring Network]]<br />
[[fr:Connexions reseau]]<br />
[[it:Configuring Network]]<br />
[[nl:Configuring Network]]<br />
[[pt:Configuring Network]]<br />
[[ro:Configurare retea]]<br />
[[ru:Configuring Network]]<br />
[[sk:Configuring Network]]<br />
[[tr:Ağ_Yapılandırması]]<br />
[[zh-CN:Configuring Network]]<br />
{{Article summary start}}<br />
{{Article summary text|A simple guide for setting up and troubleshooting network.}}<br />
{{Article summary heading|Overview}}<br />
{{Article summary text|{{Networking overview}}}}<br />
{{Article summary heading|Related}}<br />
{{Article summary wiki|Jumbo Frames}}<br />
{{Article summary wiki|Firewalls}}<br />
{{Article summary wiki|Samba}}<br />
{{Article summary wiki|Wireless Setup}}<br />
{{Article summary end}}<br />
<br />
== Check first ==<br />
<br />
Many times, the basic installation procedure has created a working network configuration. To check if this is so, use the following command:<br />
<br />
{{hc|$ ping -c 3 www.google.com|2=<br />
PING www.l.google.com (74.125.224.146) 56(84) bytes of data.<br />
64 bytes from 74.125.224.146: icmp_req=1 ttl=50 time=437 ms<br />
64 bytes from 74.125.224.146: icmp_req=2 ttl=50 time=385 ms<br />
64 bytes from 74.125.224.146: icmp_req=3 ttl=50 time=298 ms<br />
<br />
--- www.l.google.com ping statistics ---<br />
3 packets transmitted, 3 received, 0% packet loss, time 1999ms<br />
rtt min/avg/max/mdev = 298.107/373.642/437.202/57.415 ms}}<br />
<br />
{{Tip| The {{ic|-c 3}} options instruct {{ic|ping}} to do so three times. See {{ic|man ping}} for more information.}}<br />
<br />
If it works, then you may only wish to personalize your settings from the options below.<br />
<br />
If the previous command complains about unknown hosts, it means that your machine was unable to resolve this domain name. It might be related to your service provider or your router/gateway. You can try pinging a static IP address to prove that your machine has access to the Internet.<br />
<br />
{{hc|$ ping -c 3 8.8.8.8|2=<br />
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.<br />
64 bytes from 8.8.8.8: icmp_req=1 ttl=53 time=52.9 ms<br />
64 bytes from 8.8.8.8: icmp_req=2 ttl=53 time=72.5 ms<br />
64 bytes from 8.8.8.8: icmp_req=3 ttl=53 time=70.6 ms<br />
<br />
--- 8.8.8.8 ping statistics ---<br />
3 packets transmitted, 3 received, 0% packet loss, time 2002ms<br />
rtt min/avg/max/mdev = 52.975/65.375/72.543/8.803 ms}}<br />
<br />
{{Tip|8.8.8.8 is a static address that is easy to remember. It is the address of Google's primary DNS server, therefore it can be considered reliable, and is generally not blocked by content filtering systems and proxies.}}<br />
<br />
If you are able to ping this address, you may try [[Configuring_Network#For_Static_IP_Addresses|adding this nameserver to your resolv.conf file]].<br />
<br />
== Set the host name ==<br />
<br />
A host name is a unique name created to identify a machine on a network. With Arch Linux, a machine's host name is set in {{ic|/etc/hostname}}. Host names are restricted to alphanumeric characters. The hyphen ({{ic|-}}) can be used, but a host name cannot start or end with it. Length is restricted to 63 characters. <br />
<br />
Simply put your host name in {{ic|/etc/hostname}}; do not put a domain name in {{ic|/etc/hostname}}. Create the file if it does not exist. In this example, {{ic|myhostname}} is the host name:<br />
<br />
{{hc|/etc/hostname|<br />
'''myhostname''' }}<br />
<br />
After setting a host name, it is important to include the same host name in {{ic|/etc/hosts}}. This will help processes that refer to the computer by its host name to find its IP address, as well as programs that rely on the {{ic|gethostname()}} system call to determine the system's host name.<br />
<br />
Edit {{ic|/etc/hosts}} and add the same name you entered in {{ic|/etc/hostname}}:<br />
<br />
127.0.0.1 '''myhostname''' localhost<br />
::1 '''myhostname''' localhost<br />
<br />
{{Note|The fully qualified domain name (FQDN) should be '''the first item following the IP address'''. All of the names on the right side are just aliases for the left-most host/domain name. You can check if this has been properly configured by running {{ic|hostname --fqdn}}.}}<br />
<br />
To set the host name temporarily, until the next reboot, use the {{ic|hostname}} command from package {{Pkg|inetutils}} as root:<br />
<br />
# hostname archlinux<br />
<br />
== Device Driver ==<br />
<br />
=== Check Driver Status ===<br />
<br />
Udev should detect your network interface card (NIC) module and load it automatically at start up. Check the "Ethernet controller" entry in the output of {{ic|lspci -v}}. It should tell you which kernel module contains the driver of your network device. For example:<br />
<br />
{{hc|$ lspci -v|<br />
02:00.0 Ethernet controller: Attansic Technology Corp. L1 Gigabit Ethernet Adapter (rev b0)<br />
...<br />
Kernel driver in use: atl1<br />
Kernel modules: atl1}}<br />
<br />
Next, check that the driver was loaded via ''dmesg | grep <module name>''. For example:<br />
<br />
$ dmesg | grep atl1<br />
...<br />
atl1 0000:02:00.0: eth0 link is up 100 Mbps full duplex<br />
<br />
If driver loads success, skip this section. Otherwise, you will need to know which module is needed for your particular model.<br />
<br />
=== Load the device module ===<br />
<br />
Google for the right module/driver for the chip. Once you know which module to use, you can load it with:<br />
<br />
# modprobe <modulename><br />
<br />
If [[udev]] is not detecting and loading the proper module automatically during bootup, you can add it into the {{ic|MODULES}} array in {{ic|/etc/rc.conf}} so you do not need to {{ic|modprobe}} it everytime you boot. For example, if {{ic|tg3}} is the network module:<br />
<br />
MODULES=(... tg3 snd-cmipci ...)<br />
<br />
Other common modules are 8139too for cards with the Realtek chipset or {{ic|sis900}} for SiS cards.<br />
<br />
== Network Interfaces ==<br />
<br />
=== Persistent Device Names ===<br />
<br />
For motherboards that have integrated NICs, it is important to know which one is considered the primary NIC (e.g., ''eth0'') and which is considered the secondary NIC (e.g., eth1). Many configuration issues are caused by users incorrectly configuring ''eth0'' in their {{ic|/etc/rc.conf}}, when in fact, they have their Ethernet cable plugged into ''eth1''. <br />
<br />
[[Udev]] is responsible for which device gets which name. With Udev and modular network drivers, the network interface numbering is not persistent across reboots by default, because the drivers are loaded in parallel and, thus, in random order. Configuring your network connection is hard if you do not know if your card will be called {{ic|eth0}} or {{ic|eth1}}. You can fix this using {{ic|ifrename}}, see [[Rename network interfaces]]. It is also possible to manually create udev rules that assign interface names based on the interface's MAC address. See [[Udev#Network device|Persistent Device Names]].<br />
<br />
=== Get Current Device Names ===<br />
<br />
Current NIC Names can be found with the ''ip'' tool.<br />
<br />
{{hc|<nowiki># ip addr | sed '/^[0-9]/!d;s/: <.*$//'</nowiki>|<br />
1: lo<br />
2: eth1<br />
3: eth0<br />
4: firewire0}}<br />
<br />
=== Enable/disable interface ===<br />
<br />
You can activate or deactivate net interface:<br />
<br />
# ip link set <interface> up/down<br />
<br />
Check the result with {{ic|ip addr show dev eth0}}. For example:<br />
<br />
{{hc|# ip addr show dev eth0|<br />
2: eth0: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc vboxnetflt state UP qlen 1000<br />
[...]}}<br />
<br />
== Configure the IP address ==<br />
<br />
You have two options: a dynamically assigned address using DHCP or an unchanging "static" address. See [[Wikipedia:Dynamic Host Configuration Protocol|Wikipedia:DHCP]] for more information.<br />
<br />
=== Dynamic IP address===<br />
<br />
==== Manually run DHCP Client Daemon ====<br />
<br />
Please note that {{ic|dhcpcd}} is not {{ic|dhcpd}}.<br />
<br />
{{hc|$ dhcpcd eth0|<br />
dhcpcd: version 5.1.1 starting<br />
dhcpcd: eth0: broadcasting for a lease<br />
...<br />
dhcpcd: eth0: leased 192.168.1.70 for 86400 seconds}}<br />
<br />
And now {{ic|ip addr show dev <interface>}} should show your inet address.<br />
<br />
For some people, the {{ic|dhclient}} package (available in [extra]) works where {{ic|dhcpcd}} fails.<br />
<br />
==== Run DHCP at booting ====<br />
<br />
For this option, you need the {{Pkg|dhcpcd}} package (already available on most installations). To make use of it, edit {{ic|[[Rc.conf#Networking|/etc/rc.conf]]}} like this:<br />
<br />
interface="eth0"<br />
address=<br />
netmask=<br />
gateway=<br />
<br />
Only the interface has to be defined, as leaving the other options blank will set network to DHCP.<br />
<br />
If you use DHCP and you do '''not''' want your DNS servers automatically assigned every time you start your network, be sure to add the following to the last section of {{ic|/etc/dhcpcd.conf}}:<br />
<br />
nohook resolv.conf<br />
<br />
To prevent dhcpcd from adding domain name servers to {{ic|/etc/resolve.conf}} use the nooption option in {{ic|/etc/dhcpcd.conf}}:<br />
<br />
nooption domain_name_servers<br />
<br />
Then add your own DNS name server to {{ic|/etc/resolv.conf}}.<br />
<br />
You may use the {{Pkg|openresolv}} package if several different processes want to control {{ic|/etc/resolv.conf}} (e.g., {{Pkg|dhcpcd}} and a VPN client). No additional configuration for {{Pkg|dhcpcd}} is needed to use {{Pkg|openresolv}}.<br />
<br />
{{Note|It is possible to have a static IP address using {{Pkg|dhcpcd}}. Simply edit your {{ic|/etc/conf.d/dhcpcd}} file to look something like this (where {{ic|x.x.x.x}} is your desired IP address):<br />
{{bc|1=DHCPCD_ARGS="-q -s x.x.x.x"}}}}<br />
<br />
=== Static IP address ===<br />
<br />
There are various reasons why you may wish to assign static IP addresses on your network. For instance, one may gain a certain degree of predictability. Or you may not want the dhcp daemon running all the time. <br />
<br />
{{Note|If you share your Internet connection from a Windows box without a router, be sure to use static IP addresses on both computers to avoid LAN issues.}}<br />
<br />
You need:<br />
<br />
* Static IP address,<br />
* Subnet mask,<br />
* Broadcast address,<br />
* Gateway's IP address,<br />
* Name servers' IP addresses,<br />
* Domain name (unless a local LAN, in which case you can make it up).<br />
<br />
If you are running a private network, it is safe to use IP addresses in 192.168.*.* for your IP addresses, with a netmask of 255.255.255.0 and a broadcast address of 192.168.*.255. Unless your network has a router, the gateway IP address does not matter. Edit {{ic|/etc/rc.conf}} like this, substituting your own values for the IP address, netmask, broadcast, and gateway:<br />
<br />
interface=eth0<br />
address=192.168.0.2<br />
netmask=255.255.255.0<br />
broadcast=192.168.1.255<br />
gateway=192.168.22.1<br />
<br />
Edit your {{ic|/etc/resolv.conf}} like this, substituting your name servers' IP addresses and your local domain name:<br />
<br />
nameserver 61.23.173.5<br />
nameserver 61.95.849.8<br />
search example.com<br />
<br />
{{Note|Currently, you may include a maximum of 3 {{ic|nameserver}} lines.}}<br />
<br />
==== Manual assignment ====<br />
<br />
You can assign a static IP address in the console:<br />
<br />
# ip addr add <ip address>/<netmask> dev <interface><br />
<br />
For example:<br />
<br />
# ip addr add 192.168.1.2/24 dev eth0<br />
<br />
For more options, see {{ic|man ip}}.<br />
<br />
Add your gateway like so:<br />
<br />
# ip route add default via <ip address><br />
<br />
(Substitute your own gateway's IP address)<br />
<br />
For example:<br />
<br />
# ip route add default via 192.168.1.1<br />
<br />
If you the get the error "No such process", it means you have to run {{ic|# ip link set dev eth0 up}}.<br />
<br />
==== Calculating Addresses ====<br />
<br />
You can use {{ic|ipcalc}} provided by the {{Pkg|ipcalc}} package to calculate IP broadcast, network, netmask, and host ranges for more advanced configurations. For example, I use ethernet over firewire to connect a windows machine to arch. For security and network organization, I placed them on their own network and configured the netmask and broadcast so that they are the only 2 machines on it. To figure out the netmask and broadcast addresses for this, I used ipcalc, providing it with the IP of the arch firewire nic 10.66.66.1, and specifying ipcalc should create a network of only 2 hosts.<br />
<br />
{{hc|$ ipcalc -nb 10.66.66.1 -s 1|2=<br />
Address: 10.66.66.1<br />
<br />
Netmask: 255.255.255.252 = 30<br />
Network: 10.66.66.0/30<br />
HostMin: 10.66.66.1<br />
HostMax: 10.66.66.2<br />
Broadcast: 10.66.66.3<br />
Hosts/Net: 2 Class A, Private Internet}}<br />
<br />
== Load configuration ==<br />
<br />
To test your settings either reboot the computer, or as root:<br />
<br />
# rc.d restart network<br />
<br />
Try pinging your gateway, DNS server, ISP provider and other Internet sites, in that order, to detect any connection problems along the way, as in this example:<br />
<br />
$ ping -c 3 www.google.com<br />
<br />
== Additional settings ==<br />
<br />
=== ifplugd for laptops ===<br />
<br />
{{Pkg|ifplugd}} in [[Official Repositories]] is a daemon which will automatically configure your Ethernet device when a cable is plugged in and automatically unconfigure it if the cable is pulled. This is useful on laptops with onboard network adapters, since it will only configure the interface when a cable is really connected. Another use is when you just need to restart the network but do not want to restart the computer or do it from the shell.<br />
<br />
By default it is configured to work for the {{ic|eth0}} device. This and other settings like delays can be configured in {{ic|/etc/ifplugd/ifplugd.conf}}.<br />
<br />
[[Daemon#Performing daemon actions manually|Start the ifplugd daemon]] and add {{ic|ifplugd}} to your [[Daemons#Starting on Boot|DAEMONS array]] so it starts automatically on boot.<br />
<br />
Alternatively with systemd, enabling {{ic|net-auto-wired.service}} should start ifplugd on bootup if you have {{Pkg|netcfg}} installed, otherwise you can use {{ic|ifplugd@eth0.service}}.<br />
<br />
=== Bonding or LAG ===<br />
<br />
You will need {{Pkg|netcfg}} from the [[Official Repositories]], as well as the {{AUR|netcfg-bonding}} package from the [[AUR]].<br />
<br />
Edit/create the following files:<br />
<br />
{{hc|/etc/network.d/bonded|2=<br />
CONNECTION="bonding"<br />
INTERFACE="bond0"<br />
SLAVES="eth0 eth1"<br />
IP="dhcp"<br />
DHCP_TIMEOUT=10}}<br />
<br />
{{hc|/etc/rc.conf|2=<br />
MODULES=(... bonding ...)<br />
...<br />
interface=bond0 #comment other lines (address,netmask,gateway,...)<br />
...<br />
NETWORKS=(... bonded ...)<br />
...<br />
DAEMONS=(... net-profiles ...) #Replace "network".}}<br />
<br />
{{Note|To change the bonding mode (default is round robin) to, e.g, dynamic link aggregation:<br />
<br />
Create {{ic|/etc/modprobe.d/bonding.conf}}:<br />
<br />
{{hc|/etc/modprobe.d/bonding.conf|2=<br />
options bonding mode=4<br />
options bonding miimon=100}}<br />
<br />
For more information about the different bonding policies (and other driver settings) see the [http://sourceforge.net/projects/bonding/files/Documentation/ Linux Ethernet Bonding Driver HOWTO].}}<br />
<br />
To activate the new bonded ports modprobe {{ic|bonding}}, stop {{ic|network}} and start the {{ic|net-profiles}} service:<br />
<br />
# modprobe bonding<br />
# rc.d stop network<br />
# rc.d start net-profiles<br />
<br />
To check the status and bonding mode:<br />
<br />
$ cat /proc/net/bonding/bond0<br />
<br />
=== IP address aliasing ===<br />
<br />
IP aliasing is the process of adding more than one IP address to a network interface. With this, one node on a network can have multiple connections to a network, each serving a different purpose.<br />
<br />
To use IP aliasing from [[netcfg]], change {{ic|POST_UP}} and {{ic|PRE_DOWN}} commands in your network profile to set up the additional IP addresses manually. See [https://bbs.archlinux.org/viewtopic.php?pid=1036395#p1036395 here] for details.<br />
<br />
==== Example ====<br />
<br />
You will need {{Pkg|netcfg}} from the [[Official Repositories]].<br />
<br />
Prepare the configuration:<br />
<br />
{{hc|/etc/network.d/mynetwork|2=<br />
<br />
CONNECTION='ethernet'<br />
DESCRIPTION='Five different addresses on the same NIC.'<br />
INTERFACE='eth0'<br />
IP='static'<br />
ADDR='192.168.1.10'<br />
GATEWAY='192.168.1.1'<br />
DNS=('192.168.1.1')<br />
DOMAIN=''<br />
POST_UP='x=0; for i in 11 12 13 14; do ip addr add 192.168.1.$i/24 brd 192.168.1.255 dev eth0 label eth0:$((x++)); done'<br />
PRE_DOWN='for i in 11 12 13 14; do ip addr del 192.168.1.$i/24 dev eth0; done'}}<br />
<br />
{{hc|/etc/rc.conf|2=<br />
NETWORKS=(mynetwork)<br />
<br />
...<br />
<br />
DAEMONS=(... net-profiles ...)}}<br />
<br />
=== Change MAC/hardware address ===<br />
<br />
Changing your MAC address is not possible anymore via {{ic|/etc/rc.conf}}. See [[MAC Address Spoofing]] for details.<br />
<br />
== Troubleshooting ==<br />
<br />
=== Swapping computers on the cable modem ===<br />
<br />
Most domestic cable ISPs (videotron for example) have the cable modem configured to recognize only one client PC, by the MAC address of its network interface. Once the cable modem has learned the MAC address of the first PC or equipment that talks to it, it will not respond to another MAC address in any way. Thus if you swap one PC for another (or for a router), the new PC (or router) will not work with the cable modem, because the new PC (or router) has a MAC address different from the old one. To reset the cable modem so that it will recognise the new PC, you must power the cable modem off and on again. Once the cable modem has rebooted and gone fully online again (indicator lights settled down), reboot the newly connected PC so that it makes a DHCP request, or manually make it request a new DHCP lease.<br />
<br />
If this method does not work, you will need to clone the MAC address of the original machine. See also [[Configuring Network#Change MAC/hardware address|Change MAC/hardware address]].<br />
<br />
=== The TCP window scaling issue ===<br />
<br />
TCP packets contain a "window" value in their headers indicating how much data the other host may send in return. This value is represented with only 16 bits, hence the window size is at most 64Kb. TCP packets are cached for a while (they have to be reordered), and as memory is (or used to be) limited, one host could easily run out of it.<br />
<br />
Back in 1992, as more and more memory became available, [http://www.faqs.org/rfcs/rfc1323.html RFC 1323] was written to improve the situation: Window Scaling. The "window" value, provided in all packets, will be modified by a Scale Factor defined once, at the very beginning of the connection.<br />
<br />
That 8-bit Scale Factor allows the Window to be up to 32 times higher than the initial 64Kb.<br />
<br />
It appears that some broken routers and firewalls on the Internet are rewriting the Scale Factor to 0 which causes misunderstandings between hosts.<br />
<br />
The Linux kernel 2.6.17 introduced a new calculation scheme generating higher Scale Factors, virtually making the aftermaths of the broken routers and firewalls more visible. <br />
<br />
The resulting connection is at best very slow or broken.<br />
<br />
==== How to diagnose the problem ====<br />
<br />
First of all, let's make it clear: this problem is odd. In some cases, you will not be able to use TCP connections (HTTP, FTP, ...) at all and in others, you will be able to communicate with some hosts (very few).<br />
<br />
When you have this problem, the {{ic|dmesg}}'s output is OK, logs are clean and {{ic|ip addr}} will report normal status... and actually everything appears normal.<br />
<br />
If you cannot browse any website, but you can ping some random hosts, chances are great that you're experiencing this issue: ping uses ICMP and is not affected by TCP issues.<br />
<br />
You can try to use Wireshark. You might see successful UDP and ICMP communications but unsuccessful TCP communications (only to foreign hosts).<br />
<br />
==== How to fix it (The bad way) ====<br />
<br />
To fix it the bad way, you can change the tcp_rmem value, on which Scale Factor calculation is based. Although it should work for most hosts, it is not guaranteed, especially for very distant ones.<br />
<br />
# echo "4096 87380 174760" > /proc/sys/net/ipv4/tcp_rmem<br />
<br />
==== How to fix it (The good way) ====<br />
<br />
Simply disable Window Scaling. Since Window Scaling is a nice TCP feature, it may be uncomfortable to disable it, especially if you cannot fix the broken router. There are several ways to disable Window Scaling, and it seems that the most bulletproof way (which will work with most kernels) is to add the following line to {{ic|/etc/sysctl.conf}} (see also [[sysctl]])<br />
<br />
net.ipv4.tcp_window_scaling = 0<br />
<br />
==== How to fix it (The best way) ====<br />
<br />
This issue is caused by broken routers/firewalls, so let's change them. Some users have reported that the broken router was their very own DSL router.<br />
<br />
==== More about it ====<br />
<br />
This section is based on the LWN article [http://lwn.net/Articles/92727/ TCP window scaling and broken routers] and a Kernel Trap article: [http://kerneltrap.org/node/6723 Window Scaling on the Internet].<br />
<br />
There are also several relevant threads on the LKML.<br />
<br />
=== Realtek no link / WOL issue ===<br />
<br />
Users with Realtek 8168 8169 8101 8111(C) based NICs (cards / and on-board) may notice an issue where the NIC seems to be disabled on boot and has no Link light. This can usually be found on a dual boot system where Windows is also installed. It seems that using the offical Realtek drivers (dated anything after May 2007) under Windows is the cause. These newer drivers disable the Wake-On-LAN feature by disabling the NIC at Windows shutdown time, where it will remain disabled until the next time Windows boots. You will be able to notice if this issue is affecting you if the Link light remains off until Windows boots up; during Windows shutdown the Link light will switch off. Normal operation should be that the link light is always on as long as the system is on, even during POST. This issue will also affect other operative systems without newer drivers (eg. Live CDs). Here are a few fixes for this issue:<br />
<br />
==== Method 1 - Rollback/change Windows driver ====<br />
<br />
You can roll back your Windows NIC driver to the Microsoft provided one (if available), or roll back/install an official Realtek driver pre-dating May 2007 (may be on the CD that came with your hardware).<br />
<br />
==== Method 2 - Enable WOL in Windows driver ====<br />
<br />
Probably the best and the fastest fix is to change this setting in the Windows driver. This way it should be fixed system-wide and not only under Arch (eg. live CDs, other operative systems). In Windows, under Device Manager, find your Realtek network adapter and double-click it. Under the Advanced tab, change "Wake-on-LAN after shutdown" to Enable.<br />
<br />
In Windows XP (example)<br />
Right click my computer<br />
--> Hardware tab<br />
--> Device Manager<br />
--> Network Adapters<br />
--> "double click" Realtek ...<br />
--> Advanced tab<br />
--> Wake-On-Lan After Shutdown<br />
--> Enable<br />
<br />
{{Note|Newer Realtek Windows drivers (tested with ''Realtek 8111/8169 LAN Driver v5.708.1030.2008'', dated 2009/01/22, available from GIGABYTE) may refer to this option slightly differently, like ''Shutdown Wake-On-LAN --> Enable''. It seems that switching it to {{ic|Disable}} has no effect (you will notice the Link light still turns off upon Windows shutdown). One rather dirty workaround is to boot to Windows and just reset the system (perform an ungraceful restart/shutdown) thus not giving the Windows driver a chance to disable LAN. The Link light will remain on and the LAN adapter will remain accessible after POST - that is until you boot back to Windows and shut it down properly again.}}<br />
<br />
==== Method 3 - Newer Realtek Linux driver ====<br />
<br />
Any newer driver for these Realtek cards can be found for Linux on the realtek site. (untested but believed to also solve the problem).<br />
<br />
==== Method 4 - Enable ''LAN Boot ROM'' in BIOS/CMOS ====<br />
<br />
It appears that setting ''Integrated Peripherals --> Onboard LAN Boot ROM --> Enabled'' in BIOS/CMOS reactivates the Realtek LAN chip on system boot-up, despite the Windows driver disabling it on OS shutdown.<br />
<br><small>This was tested successfully multiple times with GIGABYTE system board GA-G31M-ES2L with BIOS version F8 released on 2009/02/05. YMMV.</small><br />
<br />
=== DLink G604T/DLink G502T DNS issue ===<br />
<br />
Users with a DLink G604T/DLink G502T router, using DHCP and have firmware v2.00+ (typically users with AUS firmware) may have issues with certain programs not resolving the DNS. One of these programs are unfortunatley pacman. The problem is basically the router in certain situations is not sending the DNS properly to DHCP, which causes programs to try and connect to servers with an IP address of 1.0.0.0 and fail with a connection timed out error<br />
<br />
==== How to diagnose the problem ====<br />
<br />
The best way to diagnose the problem is to use Firefox/Konqueror/links/seamonkey and to enable wget for pacman. If this is a fresh install of Arch Linux, then you may want to consider installing {{ic|links}} through the live CD.<br />
<br />
Firstly, enable wget for pacman (since it gives us info about pacman when it is downloading packages)<br />
Open {{ic|/etc/pacman.conf}} with your favourite editor and uncomment the following line (remove the # if it is there)<br />
<br />
XferCommand=/usr/bin/wget --passive-ftp -c -O %o %u<br />
<br />
While you are editing {{ic|/etc/pacman.conf}}, check the default mirror that pacman uses to download packages.<br />
<br />
Now open up the default mirror in an Internet browser to see if the mirror actually works. If it does work, then do {{ic|pacman -Syy}} (otherwise pick another working mirror and set it to the pacman default). If you get something similar to the following (notice the 1.0.0.0),<br />
<br />
<nowiki>ftp://mirror.pacific.net.au/linux/archlinux/extra/os/i686/extra.db.tar.gz</nowiki><br />
=> '/var/lib/pacman/community.db.tar.gz.part'<br />
Resolving mirror.pacific.net.au... 1.0.0.0<br />
<br />
then you most likely have this problem. The 1.0.0.0 means it is unable to resolve DNS, so we must add it to {{ic|/etc/resolv.conf}}.<br />
<br />
==== How to fix it ====<br />
<br />
Basically what we need to do is to manually add the DNS servers to our {{ic|/etc/resolv.conf}} file. The problem is that DHCP automatically deletes and replaces this file on boot, so we need to edit {{ic|/etc/conf.d/dhcpcd}} and change the flags to stop DHCP from doing this.<br />
<br />
When you open {{ic|/etc/conf.d/dhcpcd}}, you should see something close to the following:<br />
<br />
DHCPCD_ARGS="-t 30 -h $HOSTNAME"<br />
<br />
Add the -R flag to the arguments, e.g.,<br />
<br />
DHCPCD_ARGS="-R -t 30 -h $HOSTNAME"<br />
<br />
{{Note|1=If you are using {{Pkg|dhcpcd}} >= 4.0.2, the {{ic|-R}} flag has been deprecated. Please see the [[#For DHCP assigned IP address]] section for information on how to use a custom {{ic|/etc/resolv.conf}} file.}}<br />
<br />
Save and close the file; now open {{ic|/etc/resolv.conf}}. You should see a single nameserver (most likely 10.1.1.1). This is the gateway to your router, which we need to connect to in order to get the DNS servers of your ISP. Paste the IP address into your browser and log in to your router. Go to the DNS section, and you should see an IP address in the Primary DNS Server field; copy it and paste it as a nameserver '''ABOVE''' the current gateway one.<br />
<br />
For example, {{ic|/etc/resolv.conf}} should look something along the lines of:<br />
<br />
nameserver 10.1.1.1<br />
<br />
If my primary DNS server is 211.29.132.12, then change {{ic|/etc/resolv.conf}} to:<br />
<br />
nameserver 211.29.132.12<br />
nameserver 10.1.1.1<br />
<br />
Now restart the network daemon by doing {{ic|rc.d restart network}} and do {{ic|pacman -Syy}}. If it syncs correctly with the server, then the problem is solved.<br />
<br />
==== More about it ====<br />
<br />
This is the whirlpool forum (Australian ISP community) which talks about and gives the same solution to the problem:<br />
<br />
http://forums.whirlpool.net.au/forum-replies-archive.cfm/461625.html<br />
<br />
=== Check DHCP problem by releasing IP first ===<br />
<br />
Problem may occur when DHCP get wrong IP assignment. For example when two routers are tied together through VPN. The router that is connected to me by VPN may assigning IP address. To fix it. On a console, as root, release IP address:<br />
<br />
# dhcpcd -k<br />
<br />
Then request a new one:<br />
<br />
# dhcpcd<br />
<br />
Maybe you had to run those two commands many times.</div>Wzyboyhttps://wiki.archlinux.org/index.php?title=ACPI_modules&diff=226397ACPI modules2012-10-01T14:01:29Z<p>Wzyboy: /* How to select the correct ones */</p>
<hr />
<div>[[Category:Power management]]<br />
[[it:ACPI modules]]<br />
[[zh-CN:ACPI modules]]<br />
From [http://www.acpi.info/ ACPI site]:<br />
:''ACPI (Advanced Configuration and Power Interface) is an open industry specification co-developed by Hewlett-Packard, Intel, Microsoft, Phoenix, and Toshiba.''<br />
<br />
ACPI modules are kernel modules for different ACPI parts. They enable special ACPI functions or add information to {{ic|/proc}} or {{ic|/sys}}. These information can be parsed by [[acpid]] for events or other monitoring applications.<br />
<br />
==Which modules are available?==<br />
This is a small list and summary of ACPI kernel modules:<br />
* ac (power connector status) => autoloaded during boot initscripts-0.8-7!<br />
* asus-laptop (useful on ASUS/medion laptops)<br />
* battery (battery status) => autoloaded during boot initscripts-0.8-7!<br />
* bay (bay status)<br />
* button (catch button events, like LID or POWER BUTTON) => autoloaded during boot initscripts-0.8-7!<br />
* container (container status)<br />
* dock (docking station status)<br />
* fan (fan status) => autoloaded during boot initscripts-0.8-7<br />
* i2c_ec (EC SMBUs driver)<br />
* ibm_acpi (useful on IBM laptops) (thinkpad_acpi since 2.6.22)<br />
* processor (processor status) => built into kernel 2.6.20.7-2!<br />
* sbs (smart battery status)<br />
* thermal (status of thermal sensors) => built into kernel 2.6.20.7-2!<br />
* toshiba_acpi (useful for Toshiba laptops)<br />
* video (status of video devices)<br />
<br />
complete list of your running kernel:<br />
{{hc|$ ls -l /usr/lib/modules/$(uname -r)/kernel/drivers/acpi|<nowiki><br />
total 112<br />
-rw-r--r-- 1 root root 2808 Aug 29 23:58 ac.ko.gz<br />
-rw-r--r-- 1 root root 3021 Aug 29 23:58 acpi_ipmi.ko.gz<br />
-rw-r--r-- 1 root root 3354 Aug 29 23:58 acpi_memhotplug.ko.gz<br />
-rw-r--r-- 1 root root 4628 Aug 29 23:58 acpi_pad.ko.gz<br />
drwxr-xr-x 2 root root 4096 Aug 29 23:59 apei<br />
-rw-r--r-- 1 root root 7120 Aug 29 23:58 battery.ko.gz<br />
-rw-r--r-- 1 root root 3700 Aug 29 23:58 button.ko.gz<br />
-rw-r--r-- 1 root root 2181 Aug 29 23:58 container.ko.gz<br />
-rw-r--r-- 1 root root 1525 Aug 29 23:58 custom_method.ko.gz<br />
-rw-r--r-- 1 root root 1909 Aug 29 23:58 ec_sys.ko.gz<br />
-rw-r--r-- 1 root root 2001 Aug 29 23:58 fan.ko.gz<br />
-rw-r--r-- 1 root root 1532 Aug 29 23:58 hed.ko.gz<br />
-rw-r--r-- 1 root root 3241 Aug 29 23:58 pci_slot.ko.gz<br />
-rw-r--r-- 1 root root 17742 Aug 29 23:58 processor.ko.gz<br />
-rw-r--r-- 1 root root 3073 Aug 29 23:58 sbshc.ko.gz<br />
-rw-r--r-- 1 root root 7098 Aug 29 23:58 sbs.ko.gz<br />
-rw-r--r-- 1 root root 6311 Aug 29 23:58 thermal.ko.gz<br />
-rw-r--r-- 1 root root 8891 Aug 29 23:58 video.ko.gz<br />
</nowiki>}}<br />
<br />
==How to select the correct ones== <br />
You have to try yourself which module works for your machine:<br />
{{bc|# modprobe <yourmodule>}}<br />
then check if the module is supported on your hardware by using<br />
{{bc|$ dmesg}}<br />
{{Tip| It may help to add a grep text search to narrow your results.}}<br />
$ dmesg | grep acpi<br />
[ 0.000000] ACPI: LAPIC (acpi_id[0x00] lapic_id[0x00] enabled)<br />
[ 0.000000] ACPI: LAPIC (acpi_id[0x01] lapic_id[0x04] enabled)<br />
[ 0.000000] ACPI: LAPIC (acpi_id[0x02] lapic_id[0x01] enabled)<br />
[ 0.000000] ACPI: LAPIC (acpi_id[0x03] lapic_id[0x05] enabled)<br />
[ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x00] high edge lint[0x1])<br />
[ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x01] high edge lint[0x1])<br />
[ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x02] high edge lint[0x1])<br />
[ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x03] high edge lint[0x1])<br />
[ 5.066752] ACPI: acpi_idle yielding to intel_idle<br />
[ 5.438998] acpi device:04: registered as cooling_device4<br />
<br />
Add the working ones to your MODULES=() array in {{ic|/etc/rc.conf}}<br />
<br />
On laptops, basically these ones should work:<br />
* ac<br />
* battery<br />
* button<br />
* fan<br />
<br />
On desktops/servers, this one should work:<br />
* button<br />
<br />
== Getting Information == <br />
To read out battery information you can simply [[pacman|install]] package {{pkg|acpi}} in [[Official Repositories]] and run:<br />
acpi -i<br />
<br />
Using /proc to store ACPI information has been discouraged and deprecated since 2.6.24. The same data is available in /sys now and interested parties can (should) subscribe to ACPI events from the kernel via netlink.E.g for battery:<br />
/sys/class/power_supply/BAT0/<br />
<br />
==Troubleshooting==<br />
===DSDT fix===<br />
If problems with power management persist despite having loaded the proper modules, a Linux-unfriendly [http://en.wikipedia.org/wiki/DSDT#ACPI_Tables DSDT] might be the cause. See the wiki article on [[DSDT]].<br />
===ACPI fix for notebook===<br />
Sometimes you see ACPI: EC: input buffer is not empty, aborting transaction, it is problem with acpi: there are two way:<br />
<br />
1. "Easy" acpi=off in kernel line in menu.lst (if using GRUB), but you kill all acpi function like battery charge.<br />
<br />
2. "Hard" build your kernel with patch [https://bugs.launchpad.net/ubuntu/+source/linux/+bug/578506 bugs.launchpad.net].</div>Wzyboyhttps://wiki.archlinux.org/index.php?title=ACPI_modules&diff=226396ACPI modules2012-10-01T14:00:30Z<p>Wzyboy: /* How to select the correct ones */</p>
<hr />
<div>[[Category:Power management]]<br />
[[it:ACPI modules]]<br />
[[zh-CN:ACPI modules]]<br />
From [http://www.acpi.info/ ACPI site]:<br />
:''ACPI (Advanced Configuration and Power Interface) is an open industry specification co-developed by Hewlett-Packard, Intel, Microsoft, Phoenix, and Toshiba.''<br />
<br />
ACPI modules are kernel modules for different ACPI parts. They enable special ACPI functions or add information to {{ic|/proc}} or {{ic|/sys}}. These information can be parsed by [[acpid]] for events or other monitoring applications.<br />
<br />
==Which modules are available?==<br />
This is a small list and summary of ACPI kernel modules:<br />
* ac (power connector status) => autoloaded during boot initscripts-0.8-7!<br />
* asus-laptop (useful on ASUS/medion laptops)<br />
* battery (battery status) => autoloaded during boot initscripts-0.8-7!<br />
* bay (bay status)<br />
* button (catch button events, like LID or POWER BUTTON) => autoloaded during boot initscripts-0.8-7!<br />
* container (container status)<br />
* dock (docking station status)<br />
* fan (fan status) => autoloaded during boot initscripts-0.8-7<br />
* i2c_ec (EC SMBUs driver)<br />
* ibm_acpi (useful on IBM laptops) (thinkpad_acpi since 2.6.22)<br />
* processor (processor status) => built into kernel 2.6.20.7-2!<br />
* sbs (smart battery status)<br />
* thermal (status of thermal sensors) => built into kernel 2.6.20.7-2!<br />
* toshiba_acpi (useful for Toshiba laptops)<br />
* video (status of video devices)<br />
<br />
complete list of your running kernel:<br />
{{hc|$ ls -l /usr/lib/modules/$(uname -r)/kernel/drivers/acpi|<nowiki><br />
total 112<br />
-rw-r--r-- 1 root root 2808 Aug 29 23:58 ac.ko.gz<br />
-rw-r--r-- 1 root root 3021 Aug 29 23:58 acpi_ipmi.ko.gz<br />
-rw-r--r-- 1 root root 3354 Aug 29 23:58 acpi_memhotplug.ko.gz<br />
-rw-r--r-- 1 root root 4628 Aug 29 23:58 acpi_pad.ko.gz<br />
drwxr-xr-x 2 root root 4096 Aug 29 23:59 apei<br />
-rw-r--r-- 1 root root 7120 Aug 29 23:58 battery.ko.gz<br />
-rw-r--r-- 1 root root 3700 Aug 29 23:58 button.ko.gz<br />
-rw-r--r-- 1 root root 2181 Aug 29 23:58 container.ko.gz<br />
-rw-r--r-- 1 root root 1525 Aug 29 23:58 custom_method.ko.gz<br />
-rw-r--r-- 1 root root 1909 Aug 29 23:58 ec_sys.ko.gz<br />
-rw-r--r-- 1 root root 2001 Aug 29 23:58 fan.ko.gz<br />
-rw-r--r-- 1 root root 1532 Aug 29 23:58 hed.ko.gz<br />
-rw-r--r-- 1 root root 3241 Aug 29 23:58 pci_slot.ko.gz<br />
-rw-r--r-- 1 root root 17742 Aug 29 23:58 processor.ko.gz<br />
-rw-r--r-- 1 root root 3073 Aug 29 23:58 sbshc.ko.gz<br />
-rw-r--r-- 1 root root 7098 Aug 29 23:58 sbs.ko.gz<br />
-rw-r--r-- 1 root root 6311 Aug 29 23:58 thermal.ko.gz<br />
-rw-r--r-- 1 root root 8891 Aug 29 23:58 video.ko.gz<br />
</nowiki>}}<br />
<br />
==How to select the correct ones== <br />
You have to try yourself which module works for your machine:<br />
{{bc|# modprobe <yourmodule>}}<br />
then check if the module is supported on your hardware by using<br />
{{bc|$ dmesg}}<br />
{{Tip| It may help to add a grep text search to narrow your results.}}<br />
$ dmesg | grep acpi<br />
[ 0.000000] ACPI: LAPIC (acpi_id[0x00] lapic_id[0x00] enabled)<br />
[ 0.000000] ACPI: LAPIC (acpi_id[0x01] lapic_id[0x04] enabled)<br />
[ 0.000000] ACPI: LAPIC (acpi_id[0x02] lapic_id[0x01] enabled)<br />
[ 0.000000] ACPI: LAPIC (acpi_id[0x03] lapic_id[0x05] enabled)<br />
[ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x00] high edge lint[0x1])<br />
[ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x01] high edge lint[0x1])<br />
[ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x02] high edge lint[0x1])<br />
[ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x03] high edge lint[0x1])<br />
[ 5.066752] ACPI: acpi_idle yielding to intel_idle<br />
[ 5.438998] acpi device:04: registered as cooling_device4<br />
<br />
Add the working ones to your MODULES=() array in {{ic|/etc/rc.conf}}<br />
<br />
On laptops, basically these ones should work:<br />
* ac<br />
* battery<br />
* button<br />
* fan<br />
<br />
On desktops/servers, this one should work:<br />
* button<br />
<br />
== Getting Information == <br />
To read out battery information you can simply [[pacman|install]] package {{pkg|acpi}} in [[Official Repositories]] and run:<br />
acpi -i<br />
<br />
Using /proc to store ACPI information has been discouraged and deprecated since 2.6.24. The same data is available in /sys now and interested parties can (should) subscribe to ACPI events from the kernel via netlink.E.g for battery:<br />
/sys/class/power_supply/BAT0/<br />
<br />
==Troubleshooting==<br />
===DSDT fix===<br />
If problems with power management persist despite having loaded the proper modules, a Linux-unfriendly [http://en.wikipedia.org/wiki/DSDT#ACPI_Tables DSDT] might be the cause. See the wiki article on [[DSDT]].<br />
===ACPI fix for notebook===<br />
Sometimes you see ACPI: EC: input buffer is not empty, aborting transaction, it is problem with acpi: there are two way:<br />
<br />
1. "Easy" acpi=off in kernel line in menu.lst (if using GRUB), but you kill all acpi function like battery charge.<br />
<br />
2. "Hard" build your kernel with patch [https://bugs.launchpad.net/ubuntu/+source/linux/+bug/578506 bugs.launchpad.net].</div>Wzyboyhttps://wiki.archlinux.org/index.php?title=IOS&diff=223945IOS2012-09-19T05:33:05Z<p>Wzyboy: /* Changing iPod Mountpoint */</p>
<hr />
<div>{{Lowercase_title}}<br />
[[Category:Sound]]<br />
{{Article summary start}}<br />
{{Article summary text|<br />
The purpose of this article is to demonstrate the use of an iPod/idevices under Arch Linux.}}<br />
{{Article summary heading|Related}}<br />
{{Article summary wiki|Audiobook}}<br />
{{Article summary end}}<br />
== Changing iPod Mountpoint ==<br />
<br />
Traditional iPods are accessed just like a normal USB storage device containing a vfat file system (in rare cases {{ic|hfsplus}}), and can be [[USB Storage Devices | accessed as such]]. See the [[USB Storage Devices]] article for detailed instructions.<br />
<br />
If udisks2 is running, it will mount an attached iPod to {{ic|/run/media/''$USER''/''iPod name''}} (the older udisks will use {{ic|/media/''&lt;iPod name&gt;''}}).<br />
<br />
If the volume label of your iPod is long, or contains a mixture of spaces, and/or lower-case and capital letters, it may present an inconvenience. You may easily change the volume label for more expedient access using {{ic|dosfslabel}} from the {{pkg|dosfstools}} package:<br />
<br />
* Get and confirm the current volume label:<br />
# dosfslabel /dev/sd''XY''<br />
* Set the new volume label:<br />
# dosfslabel /dev/sd''XY'' ArchPod<br />
* Unmount the device:<br />
$ udisksctl unmount -b /dev/sd''XY''<br />
* Mount it again:<br />
$ udisksctl mount -b /dev/sd''XY''<br />
where {{ic|/dev/sdxx}} is the current device node of your iPod.<br />
<br />
== Importing videos and pictures ==<br />
<br />
Both videos and photos can be found in typically in {{ic|''&lt;mountpoint&gt;''/DCIM/100APPLE}}.<br />
<br />
=== HTML5 videos ===<br />
<br />
Typically you want to convert MOV files to a HTML5 video format like OGV using ffmpeg2theora. Note that the creation date metadata is not in the converted video, so you need to use a script like:<br />
<br />
find -name "*.MOV" | while read mov<br />
do<br />
d=$(gst-discoverer-0.10 -v $mov | awk '/datetime:/{print $2}' | tr -d \")<br />
base=${mov%.*}<br />
if test -f $base.ogv<br />
then<br />
touch -d${d} $base.ogv<br />
ls -l $base.ogv<br />
else<br />
echo $base.ogv missing<br />
fi<br />
done<br />
<br />
And use {{ic|cp -a}} or {{ic|rsync -t}} in order to preserve the file's date & time.<br />
<br />
=== Importing pictures and deleting them ===<br />
<br />
You can move photos and videos out of {{ic|''&lt;mountpoint&gt;''/DCIM/100APPLE}}, however you need to trigger a rebuild of the "Camera Roll" database by deleting the old databases.<br />
<br />
PhotoData$ sudo rm Photos* com.apple.photos.caches_metadata.plist<br />
<br />
== Converting video for iPod ==<br />
<br />
=== Gen 5/5.5 ===<br />
<br />
=== Handbrake ===<br />
<br />
[http://handbrake.fr/ Handbrake] is a nifty tool with presets for a variety of iPod versions. CLI and GTK versions are available from pacman as {{pkg|handbrake-cli}} and {{pkg|handbrake}} respectively.<br />
<br />
If you do decide to take the CLI way, a good guide is available at http://trac.handbrake.fr/wiki/CLIGuide.<br />
<br />
==== DVD to iPod ====<br />
'''Get with:''' http://diveintomark.org/public/2007/06/podencoder.txt{{Linkrot|2012|01|23}}<br><br />
'''Depends on:''' aur/gpac mplayer<br />
<br />
Has detailed help, and is fairly self explanatory.<br />
<br />
Mirrored at http://src.iphitus.org/scripts/podencoder.txt{{Linkrot|2011|09|04}}<br />
<br />
An alternative is to use a method suggested at [DVD Ripping] then use one of the programs listed below to convert that to an iPod-friendly format.<br />
<br />
==== Video File to iPod ====<br />
'''Get with:''' http://src.iphitus.org/scripts/mp4ize.txt{{Linkrot|2011|09|04}}<br><br />
'''Depends on:''' {{pkg|mplayer}}<br />
<br />
I originally found this script here: http://thomer.com/howtos/ipod_video.html http://thomer.com/howtos/mp4ize <br />
It has been modified to properly handle file names with unusual characters. Thanks to Thomer for the great script.<br />
<br />
=== More Advanced/Configurable Methods ===<br />
<br />
==== Avidemux ====<br />
[[pacman|Install]] the {{pkg|avidemux}} package from the official repositories.<br />
<br />
This can convert to mp4 files. If you enforce a hard max of bit rate @ 700ish and keep the video size to 720x480 or 320x240 than it works fine for video file exporting.<br />
<br />
==== Mencoder ====<br />
<br />
[[pacman|Install]] the {{pkg|mplayer}} package from the official repositories.<br />
<br />
Has ''extremely'' comprehensive configuration support, which will be able to spit out iPod-compatible video files. Check out {{ic|man mencoder}}; a lot of MPlayer opts will also affect encoding.<br />
<br />
A basic guide is also available at [[Mencoder]].<br />
<br />
An example command to encode iPhone/iPod Touch-compatible video:<br />
<br />
mencoder INPUT -o output.mp4 \<br />
-vf scale=480:-10,harddup \<br />
-oac faac -faacopts mpeg=4:object=2:raw:br=128 \<br />
-of lavf -lavfopts format=mp4 \<br />
-ovc x264 -x264encopts nocabac:level_idc=30:bframes=0<br />
<br />
==== FFMpeg ====<br />
<br />
[[pacman|Install]] the {{pkg|ffmpeg}} package from the official repositories.<br />
<br />
Another encoder with comprehensive configuration support. Example command to encode for 5G iPod:<br />
<br />
ffmpeg -vcodec xvid -b 300 -qmin 3 -qmax 5 -bufsize 4096 \<br />
-g 300 -acodec aac -ab 96 -i INPUT -s 320x240 \<br />
-aspect 4:3 output.mp4<br />
<br />
or iPod Touch/iPhone compatible video output:<br />
<br />
ffmpeg -f mp4 -vcodec mpeg4 -maxrate 1000 -b 700 -qmin 3 -qmax 5\<br />
-bufsize 4096 -g 300 -acodec aac -ab 192 -s 480×320 -aspect 4:3 -i INPUT output.mp4<br />
<br />
== iPhone/iPod Touch ==<br />
<br />
=== Introduction ===<br />
By default, neither the iPhone nor the iPod Touch present mass storage capability over USB, though there exist two solutions for accessing your files.<br />
<br />
The first is to mount your device through the FUSE file system SSHFS. This requires jailbreaking, which can be done on any major OS using e.g. [http://www.ijailbreak.com/how-to/how-to-jailbreak-iphone-4s-absinthe-linux/ Absinthe] for recent iOS versions. After jailbreaking, an SSH server will also need to be installed on the device, which can be done through the Cydia program, installed on the device during the jailbreak process.<br />
<br />
The second is to use a different FUSE file system called [http://www.libimobiledevice.org/ iFuse], which allows you to mount your device through USB, as you normally would. This method requires no hacking and is in general the better solution, though be aware that the software is still under heavy development. As of late, however, it has proven to be rather reliable and stable.<br />
<br />
{{Note|The current releases of {{pkg|libgpod}} and {{pkg|gtkpod}} support the iPod Touch and the iPhone OS 3.1.x up to iOS 4.3.x. It is possible to transfer pictures and music without limitations.}}<br />
<br />
Refer to this page:[https://help.ubuntu.com/community/PortableDevices/iPhone]<br />
<br />
=== Making Friends with the Device ===<br />
<br />
==== The SSHFS Way ====<br />
<br />
After this the easiest way to properly initialise a few things on the device's side is with the [http://launchpad.net/ipod-convenience iPod convenience script]. This is available in the AUR as {{AUR|ipod-convenience}}<br />
<br />
Next do {{ic|modprobe fuse}} to actually load the fuse module. You may also want to add it to your MODULES array in {{ic|/etc/rc.conf}} to have it loaded on boot.<br />
<br />
A few things may need changing in the script, depending on your setup. If you do not use sudo, replace:<br />
sudo lsusb -v -d 05ac: | grep iSerial | awk '{print $3}' | cut -b1-16 | xargs printf "FirewireGuid: 0x%s" >> $MOUNTPOINT/iTunes_Control/Device/SysInfo<br />
with:<br />
su -c "lsusb -v -d 05ac: | grep iSerial | awk '{print $3}' | cut -b1-16 | xargs printf \"FirewireGuid: 0x%s\" >> $MOUNTPOINT/iTunes_Control/Device/SysInfo"<br />
in the file /usr/share/ipod-convenience/mount-umount. You may also need to replace:<br />
PROCESS=`ssh root@$IPADDRESS ps x | grep MobileMusicPlayer | grep -v grep | awk '{print $1}'`<br />
with:<br />
PROCESS=`ssh root@$IPADDRESS ps ax | grep MobileMusicPlayer | grep -v grep | awk '{print $1}'`<br />
(I'm not sure under what circumstances this is necessary; it was on my iPod Touch running 2.2.1, and it will not have any adverse affect under other firmware version)<br />
<br />
After that, edit the {{ic|/etc/default/ipod-convenience}} file with details of your device's IP address, and create the mount point, which is {{ic|/media/ipod}} by default (make sure to set the permissions correctly if you want it accessible by a regular user)<br />
<br />
To actually mount the device, run {{ic|ipod-touch-mount}} or {{ic|iphone-mount}} (they both do exactly the same thing so it doesn't matter which). This should prompt for the root password of the device twice, which is 'alpine' by default in firmware versions 1.1 and up. This will need to be done every time you want to sync. (This can be done without having to type the password each time by using SSH keys - see [[Using SSH Keys]] for more information)<br />
<br />
==== The iFuse Way ====<br />
{{Note|If using an iPad/iPad2 that has a screen password, one must unlock the device to gain access through the USB interface.}}<br />
{{Note|The current version of ifuse is unable to mount an iPad2 using iOS v5.0.1. The git version of libimobiledevice in AUR works with an iPod using iOS v5.1.1}}<br />
<br />
You will need to install '''usbmuxd''', '''libplist''', '''libimobiledevice''', '''ifuse'''. You can pull in all four with:<br />
# pacman -S ifuse<br />
Now make sure that you have the fuse module loaded by doing {{ic|modprobe fuse}}, assuming that you do not have it in {{ic|/etc/rc.conf}} already.<br />
<br />
You can now mount your device. Make sure it is unlocked before you plug it in, or it won't be recognized.<br />
# ifuse <mountpoint><br />
The mountpoint field is where you want to have it mounted.<br />
<br />
And you're done! You should be able to point your syncing software of choice to the mount point and be able to transfer files.<br />
<br />
To unmount your device:<br />
# umount <mountpoint><br />
<br />
==== Generating HashInfo file ====<br />
If you have not previously synced your device using iTunes specifically, you will get error messages telling you that the HashInfo file is missing. This can be fixed by making an iTunes installation on MacOS or Windows create it (by plugging in the iPod there). Alternatively you can create this file yourself, instructions can be found on [http://ihash.marcansoft.com/ this website].<br />
<br />
=== Unobfuscating the Database ===<br />
<br />
Since firmware version 2.0, Apple has obfuscated the music database. If you are using recent firmware, the file {{ic|/System/Library/Lockdown/Checkpoint.xml}} can be modified to enable use of the older, non-obfuscated database. Replace:<br />
<key>DBVersion</key><br />
<integer>4</integer><br />
with:<br />
<key>DBVersion</key><br />
<integer>2</integer><br />
Then reboot your device.<br />
<br />
If syncing fails with "ERROR: Unsupported checksum type '0' in cbk file generation!", you may need to leave this at 4. libgpod seems to [http://gitorious.org/libgpod/libgpod/blobs/b9b83dc8b6c3d1f0c53ed32f05279ca838d54e02/src/itdb_sqlite.c#line2064 expect a hashed database.]<br />
<br />
=== Syncing ===<br />
<br />
Use your favourite iPod-compatible program. Individual configuration will vary, but in general, pointing your program to your specified mount point should yield good results.<br />
<br />
After you've synced, run {{ic|ipod-touch-umount}} (or {{ic|iphone-umount}}, depending on your taste) to unmount the SSHFS file system and restart the {{ic|MobileMusicPlayer}} process on the device, so that the new music database is read.<br />
<br />
If you used iFuse, simply type:<br />
# umount <mountpoint><br />
You will still need to reload the MobileMusicPlayer process. If your device is not jailbroken, then you are stuck restarting it.<br />
<br />
=== The iFuse Way - iPhone OS 3.x and 4.x ===<br />
''Warning: this software is considered unstable and should probably not be used in a productive environment''<br />
<br />
Make sure you already installed base-devel, which contains several programs needed to compile your new components. If you did not, just run:<br />
<br />
# pacman -S base-devel<br />
<br />
which will install everything you will need.<br />
<br />
You will need to install {{Pkg|libplist}}, {{Pkg|libimobiledevice}}, {{Pkg|libgpod}}, {{Pkg|usbmuxd}} and {{Pkg|ifuse}}.<br />
<br />
Now make sure that you have the fuse module loaded by doing {{ic|modprobe fuse}}, assuming that you do not have it in /etc/rc.conf already.<br />
Check if the group "usbmux" has been created and add your user using<br />
# gpasswd -a <user> usbmux<br />
<br />
To make sure the new rules apply, execute<br />
$ udevadm control --reload-rules<br />
and plug in your iPod/iPhone. <br />
<br />
Run as ROOT:<br />
# usbmuxd<br />
Now you should the be able to mount your device by running<br />
$ ifuse ~/ipod<br />
or similar. Make sure the directory used exists and is accessible to your user.<br />
<br />
Mount the device and create the iTunes_Control/Device directory. Then, get your UUID. It should be in the syslog from usbmuxd, or you can find it by running <br />
$ lsusb -v | egrep "iSerial.*[a-f0-9]{40}"<br />
It should be 40 characters long. Then, run <br />
$ ipod-read-sysinfo-extended <uuid> <mountpoint>. <br />
This should generate a file named {{ic|iTunes_Control/Device/SysInfoExtended}}.<br />
<br />
Now, start up your favourite app, it should detect the device via libgpod.<br />
I recommend using gtkpod-git for the time being, as that is what the libgpod developers seem to be using for debugging purposes.<br />
<br />
{{Note|If gtkpod/gtkpod-git seems to work only from root/sudo while your user only gets the slash screen, you can delete your {{ic|~/.gtkpod}} folder and retry. Note that gtkpod will forget your preferences.}}<br />
<br />
=== Rhythmbox ===<br />
<br />
Rhythmbox uses the Gnome Virtual File System to detect mobile devices. If using the iFuse way, gvfs-afc needs to be installed:<br />
# pacman -S gvfs-afc<br />
<br />
== iPod Classic/Nano3g ==<br />
<br />
You need to set up the iPod to make libgpod able to find its FireWire ID. For this, you will need to get your FireWire ID manually<br />
<br />
1) Mount the iPod as a rw mount point. In the following example, I will use {{ic|/mnt/ipod}}.<br />
<br />
2 ) Find the serial number by typing<br />
<br />
sudo lsusb -v | grep -i Serial <br />
<br />
this should print a 16 character long string like 00A1234567891231 (it will have no colons or hyphens) <br />
<br />
3) Once you have that number, create or edit {{ic|/mnt/ipod/iPod_Control/Device/SysInfo}}. Add to that file the line below:<br />
<br />
FirewireGuid: 0xffffffffffffffff<br />
<br />
(replace ffffffffffffffff with the 16 digit string you obtained at the previous step and do not forget the leading 0x before the string)<br />
<br />
Your iPod can now be managed with Amarok or gtkpod.<br />
<br />
== iPod management apps ==<br />
*[http://live.gnome.org/Rhythmbox Rhythmbox]<br />
**GTK interface ([[GNOME]])<br />
**Is part of the official GNOME projects.<br />
**Fast, light interface.<br />
**Manage music on your computer and iPod<br />
**Download or stream podcasts and video podcasts<br />
**Queue up songs and podcasts<br />
**Last.fm integration<br />
**Live radio stations<br />
**Jamendo and Magnatune support<br />
**Audio CD burning<br />
**Album cover display<br />
**Song lyrics display<br />
**DAAP sharing<br />
<br />
*[http://banshee.fm Banshee]<br />
**GTK interface (GNOME)<br />
**Uses Mono so it is slower and more resource hogging than rhythmbox<br />
**Device Sync: Sync your music and videos to your Android, iPod, or other device - or import its media<br />
**Podcasts: Download or stream podcasts and video podcasts<br />
**Play Queue: Queue up songs, videos, and podcasts, or let the Auto DJ take over<br />
**Shuffle Modes: Shuffle (or Auto DJ) by artist, album, rating, or even songs' acoustic similarity<br />
**Album Art: Artwork is automatically fetched as you listen<br />
**Powerful Search, Smart Playlists: Find exactly what you want, fast<br />
**Video Support: All the power of Banshee, now for your videos<br />
<br />
*[http://www.yamipod.com Yamipod]<br />
**GTK interface (GNOME)<br />
**super lightweight application for managing ONLY music on your iPod (not on your computer)<br />
**easy ratings edit<br />
**PC to iPod synchronization<br />
**News RSS and podcasts to iPod upload<br />
**Last.fm support <br />
**playlist support<br />
<br />
*[http://www.gtkpod.org gtkpod]<br />
**GTK interface (GNOME)<br />
**Read your existing iTunesDB (i.e. import the existing contents of your iPod including play counts, ratings and on-the-go playlists).<br />
**Add MP3, WAV, M4A (non-protected AAC), M4B (audio book), podcasts, and various video files (single files, directories or existing playlists) to the **iPod. You need a third party product to download podcasts, like 'bashpodder' or 'gpodder'<br />
**View, add and modify Cover Art<br />
**Browse the contents of your local hard disk by album/artist/genre by adding all your songs to the 'local' database. From there the tracks can be **dragged over to the iPod/Shuffle easily.<br />
**Create and modify playlists, including smart playlists.<br />
**You can choose the charset the ID3 tags are encoded in from within gtkpod. The default is the charset currently used by your locale setting.<br />
**Extract tag information (artist, album, title...) from the filename if you supply a template.<br />
**Detect duplicates when adding songs (optional).<br />
**Remove and export tracks from your iPod.<br />
**Modify ID3 tags -- changes are also updated in the original file (optional).<br />
**Refresh ID3 tags from file (if you have changed the tags in the original file).<br />
**Sync directories.<br />
**Normalize the volume of your tracks (uses mp3gain or the replay-gain tag)<br />
**Write the updated iTunesDB and added songs to your iPod.<br />
**Work offline and synchronize your new playlists / songs with the iPod at a later time.<br />
**Export your korganizer/kaddressbook/Thunderbird/evocalendar/evolution/webcalendar... data to the iPod (scripts for other programs can be added).<br />
<br />
*[http://www.floola.com Floola]<br />
**GTK interface (GNOME)<br />
<br />
*[http://amarok.kde.org/ Amarok]<br />
**KDE/qt interface<br />
<br />
*[http://qpod.sourceforge.net qPod]<br />
**KDE/qt interface<br />
**front-end for GNUpod<br />
<br />
*[http://www.gnu.org/software/gnupod/ GNUpod]<br />
**command-line only<br />
<br />
*[http://www.jakpod.de/ jakpod]<br />
** JakPod is based on Java and allows you to copy music and video files to your iPod.<br />
** iPod Nano 6th support<br />
** {{AUR|jakpod}}<br />
<br />
== See also ==<br />
** [http://help.ubuntu.com/community/PortableDevices/iPhone More information about iPhone/iPod Touch support]<br />
** [http://wiki.gotux.net/code/perl/atget Apple trailers downloader script]</div>Wzyboy