Updating Samsung 980/990 (PRO) NVMe using Linux CLI

Get the latest firmware for your NVMe: https://semiconductor.samsung.com/consumer-storage/support/tools/

  1. Download it to your server
    wget -O /root/samsungFirmware.iso https://download.semiconductor.samsung.com/resources/software-resources/Samsung_SSD_990_PRO_4B2QJXD7.iso
  2. Make sure all the required dependencies are installed
    apt-get -y install gzip unzip wget cpio
  3. Mount the iso and unpack initrd
    mkdir /mnt/iso
    sudo mount -o loop /root/samsungFirmware.iso /mnt/iso/
    mkdir /tmp/fwupdate
    cd /tmp/fwupdate
    gzip -dc /mnt/iso/initrd | cpio -idv --no-absolute-filenames

  4. Run the firmware update tool fumagician
    cd root/fumagician/
    sudo ./fumagician

  5. Reboot the server to apply the firmware updates
    sudo reboot

  6. Cleanup
    rm -rf /tmp/fwupdate
    rm -f /root/samsungFirmware.iso

Thats it, your Samsung PRO NVMe is now up-to-date!

Download Windows IPMItool.exe version 1.8.19

I have compiled a Windows version of IPMItool 1.8.19. It is not available as executable download on the internet yet, hence i am sharing this with you.

Download ipmitool.exe 1.8.19 for Windows

The source is directly downloaded from https://github.com/ipmitool/ipmitool/releases and compiled using Cygwin on Windows 10. If you wish to compile ipmitool yourself, read this post.

How to compile IPMItool.exe for Windows

  1. Install Cygwin on your windows system. While installing Cygwin make sure to install the development tools (dependencies on these packages will be automatically selected by Cygwin)
    1. General build environment tools
      • autoconf
      • autoconf2.5
      • autogen
      • automake
      • automake1.15
      • libtool
      • make
    2. Compilers
      • gcc-g++
      • mingw64-x86_64-gcc-core
      • mingw64-x86_64-gcc-g++
    3. IPMItool dependencies
      • zlib-devel
      • libreadline-devel
      • libcrypt-devel
      • openssl-devel
      • libgcrypt-devel
  2. Download the latest source from IPMItool
  3. Unzip the zip archive to any location
  4. Launch ‘Cygwin64 Terminal’ and change your directory to extract location. Im my case: /cygdrive/c/ipmitool-IPMITOOL_1_8_18.
    cd /cygdrive/c/ipmitool-IPMITOOL_1_8_18
  5. Configure and build IPMItool:
    ./configure --enable-intf-lanplus
    make install
  6. Packaging the IPMItool binary and related DLLs in an archive file:
    cd ..
    mkdir ipmitool
    cp ipmitool-1.8.18/src/.libs/ipmitool.exe ipmitool/
    cp /bin/cygwin1.dll ipmitool/
    cp /bin/cygcrypto* ipmitool/
    cp /bin/cygz.dll ipmitool/
    cp /bin/cyggcc_s-*.dll ipmitool/

    cp /bin/cygreadline*.dll ipmitool/
    cp /bin/cygncursesw-*.dll ipmitool/
    tar -zcvf ipmitool.tar ipmitool
  7. Extract the file, ipmitool.tar in your destination host. Some of the sample commands to test your ipmitool.exe:
    ipmitool.exe -I lan -U username -P password -H address sel list
    ipmitool.exe -I lanplus -U username -P password -H address sel list

Download Windows IPMItool.exe version 1.8.18

I have compiled a Windows version of IPMItool 1.8.18. It is not available as exe download on the internet yet, hence im sharing this with you.

Download ipmitool.exe 1.8.18 for Windows

The source is directly downloaded from https://github.com/ipmitool/ipmitool/releases and compiled using Cygwin on Windows Server 2008. If you wish to compile ipmitool yourself, read this post.

Interview i3D.net One™

In the process of creating the new multi cloud scaling platform with my team, ive been interviewed. This interview is published on the i3D.net website.



Before we ‘dig in’, tell me what is ONE™ in two sentences.
DN: ONE™ is a one-stop shop for game publishers.This platform combines the power of our global infrastructure with our in-house developed game hosting software, which allows you to burst to various public cloud providers in a heartbeat, roll our patches without player impact and manage your global player capacity, all in one dashboard.

ONE™ is a one-stop shop for international game publishers. 

Creating a platform to rule them all, that sounds like a lot of hard work?
 It is, we have been using and developing our platform for over 10 years, it contains our network, hardware, software and management services. Over the years we have built our network to become one of the best bare metal gaming networks in the world. To maintain this status, we are constantly updating and finding ways to make ONE™ perform even better. In this process you naturally look at your competition and we noticed that more and more game publishers where choosing a cloud solution. So we started to investigate why.

It could not be performance because our global network of dedicated servers is specially built for games and their player base focused on ultra-low latency. Our price compared to cloud providers is also significantly lower. The one thing we could not offer back then, was instant flexibility. Within the cloud, publishers do not have to give an estimate of the number of players they expect, and your high peak is covered. For this certainty publishers are willing to pay a much higher price.  
That could have a big impact on your business, right? 
DN: Definitely! We do not want to see clients and prospects choosing a different solution. So, we started thinking about how to get control back. Our strength in comparison to the cloud is our hardware, all A-grade game severs with high CPU frequency, where the cloud uses servers that are used for different purposes not giving the same performance. Add to that, game publishers found out cloud servers can be on full capacity as well, making it a solution with more costs and the same risk.  

