Understanding Number of Data Movements with SSD Drive in Linux: A Simple Example

Abstract: Demonstrates how to visualize and analyze SSD data movement in Linux using iostat, blktrace, and controlled I/O workloads.

Created: 2026-08-21 by
Understanding data movements on an SSD in Linux requires observing how the kernel handles block I/O requests through the device mapper and storage stack. By using tools like iostat, blktrace, and examining /sys/block attributes, you can visualize the actual read and write operations that occur during file transfers. This process reveals how the operating system optimizes performance by managing wear leveling and command queuing at the hardware level.

The Core Concept of Data Movement

When you save a file on a Linux system with an SSD, the data does not simply move from your application to the flash memory in a straight line. Instead, it passes through several layers of the kernel. The VFS (Virtual File System) layer receives the request, passes it to the block layer, which then schedules it for the specific drive controller. For SSDs, this is critical because the physical location of data changes constantly due to garbage collection and wear leveling algorithms implemented by the drive firmware. Unlike traditional HDDs where movement is mechanical, SSD data movement is logical. The operating system sees a static block device, but the underlying NAND cells are being rewritten. Understanding this abstraction is key to troubleshooting performance issues or verifying that your SSD is functioning correctly. We will demonstrate this by creating a controlled workload and observing the metrics in real-time.

Setting Up the Diagnostic Environment

To see data movements clearly, we need a clean environment. First, ensure you have the necessary monitoring tools installed. On Debian-based systems, you can install them using:
sudo apt-get install sysstat blktrace util-linux
On RHEL/CentOS systems, use:
sudo yum install sysstat blktrace util-linux
We will use a small, temporary partition on your SSD to avoid cluttering your main filesystem. Identify your SSD device name, typically /dev/sda or /dev/nvme0n1. For this example, let us assume the target device is /dev/sdb. You should create a single ext4 partition on it if one does not exist. Mount it to a test directory:
sudo mkdir -p /mnt/ssd_test
sudo mount /dev/sdb1 /mnt/ssd_test
Before generating traffic, check the current state of the drive. Use iostat to get baseline statistics. The command iostat -x 1 5 will output extended statistics every second for five seconds. Look at the columns r_await and w_await, which represent the average time for read and write requests to complete. These values indicate how busy the queue is.

Demonstrating Data Movements with a Simple Example

Now, let us generate a predictable pattern of data movements. We will write a large file and then read it back, allowing us to trace the I/O patterns. Create a 1GB file filled with random data to simulate typical user activity:
dd if=/dev/urandom of=/mnt/ssd_test/testfile bs=1M count=1024 conv=fdatasync
The conv=fdatasync flag ensures that the data is physically written to the disk before the command returns, guaranteeing that the write operation is completed. During this process, open a second terminal window and run:
iostat -x 1 /dev/sdb
You will observe spikes in wkB/s (kilobytes written per second) and %util (percentage of CPU time spent servicing I/O requests). For an SSD, %util might not reach 100% even under heavy load because SSDs handle multiple commands in parallel via NCQ (Native Command Queuing). Next, perform a read operation to see the reverse flow:
cat /mnt/ssd_test/testfile > /dev/null
Watch the rkB/s column in your iostat window. Notice how the r_await value typically remains lower than w_await because reads do not require the same complex internal management as writes. This difference highlights the asymmetry in SSD data movements.

Deep Diving with Blktrace

For a more granular view, blktrace allows you to record every block I/O request sent to the device. Run the following command in the background while performing the read/write operations above:
sudo blktrace -d /dev/sdb -o /tmp/trace.out &
After stopping the trace with kill %1, analyze the output using blkparse:
blkparse -i /tmp/trace.out | head -n 20
This output shows individual I/O requests, their type (R for read, W for write), and the sector numbers. While sector numbers change over time due to wear leveling, the sequence helps identify if requests are being merged or reordered by the kernel scheduler. This level of detail is essential for diagnosing latency issues that standard tools like iostat might obscure.

Interpreting the Results

