NTFS: Difference between revisions

On nixos 25.05, the argument has to be ntfs-3g to work
Pigs (talk | contribs)
Troubleshooting: adds section on dirty flag
 
(6 intermediate revisions by 2 users not shown)
Line 1: Line 1:
New Technology File System (NTFS) is a proprietary journaling [[Filesystems|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 ntfs-3g
</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
1. Run {{ic|lsblk}} to list device names.
mount /dev/sdX /mnt/folder -t ntfs3
{{code|
sd...
└─sdX
}}
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"
    ];
  });
}}


# Generate /etc/nixos/hardware-configuration.nix
{{note|You may find your UID by running {{ic|echo $UID}}.}}
nixos-generate-config
{{aside|It is not recommended to manually edit {{ic|hardware-configuration.nix}}.}}
</syntaxhighlight>
5. {{evaluate}}
# Edit ''/etc/nixos/hardware-configuration.nix''<syntaxhighlight lang="diff">
  # /etc/nixos/hardware-configuration.nix
 
  # Your /dev/disk/by/uuid/... and /mnt/folder will have different names!
  fileSystems."/mnt/folder" =
      { device = "/dev/disk/by-uuid/7997ef90-6333-4c60-b137-d5cf2423e91b";
-      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 76: Line 65:


[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.
[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]]