Stijn Koster, our CEO, then came up with the idea to implement multi-cloud scaling. Why not let our clients scale to the cloud of their choice when their bare metal servers are on full capacity. This way we can give game publishers the best of both worlds, the performance of our privately owned global infrastructure and the flexibility to handle high peaks by bursting into the cloud, all in one platform and all self-manageable. 

We can give game publishers the best of both worlds, the performance of dedicated servers and the flexibility to handle high peaks by bursting in to the cloud.

What was the next step to go from an idea to an actual product? 
DN: We were very curious what the reaction of game publishers would be about the idea, so we started pitching it. Fortunately for us the mix between performance and cloud, all manageable within a single platform was really appealing to game publishers. We then started implementing multi-cloud scalability into our existing ONE™ platform and added some unique features that would make it a one-stop shop for international game publishers. In 2016 our clients where able to use multi-cloud scaling within ONE™.

What are the features within ONE™ which make it unique? 
DN: Well the whole platform is unique, but I can highlight some of the most important features.  

1. ONE Dashboard: get a bird’s-eye view of your entire game and drill down as deep as you like. 
2. Game Management: manage multiple games and game files safely in one controlled environment. 
3. Fleet Management: manage your infrastructure with the use of fleets; a combination of settings with infinite possibilities.
4. Multi-cloud Scaling: flawlessly scale to multiple cloud providers the way it suits you best. 
5. Scaling Strategies: determine the best strategy for your game with various scaling strategies.
I can tell you a lot more about all the different features but let’s not give everything away in this first interview.  

Multi-cloud Scaling: flawlessly scale to multiple cloud providers the way it suits you best.

Why is no one else building a platform like this? 
DN: To build a platform like ONE™ that is used all over the world you need a global infrastructure. With over 8,250 servers in 26 locations on 6 continents i3D.net has built such a network. Building a network like ours will take years, not to mention the enormous investment.
What’s on the agenda for the coming months?  
DN: Well there are some exciting things coming up! When we implement ONE™ we like to work together closely with game publishers as we have done with numerous over the last years.We are now in the process of implementing ONE™ for Ubisoft Singapore, in March the i3D.net developing team will fly over to work side by side with the developers from Ubisoft. The goal of this endeavor is to get direct feedback of them without having to deal with the time differences between the Netherlands and Singapore.In the coming months we will keep you updated about ONE™ with interviews and blogs. Stay tuned.

IPv6 on RedHat linux

To setup IPv6 on a RedHat based operating system, follow below steps:

vi /etc/sysconfig/network-scripts/ifcfg-ethX


Restart the network, check if the default route is available:

ip -6 route

Should be something like:

default via 2a00:1630:1:100::1 dev eth2  metric 1  mtu 1500 advmss 1440 hoplimit 4294967295

Doing Simple Source Policy Routing on RedHat

I’m not for sure when they did it, but the RHEL folks made it a bunch easier to setup simple source policy routing. By using source policy routing, we fix the issue of firewalls freaking out when the reply packet to a host leaves a multihomed host on a different interface than what the request came in on. In prior versions, you had to setup some custom scripts, but that’s no longer the case – all the hooks are there in the OS now.

In this example, imagine a CentOS host with two nics. is on eth0, and is on eth1. The default gateway is set to Any host accessing from any subnet that isn’t on will have it’s reply packets sent out via Some firewalls drop this type of traffic *cough* Cisco ASA’s *cough*.

Thanks to the iproute2 package in Linux, this is easy enough to fix. RedHat has made it even easier now – we can do this in 3 steps (all performed as root):

Step 1: Create a table

We need to create a table for iproute2. Name it anything you want, and add it to /etc/iproute2/rt_tables, like so:

echo -e "200 SecondSubnet" >> /etc/iproute2/rt_tables

Step 2: Create a route

We need to create a route for eth1 that says to use our SecondSubnet table defined in Step 1.

echo "default table SecondSubnet via" > /etc/sysconfig/network-scripts/route-eth1

Step 3: Create a rule

We need to create a rule for eth1 that says to use our route above for traffic received on eth1.

echo "from table SecondSubnet" > /etc/sysconfig/network-scripts/rule-eth1

Step 4: Restart networking

/etc/init.d/network restart

That’s it. Fire up a packet sniffer and verify your config!

Search and repair a broken ext4 superblock in CentOS

sudo fdisk -l

The above will list all the partitions on all the drives in your computer. To recover a lost partition, your going to need Testdisk. Testdisk is included in Parted Magic, and there’s a great guide on their site. For this though, we just need the partition number, such as /dev/sda3 or /dev/hdb1.

Now, make sure your superblock is the problem, by starting a filesystem check, replacing sdX with your partition name. Here, you can change ext4 to ext3, or ext2 to suit the filesystem.

sudo fsck.ext4 -v /dev/sdX

If your superblock is corrupt, the output will look like this

fsck /dev/sdb1
 fsck 1.41.4 (27-Jan-2009)
 e2fsck 1.41.4 (27-Jan-2009)
 fsck.ext4: Group descriptors look bad... trying backup blocks...
 fsck.ext4: Bad magic number in super-block while trying to open /dev/sdb1

The superblock could not be read or does not describe a correct ext4
filesystem.  If the device is valid and it really contains an ext4
filesystem (and not swap or ufs or something else), then the superblock
is corrupt, and you might try running e2fsck with an alternate superblock:

e2fsck -b 8193 <device>

Now lets find where your superblock backups are kept.

sudo mke2fs -n /dev/sdX

Down at the bottom of this output, should be a list of the backups

Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208

Your almost there. Finally, restore the superblock from the backup, again replacing the x’s with your partition name, and block_number with the first backup superblock.

Now reboot, and your superblock should be fixed. If it’s not, repeat the steps, but restore a different backup superblock :)