By comparing the iostat metrics with the blktrace logs, you gain a comprehensive understanding of how Linux manages SSD data. High w_await values combined with low throughput may indicate that the SSD's internal garbage collection is struggling, or that the TRIM command has not been executed recently. Ensuring that fstrim runs regularly on your schedule is crucial for maintaining these performance levels. If you are experiencing sudden drops in performance, check if the SSD is entering a power-saving state or if thermal throttling is occurring. Tools like sensors can help monitor drive temperatures. Additionally, verify that your SSD is connected via SATA III or PCIe Gen3/4, as interface bottlenecks can mimic SSD internal delays. For those dealing with more complex scenarios, such as cloning drives or checking for failure signs, further reading on Is my SSD failing, and should I try a warranty return? provides insights into diagnostic indicators beyond simple I/O metrics. Similarly, understanding partition types is vital when setting up dual-boot environments, as discussed in Setting Up EXT4 GPT Partition Type on an SSD for Windows.

Frequently Asked Questions

Why is my SSD write speed slower than read speed?

Writes are slower because the SSD must erase blocks before writing new data, a process known as program/erase cycles. Reads do not require erasure, allowing the controller to fetch data directly from the NAND cells faster.

How often should I run fstrim on my SSD?

Most modern Linux distributions enable automatic weekly fstrim via systemd timers. You can verify its status with systemctl status fstrim.timer to ensure your drive maintains optimal write performance over time.

Can blktrace show me exactly where data is stored on the chip?

No, blktrace operates at the block device level and cannot see inside the SSD firmware. It shows logical block addresses, which the drive translates to physical NAND locations internally for wear leveling and error correction.

What does high %util mean on an SSD?

High utilization means the SSD is receiving I/O requests faster than it can process them. Unlike HDDs, SSDs rarely hit 100% util unless they are severely bottlenecked by the host interface or suffering from significant internal fragmentation.

Should I defragment my SSD in Linux?

Defragmentation is unnecessary and harmful for SSDs because it increases write cycles without improving access speed. The Linux kernel and SSD firmware handle data placement efficiently, so manual defragging only reduces the drive's lifespan.

Latest News

How to Display Output of xterm Command in Terminal Screen using Cron

Resolve the inability to display xterm output in a terminal screen from cron by redirecting logs or using wall instead of insecure X11 workarounds.

Read More
Expose Local Server on VPS Preserving Real Client IPs (OS Level)

Resolve VPS logging showing only gateway IPs by configuring reverse proxies to forward real client addresses via X-Forwarded-For headers.

Read More
How to Clear Recent Files History in Linux without Deleting Actual Files?

Clear recent files history in Linux by deleting ~/.local/share/recently-used.xbel without removing the actual files.

Read More
Best HDD Copy Strategy: Manually Syncing and Rewriting Scratch

Resolve data drift between two 4TB hard drives by using rsync with the --delete flag to manually sync and rewrite scratch data for an exact mirror.

Read More
Understanding Bash Prompt Abbreviations: An Overview

Resolve repetitive typing errors by creating and persisting Bash aliases in the .bashrc file for improved command-line efficiency.

Read More
Free Tools and Methods to Log Real-Time Performance Details in Task Manager

Log real-time CPU and memory metrics to CSV files using Windows Performance Monitor Data Collector Sets to troubleshoot system slowness.

Read More
Contact Qatar Airways Customer Service: Phone Number, Help Center, and More

Resolve urgent Qatar Airways reservation issues like flight changes and baggage claims using the US phone number +1801-855-5905 or online self-service tools.

Read More
Windows 11: Alt Codes Displaying Wrong Characters - Solutions

Resolve Windows 11 Alt codes showing wrong characters by verifying the US keyboard layout and enabling Num Lock.

Read More
Run Programs with Elevated Privileges: A Comprehensive Guide

Eliminates the need to type sudo for frequent administrative tasks by configuring .bashrc aliases or functions.

Read More
Dynamically Changing Dates in Excel Formulas Using Cells

Eliminate manual date updates in Excel by using cell references to create dynamic formulas that automatically adjust calculations when input dates change.

Read More
Granting Edit Access to a Specific Excel Sheet in an Office 365 User Email ID-Based Login

Excel Online lacks native sheet-level permissions, so users must split workbooks or use worksheet protection to isolate edit access for specific tabs.

Read More
Creating Network Load on Local Wi-Fi from One PC

Generate sustained Wi-Fi bandwidth load from a single PC using a VM SFTP server to test router stability and throughput.

Read More
Changing the Default Editor for Batch Files in Windows 11's File Explorer

Resolve the issue of batch files opening in Notepad by changing the default editor to a preferred application like VS Code.

Read More
Gain WiFi Connection Minutes Before Losing it by Changing MAC Address

Bypass MAC address filtering to restore WiFi connectivity temporarily when a device is blocked by network administrators.

