Page 1 of 2

PM961 NVMe PCIe Samsung SSD not supported? [Solved in Porteus 4.0]

Posted: 03 Nov 2017, 03:49
by rych
A M.2 PCIe NVMe SSD host system disk is not seen by Porteus 3.2.2 64. At all. Not in GParted, not anywhere.

Specifically, a new machine that we got is Dell Optiplex 7450 AIO, featuring a novel PM961 NVMe Samsung SSD disk. In Bios, under devices, it is listed not as a SATA disk but as a "M.2 PCIe SSD".

Although an expected development in disk drive design (SSD didn't need to be enclosed in SATA after all), I think it's too novel for porteus (linux?) to handle. Some help please.

new generation SSD disks not yet supported?

Posted: 03 Nov 2017, 04:36
by ncmprhnsbl
could be like this?: https://bbs.archlinux.org/viewtopic.php?id=204629
their solution seems to be something to do with switching SATA operations from RAID to AHCI in BIOS ..

new generation SSD disks not yet supported?

Posted: 04 Nov 2017, 04:49
by rych
Thanks, @ncmprhnsbl

In my case SATA is already set to AHCI. There is only one SATA device per se, it's a DVD drive. The problem disk is not listed as SATA, but a PCIe. Maybe it does still use SATA bus, I wonder. Anyhow, I'm only seeing AHCI in Bios. I should add that Windows boots on the same machine just fine, from the disk in question.

The linked Dell thread suggests to add
the following kernel argument at boot time:
nvme_load=YES
Could I do it during porteus boot somewhere?

new generation SSD disks not yet supported?

Posted: 04 Nov 2017, 12:59
by ncmprhnsbl
rych wrote:
04 Nov 2017, 04:49
Could I do it during porteus boot somewhere?
i guess you could try it either on the APPEND line(syslinux/porteus.cfg) or for EFI in the refind.conf on the add_options line..
depending on which you're using..

new generation SSD disks not yet supported?

Posted: 06 Nov 2017, 05:56
by rych
No, adding nvme_load=YES to APPEND had no apparent effect: it didn't discover any new disks or devices.

The only mention of the word "Samsung" I've seen so far is in the /tmp/psinfo.txt generated with psinfo:

Code: Select all

...
LSPCI OUTPUT:
...
01:00.0 Non-Volatile memory controller [0108]: Samsung Electronics Co Ltd Device [144d:a804]
	Subsystem: Samsung Electronics Co Ltd Device [144d:a801]
Is this giving me a hope? It's a PCI and a NVM, now it only needs to find the SSD disk connected through it :)

PM961 NVMe PCIe Samsung SSD not supported?

Posted: 07 Nov 2017, 05:38
by rych
...have found in http://www.samsung.com/semiconductor/gl ... aper-0.pdf a mention of a driver, nvme-kmp-default-1.17_3.0.76_0.11-0.x86.64.rpm. Should I try and install it? I thought these things are supposed to be in the kernel?

PM961 NVMe PCIe Samsung SSD not supported?

Posted: 10 Nov 2017, 03:29
by rych
... have tried to set in BIOS, SATA operation to Disabled -- didn't work, and the disk is not even listed in BIOS anymore. So I'm confused, is a PCIe NVM disk still a SATA disk?

Switched it back to AHCI, and added nvme_load="YES" nvd_load="YES" in porteus.cfg -- no effect

PM961 NVMe PCIe Samsung SSD not supported?

Posted: 10 Nov 2017, 04:46
by ncmprhnsbl
don't know if this helps any: https://wiki.archlinux.org/index.php/So ... rives/NVMe
what kernel version do you have? >3.3 right? anything show in /dev/nvme* ?

PM961 NVMe PCIe Samsung SSD not supported?

Posted: 11 Nov 2017, 04:48
by rych
Thank you, @ncmprhnsbl , for staying with me on this

Kernel version: 4.9.0-porteus
none of /dev/nvme* or any other promising /dev/* that I could see

It's interesting that BIOS can see this device yet porteus can't. Perhaps there is more to it,it's a new machine from Dell. I'll try to find where to post on their forum.

PM961 NVMe PCIe Samsung SSD not supported?

Posted: 11 Nov 2017, 07:10
by fanthom
Hi rych,

nvme driver must be compiled directly into Porteus kernel or loaded from initrd before the search for .sgn file is performed.
This is something for brokenman to look after in next release.

Thanks

PM961 NVMe PCIe Samsung SSD not supported?

Posted: 11 Nov 2017, 08:54
by Blaze
The installer of Slackware 14.2 does not support NVMe boot devices (the new type of SSD hard drives with a M.2 PCI-express interface)
https://alien.slackbook.org/blog/build- ... slackware/
I found interesting fix for Slackware-current - look at this post
Probably, this fix may be applicable for Porteus.

For extracting initrd.xz I used this script extract_initramfs.sh

Code: Select all

#/bin/sh
# $Id: extract_initramfs.sh,v 1.8 2016/01/27 20:18:15 root Exp root $
# ----------------------------------------------------------------------------
# Purpose:
#   Create or extract initramfs archives.
# Usage:
#   extract_initramfs <archivename> <target_directory>
#   create_initramfs <archivename> <source_directory>
#
# Author:
#   Eric Hameleers <alien@slackware.com>
#
# ----------------------------------------------------------------------------

# My paranoia:
set -e
# Debugging:
#set -x

# Names by which the script can be called (use symlinks for this!):
EXTRACT_NAME=extract_initramfs.sh
CREATE_NAME=create_initramfs.sh

# Used compression techniques:
A7Z=$(which 7za 2>/dev/null) || true
GZIP=$(which gzip 2>/dev/null) || true
ZIP=$(which zip 2>/dev/null) || true
XZ=$(which xz 2>/dev/null) || true

usage() {
cat <<EOT__

$0 :
   Create or extract initramfs archives.
Usage:
   extract_initramfs <archivename> <target_directory>
   create_initramfs <archivename> <source_directory>
NOTE:
   The target directory will be created if it does not yet exist.
   The initramfs contents will be extracted to this target directory.
   The target directory's existing contents will *not* be erased
    prior to extracting the initramfs, in case the directory already exists.

EOT__
}

compressfs () {
if [ "$(echo "${1}" |rev |cut -d. -f1 | rev)" = "7z" -a -n "$A7Z" ]; then
  7za a ${1} -si
elif [ "$(echo "${1}" |rev |cut -d. -f1 | rev)" = "zip" -a -n "$ZIP" ]; then
  zip "${1}" -
elif [ "$(echo "${1}" |rev |cut -d. -f1 | rev)" = "gz" -a -n "$GZIP" ]; then
  gzip -c > "${1}"
elif [ "$(echo "${1}" |rev |cut -d. -f1 | rev)" = "xz" -a -n "$XZ" ]; then
  xz -c > "${1}"
else
  # Use a safe default and hope for the best:
  gzip -c > ${1}
fi
}

uncompressfs () {
if $(file "${1}" | grep -qi ": 7-zip"); then
  7za x "${1}" -so
elif $(file "${1}" | grep -qi ": zip"); then
  unzip -p "${1}"
elif $(file "${1}" | grep -qi ": gzip"); then
  gzip -cd "${1}"
elif $(file "${1}" | grep -qi ": XZ"); then
  xz -cd "${1}"
else
  # And hope for the best:
  gunzip -cd "${1}"
fi
}

if [ -z "$1" ]; then
  usage
  exit 1
else
  INITRD=$1
  [ "${INITRD:0:1}" != "/" ] && INITRD=$(pwd)/${INITRD}
fi

if [ -z "$2" ]; then
  usage
  exit 2
else
  DIR=$2
fi


if [ "`basename $0`" = "${EXTRACT_NAME}" ]; then
  if [ ! -r ${INITRD} ]; then
    echo "***ERROR*** Can not read initramfs file '${INITRD}'!"
    exit 11
  fi
  if [ ! -d ${DIR} ]; then
    # Try to create the target directory:
    if ! mkdir -p ${DIR} ; then
      echo "***ERROR*** Can not create directory '${DIR}'!"
      exit 11
    fi
  fi
  cd ${DIR}
  echo "--- Extracting the initramfs into the directory '${DIR}'"
  uncompressfs ${INITRD} | cpio -i -d -H newc --no-absolute-filenames
elif [ "`basename $0`" = "${CREATE_NAME}" ]; then
  if [ ! -d ${DIR} ]; then
    echo "***ERROR*** Directory '${DIR}' does not exist!"
    exit 12
  fi
  # Compress the initrd (this is a cpio archive for the 2.6 kernel's initramfs):
  cd ${DIR}
  echo "--- Creating the initramfs from content below '${DIR}'"
  find . | cpio -o -H newc | compressfs ${INITRD}
  RET=$?
  [ $RET -ne 0 ] && echo "An error occured in creating $INITRD (code $RET)"
fi
Create or extract initramfs archives.
Usage:
extract_initramfs <archivename> <target_directory>
create_initramfs <archivename> <source_directory>
NOTE:
The target directory will be created if it does not yet exist.
The initramfs contents will be extracted to this target directory.
The target directory's existing contents will *not* be erased
prior to extracting the initramfs, in case the directory already exists.

Code: Select all

su
toor
cd /home/guest/Загрузки
chmod +x extract_initramfs.sh
mkdir initrd
./extract_initramfs.sh initrd.xz /home/guest/Загрузки/initrd/
rm initrd.xz
# Names by which the script can be called (use symlinks for this!):
# EXTRACT_NAME=extract_initramfs.sh
# CREATE_NAME=create_initramfs.sh
ln -s /home/guest/Загрузки/extract_initramfs.sh /home/guest/Загрузки/create_initramfs.sh
./create_initramfs.sh initrd.xz /home/guest/Загрузки/initrd/

PM961 NVMe PCIe Samsung SSD not supported?

Posted: 13 Nov 2017, 05:56
by rych
Thanks fanthom and Spasibo Blaze. Your messages give hope that it's doable and might be fixed in Porteus-4.0 by @brokenman? I'll wait. (In the meantime I guess I should make a RAM disk because there is 8GB of RAM. Otherwise writing-reading off my USB drive all the time is too slow)

PM961 NVMe PCIe Samsung SSD not supported?

Posted: 18 Nov 2017, 18:11
by brokenman
I've updated the kernel and included the driver. I will upload the latest tomorrow evening.

PM961 NVMe PCIe Samsung SSD not supported?

Posted: 20 Nov 2017, 05:30
by rych
Thank you, @brokenman, I look forward to trying it. Is it going to appear in http://dl.porteus.org/x86_64/Porteus-v3.2.2/kernel/ or elsewhere - I can't find it?

PM961 NVMe PCIe Samsung SSD not supported?

Posted: 20 Nov 2017, 11:32
by brokenman
I sent you a PM