NTFS: Difference between revisions

Klinger (talk | contribs)
Category:Filesystem. Sentence at the beginning.
Pigs (talk | contribs)
Troubleshooting: adds section on dirty flag
 
(9 intermediate revisions by 5 users not shown)
Line 1: Line 1:
New Technology File System (NTFS) is a proprietary journaling file system developed by Microsoft. It is still in use by modern Windows system, although NTFS didnt evolve since the release of version 3.1 in 2001.
New Technology File System (NTFS) is a proprietary journaling [[Filesystems|file system]] developed by Microsoft. It is still in use by modern Windows systems, although NTFS has not evolved since the release of version 3.1 in 2001.
 
== Enable NTFS support at boot ==
<syntaxHighlight lang=nix>
boot.supportedFilesystems = [ "ntfs" ];
</syntaxHighlight>
 
NixOS uses NTFS-3G for NTFS support.
 
=== Enable write mode ===
<syntaxhighlight lang="nixos">
  fileSystems."/path/to/mount/to" =
    { device = "/path/to/the/device";
      fsType = "ntfs-3g";
      options = [ "rw" "uid=theUidOfYourUser"];
    };
</syntaxhighlight>
 
== Mount NTFS filesystem ==
<syntaxHighlight lang=sh>
# mount /dev/sdeX /mnt -t ntfs3
</syntaxHighlight>


== Mount NTFS filesystem on boot ==
== Mount NTFS filesystem on boot ==


# Add NTFS support to ''/etc/nixos/configuration.nix'' (see [[#Enable NTFS support at boot]] above)
Using [[nixos-generate-config]] to automatically generate Nix config is the recommended way to setup filesystems.
#Run the following commands<syntaxhighlight lang="bash">
# Apply new config on next boot
sudo nixos-rebuild boot
# Reboot your system
reboot
 
# Mount the hard drive. Replace X & /mnt/folder as needed
mount /dev/sdX /mnt/folder -t ntfs3


# Generate /etc/nixos/hardware-configuration.nix
1. Run {{ic|lsblk}} to list device names.
nixos-generate-config
{{code|
</syntaxhighlight>
sd...
# Edit ''/etc/nixos/hardware-configuration.nix''<syntaxhighlight lang="diff">
└─sdX
  # /etc/nixos/hardware-configuration.nix
}}
2. Mount the device using [https://man7.org/linux/man-pages/man8/mount.8.html {{ic|mount}}], where {{ic|/dev/sdX}} replaced with your device name and {{ic|/mnt/sdX}} replaced with an existing folder path to mount your drive.
{{code|<nowiki>mount /dev/sdX /mnt/sdX -t ntfs3 -o uid=$UID</nowiki>}}
3. Run {{ic|nixos-generate-config --dir .}} to generate hardware configuration. This will <strong>automatically</strong> add all currently mounted devices to {{ic|hardware-configuration.nix}}.
{{file|/etc/nixos/hardware-configuration.nix|diff|3=
+  boot.supportedFilesystems = [ "ntfs" ];
+  fileSystems."/mnt/sdX" = {
+    device = "/dev/disk/by-uuid/F258FB9E58FB5FB1";
+    fsType = "ntfs3";
+  };
}}
4. Add {{ic|<nowiki>"uid=$UID"</nowiki>}} to {{nixos:option|fileSystems.*.options|fileSystems.<name>.options}} to get write access, where {{ic|<nowiki>$UID</nowiki>}} <strong>replaced with your UID</strong>:
{{file|/etc/nixos/configuration.nix|nix|3=
fileSystems =
  let
    ntfs-drives = [
      "/mnt/sdX"
    ];
  in
  lib.genAttrs ntfs-drives (path: {
    options = [
      "uid=$UID" # REPLACE "$UID" WITH YOUR ACTUAL UID!
      # "nofail"
    ];
  });
}}


  # Your /dev/disk/by/uuid/... and /mnt/folder will have different names!
{{note|You may find your UID by running {{ic|echo $UID}}.}}
  fileSystems."/mnt/folder" =
{{aside|It is not recommended to manually edit {{ic|hardware-configuration.nix}}.}}
      { device = "/dev/disk/by-uuid/7997ef90-6333-4c60-b137-d5cf2423e91b";
5. {{evaluate}}
-      fsType = "ntfs3";
+      fsType = "ntfs-3g";
+      options = [ "rw" "uid=UID"];
      };
</syntaxhighlight>''Note: you can quickly find your UID by running '''echo $UID'''''
#Run '''nixos-rebuild switch'''
#Done!


== Troubleshooting ==
== Troubleshooting ==
Line 75: Line 64:
If you have shutdown Windows fully, and not used hibernation, it may be caused by the <em>fast startup</em> or <em>fast boot</em> feature of Windows. It has been reported that major Windows updates may reset this setting to <strong>on</strong>.
If you have shutdown Windows fully, and not used hibernation, it may be caused by the <em>fast startup</em> or <em>fast boot</em> feature of Windows. It has been reported that major Windows updates may reset this setting to <strong>on</strong>.


[https://social.technet.microsoft.com/wiki/contents/articles/25908.fast-startup-how-to-disable-if-it-s-causing-problems.aspx This TechNet entry] explains how to disable fast startup. Additionally, [https://www.howtogeek.com/243901/the-pros-and-cons-of-windows-10s-fast-startup-mode/ this blog post on howtogeek.com] explains what is the fast startup mode, and how to disable it.
[https://social.technet.microsoft.com/wiki/contents/articles/25908.fast-startup-how-to-disable-if-it-s-causing-problems.aspx This TechNet entry] explains how to disable fast startup. Additionally, [https://www.howtogeek.com/243901/the-pros-and-cons-of-windows-10s-fast-startup-mode/ this blog post on howtogeek.com] explains how the fast startup mode works, and how to disable it.
 
=== Unable to mount ntfs3 with dirty volume ===
 
When attempting to mount an <code>NTFS</code> partition using the <code>ntfs3</code> filesystem driver via the {{nixos:package|ntfs3g}} package, the mount operation may fail:
 
<syntaxhighlight lang="console">
# mount /dev/sda1 /mnt -t ntfs3
mount: /mnt: wrong fs type, bad option, bad superblock on /dev/sda1, missing codepage or helper program, or other error.
      dmesg(1) may have more information after failed mount system call.
</syntaxhighlight>
 
With the resulting dmesg output:
 
<syntaxhighlight lang="console">
# dmesg
...
[168659.819978] ntfs3: sda1: It is recommened to use chkdsk.
[168659.820833] ntfs3: sda1: volume is dirty and "force" flag is not set!
</syntaxhighlight>
 
This indicates that the NTFS volume has the “dirty” flag set. In this state, the <code>ntfs3</code> driver refuses to mount the filesystem.
 
To clear the dirty flag, run <code>ntfsfix</code> on the affected partition:


<syntaxhighlight lang="console">
# ntfsfix --clear-dirty /dev/sda1
</syntaxhighlight>
If <code>ntfsfix</code> fails with an error <code>Windows is hibernated, refused to mount</code>, the partition can be mounted using <code>ntfs-3g</code> with the hibernation file removed:
<syntaxhighlight lang="console">
# ntfs-3g -o remove_hiberfile /dev/sda1 /mnt
</syntaxhighlight>


[[Category:Filesystem]]
[[Category:Filesystem]]