Read More
Photos Folders Turned Black: Troubleshooting Picture Applications on Windows

Resolve black screens in Windows Photos by resetting the app, updating graphics drivers, and repairing system files.

Read More
Troubleshooting High CPU Temperature Values: A Step-by-Step Guide

Resolve high CPU temperatures and thermal throttling by monitoring with Speedfan, cleaning dust from cooling components, and replacing degraded thermal paste.

Read More
Make cURL establish TLS connection with CA unknown

Resolve cURL TLS connection failures with unknown or self-signed certificates by using the --insecure flag to bypass CA validation.

Read More
Troubleshooting Incorrect Network Metrics Values in Grafana, Prometheus, InfluxDB, and Telegraf

Fix incorrect network metrics in Grafana, Prometheus, InfluxDB, and Telegraf by verifying interface selection, resolving unit mismatches, and handling counter resets.

Read More
Start Another Terminal Window (cmd.exe) Windows Repair/Troubleshoot

Provides step-by-step instructions to access the Windows Command Prompt via bootable media for advanced system repair and troubleshooting.

Read More
Thinkpad P1 Gen 6: Sudden Thunderbolt 3 Dock USB-C Charging Stopped Working

Resolve sudden Thunderbolt 3 dock USB-C charging and internet failure on ThinkPad P1 Gen 6 by updating firmware, resetting the dock, and adjusting power settings.

Read More
ASUS Windows 11 Laptop: Internet Connection Issue with Hotspot

Resolve ASUS Windows 11 laptop spinning wheel issue when connecting to mobile hotspot by resetting network stack, disabling IPv6, and adjusting power settings.

Read More
Developing iOS Project with Firebase: Logging in and Sending Push Notifications

Integrates Firebase to enable secure user authentication and push notifications in iOS applications.

Read More
Troubleshooting Bash Script with Suspected Issues of Spaces, Dashes, Filenames and Quoting

Resolve Bash script failures caused by word splitting, globbing, and special characters in filenames by applying proper quoting techniques.

Read More
Populating OneDrive Folder for Local Backup without Affecting Remote Files

Prevent OneDrive from deleting remote files during Windows reinstallation by unlinking the account or using symbolic links to isolate local data.

Read More
Force First Frame as Keyframe Without Re-encoding: A Quick Solution

Resolve inaccurate seeking and playback glitches by re-encoding video to ensure the first frame is a valid keyframe.

Read More
Find Information in Database Using WSL (Ubuntu) on Windows-10

Resolve database connection issues from WSL Ubuntu on Windows 10 by configuring client tools and network access to query remote or local servers.

Read More
Configuring a New Router with Different Networks: One Family, One Guest

Resolve IP conflicts and isolate guest traffic by configuring a second router with a distinct subnet via its WAN port.

Read More
Quickly Open Multiple Stock Websites with a Single Command

Solve the problem of manually opening multiple stock research websites by creating a single command to launch them simultaneously on Windows, macOS, or Linux.

Read More
Improved Adobe Acrobat Search Experience: Access Advanced Search with Ease

Access advanced search filters like case sensitivity and regex in Adobe Acrobat by clicking More Options in the Find bar.

Read More
Port Forwarding VM via OpenVPN: A Comprehensive Guide

Configure OpenVPN server and iptables to forward specific ports from VPN clients to a virtual machine's internal IP address.

Read More
Understanding Partitions in the 1980s: A Look Back at MS-DOS and Master Boot Record

Explains how the Master Boot Record and partition table enabled MS-DOS to manage multiple disk volumes on a single physical drive.

Read More
Windows 10 Enterprise: Keyboard Not Detected in Managed Organization with Admin Privileges

Resolve Windows 10 Enterprise keyboard detection failures caused by Group Policy restrictions, driver corruption, or USB enumeration errors.

Read More
Can't Find x86_64 Versions of Applications on MacOS arm64 (M1)

Resolve missing x86_64 app issues on M1 Macs by installing Rosetta 2 and reinstalling apps as universal binaries.

Read More
How to Hide Installation Source for an Android App

Manage Android app installation source visibility by using USB transfers or file managers to reduce browser traces and isolate data via work profiles.

Read More
Connecting Momentus 4200.2 ST9808210A Hard Drive via USB Cable

Resolve inability to access Seagate Momentus 4200.2 ST9808210A hard drive by connecting it via USB using a compatible SATA-to-USB adapter and configuring the disk in Windows.

Read More