diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix index f98b621111f..5beaeb5388b 100644 --- a/nixos/modules/module-list.nix +++ b/nixos/modules/module-list.nix @@ -306,6 +306,7 @@ ./tasks/filesystems.nix ./tasks/filesystems/btrfs.nix ./tasks/filesystems/ext.nix + ./tasks/filesystems/f2fs.nix ./tasks/filesystems/nfs.nix ./tasks/filesystems/reiserfs.nix ./tasks/filesystems/unionfs-fuse.nix diff --git a/nixos/modules/profiles/base.nix b/nixos/modules/profiles/base.nix index 20b808c29e0..562419b3fac 100644 --- a/nixos/modules/profiles/base.nix +++ b/nixos/modules/profiles/base.nix @@ -34,6 +34,7 @@ pkgs.dosfstools pkgs.xfsprogs pkgs.jfsutils + pkgs.f2fs-tools #pkgs.jfsrec # disabled because of Boost dependency # Some compression/archiver tools. @@ -50,6 +51,6 @@ ]; # Include support for various filesystems. - boot.supportedFilesystems = [ "btrfs" "reiserfs" "vfat" ]; + boot.supportedFilesystems = [ "btrfs" "reiserfs" "vfat" "f2fs" ]; } diff --git a/nixos/modules/system/boot/stage-1-init.sh b/nixos/modules/system/boot/stage-1-init.sh index 216937a619b..c4a21b02cac 100644 --- a/nixos/modules/system/boot/stage-1-init.sh +++ b/nixos/modules/system/boot/stage-1-init.sh @@ -204,7 +204,7 @@ checkFS() { # does (minutes versus seconds). if test -z "@checkJournalingFS@" -a \ \( "$fsType" = ext3 -o "$fsType" = ext4 -o "$fsType" = reiserfs \ - -o "$fsType" = xfs -o "$fsType" = jfs \) + -o "$fsType" = xfs -o "$fsType" = jfs -o "$fsType" = f2fs \) then return 0 fi diff --git a/nixos/modules/tasks/filesystems/f2fs.nix b/nixos/modules/tasks/filesystems/f2fs.nix new file mode 100644 index 00000000000..8655107360c --- /dev/null +++ b/nixos/modules/tasks/filesystems/f2fs.nix @@ -0,0 +1,21 @@ +{ config, pkgs, ... }: + +with pkgs.lib; + +let + inInitrd = any (fs: fs == "f2fs") config.boot.initrd.supportedFilesystems; +in +{ + config = mkIf (any (fs: fs == "f2fs") config.boot.supportedFilesystems) { + + system.fsPackages = [ pkgs.f2fs-tools ]; + + boot.initrd.availableKernelModules = mkIf inInitrd [ "f2fs" ]; + + boot.initrd.extraUtilsCommands = mkIf inInitrd '' + mkdir -p $out/bin $out/lib + cp -v ${pkgs.f2fs-tools}/sbin/fsck.f2fs $out/bin + cp -pdv ${pkgs.f2fs-tools}/lib/lib*.so.* $out/lib + ''; + }; +} diff --git a/nixos/tests/partition.nix b/nixos/tests/partition.nix index 309afa4ce9d..120ecaad881 100644 --- a/nixos/tests/partition.nix +++ b/nixos/tests/partition.nix @@ -24,6 +24,14 @@ let btrfs / --data=0 --metadata=1 --label=root btrfs.1 btrfs.2 ''; + ksF2fs = pkgs.writeText "ks-f2fs" '' + clearpart --all --initlabel --drives=vdb + + part swap --recommended --label=swap --fstype=swap --ondisk=vdb + part /boot --recommended --label=boot --fstype=f2fs --ondisk=vdb + part / --recommended --label=root --fstype=f2fs --ondisk=vdb + ''; + ksRaid = pkgs.writeText "ks-raid" '' clearpart --all --initlabel --drives=vdb,vdc @@ -193,6 +201,16 @@ in { remountAndCheck; }; + parttest "f2fs filesystem", sub { + $machine->succeed("modprobe f2fs"); + kickstart("${ksF2fs}"); + ensurePartition("swap", "swap"); + ensurePartition("boot", "f2fs"); + ensurePartition("root", "f2fs"); + remoteAndCheck; + ensureMountPoint("/mnt/boot", "f2fs"); + }; + parttest "RAID1 with XFS", sub { kickstart("${ksRaid}"); ensurePartition("swap1", "swap");