A 64GB flash drive for $17? This SanDisk Prime Day deal is an absolute steal
Back to Tutorials
techTutorialintermediate

A 64GB flash drive for $17? This SanDisk Prime Day deal is an absolute steal

June 25, 202624 views5 min read

Learn how to programmatically interact with USB flash drives using Python to measure performance and analyze storage capabilities.

Introduction

In this tutorial, you'll learn how to work with flash drive data using Python to analyze storage performance and manage file systems. While the news article highlights a great deal on SanDisk's 64GB Ultra Flair flash drives, this tutorial focuses on the underlying technology and practical applications of USB flash drives in data management. You'll explore how to interact with USB storage devices programmatically, measure read/write speeds, and understand file system structures.

Prerequisites

  • Basic Python programming knowledge
  • Python 3.6 or higher installed
  • Access to a computer with USB ports
  • USB flash drive (any size, but we'll use a 64GB example)
  • Administrative privileges to access storage devices

Step 1: Setting Up Your Development Environment

Install Required Python Packages

First, we need to install the necessary Python packages for working with storage devices and performance testing. The psutil library will help us monitor system resources, while os and time modules provide core system functionality.

pip install psutil

Why: psutil is essential for monitoring system resources and performance metrics during our storage tests. It provides cross-platform access to system details like disk usage, CPU, and memory.

Step 2: Identifying Connected USB Devices

Discover USB Storage Devices

Before we can test our flash drive, we need to identify it in the system. The following code will scan for connected USB storage devices:

import psutil
import os

def find_usb_devices():
    """Find all USB storage devices on the system"""
    usb_devices = []
    
    # Get disk partitions
    partitions = psutil.disk_partitions()
    
    for partition in partitions:
        # Check if partition is a USB device
        if 'usb' in partition.device.lower() or 'removable' in partition.opts.lower():
            usb_devices.append(partition)
            
    return usb_devices

# Run the function
usb_drives = find_usb_devices()
print("Found USB devices:")
for drive in usb_drives:
    print(f"Device: {drive.device}")
    print(f"Mountpoint: {drive.mountpoint}")
    print(f"File system: {drive.fstype}")
    print("---")

Why: This step helps us locate the specific device we'll be working with. USB devices often appear in different mount points depending on the operating system, so we need to identify them programmatically.

Step 3: Creating Test Files for Performance Measurement

Generate Sample Data for Testing

Before measuring performance, we need to create test files of various sizes. This will simulate real-world usage patterns:

import os
import random
import string

def create_test_file(filename, size_mb):
    """Create a test file of specified size"""
    size_bytes = size_mb * 1024 * 1024
    
    with open(filename, 'w') as f:
        # Generate random data
        for _ in range(size_bytes // 1000):  # Write 1KB chunks
            chunk = ''.join(random.choices(string.ascii_letters + string.digits, k=1000))
            f.write(chunk)
    
    print(f"Created {filename} of size {size_mb}MB")

# Create test files of different sizes
create_test_file('test_10mb.txt', 10)
create_test_file('test_50mb.txt', 50)
create_test_file('test_100mb.txt', 100)

Why: Testing with files of different sizes helps us understand how the flash drive performs under various load conditions. This is crucial for evaluating real-world performance.

Step 4: Measuring Read/Write Performance

Implement Speed Testing Functions

Now we'll implement functions to measure the read and write speeds of our flash drive:

import time
import os

def measure_write_speed(filename, data_size_mb):
    """Measure write speed to the device"""
    start_time = time.time()
    
    # Write test data
    with open(filename, 'w') as f:
        for _ in range(data_size_mb * 1024):  # 1MB chunks
            f.write('x' * 1024)
    
    end_time = time.time()
    write_time = end_time - start_time
    
    # Calculate speed in MB/s
    speed = data_size_mb / write_time
    
    print(f"Write speed for {data_size_mb}MB file: {speed:.2f} MB/s")
    return speed

def measure_read_speed(filename):
    """Measure read speed from the device"""
    start_time = time.time()
    
    # Read the entire file
    with open(filename, 'r') as f:
        content = f.read()
    
    end_time = time.time()
    read_time = end_time - start_time
    
    # Calculate speed in MB/s
    file_size_mb = os.path.getsize(filename) / (1024 * 1024)
    speed = file_size_mb / read_time
    
    print(f"Read speed for {file_size_mb:.2f}MB file: {speed:.2f} MB/s")
    return speed

Why: Understanding read/write speeds is crucial for evaluating storage performance. This information helps in making informed decisions about storage device selection and usage patterns.

Step 5: Comprehensive Performance Testing

Run Complete Performance Tests

Let's run comprehensive tests to evaluate our flash drive's performance across different file sizes:

def run_comprehensive_test(device_path):
    """Run complete performance tests on the device"""
    print(f"\nStarting performance tests on {device_path}")
    print("=" * 50)
    
    # Test with different file sizes
    test_sizes = [10, 50, 100]  # MB
    
    for size in test_sizes:
        filename = f'test_{size}mb.txt'
        
        # Create test file
        create_test_file(filename, size)
        
        # Measure write speed
        write_speed = measure_write_speed(filename, size)
        
        # Measure read speed
        read_speed = measure_read_speed(filename)
        
        print(f"\nResults for {size}MB file:")
        print(f"Write Speed: {write_speed:.2f} MB/s")
        print(f"Read Speed: {read_speed:.2f} MB/s")
        print("-" * 30)
        
        # Clean up test file
        os.remove(filename)

# Run the comprehensive test
# Replace '/path/to/your/usb/device' with actual path
# run_comprehensive_test('/path/to/your/usb/device')

Why: Comprehensive testing across multiple file sizes provides a complete picture of device performance. This approach helps identify bottlenecks and understand real-world usage patterns.

Step 6: Analyzing File System Information

Examine Storage Device Details

Finally, let's examine the file system details of our flash drive:

def analyze_filesystem(device_path):
    """Analyze filesystem information"""
    try:
        # Get disk usage
        usage = psutil.disk_usage(device_path)
        
        print(f"\nFilesystem Analysis for {device_path}")
        print("=" * 40)
        print(f"Total Space: {usage.total / (1024**3):.2f} GB")
        print(f"Used Space: {usage.used / (1024**3):.2f} GB")
        print(f"Free Space: {usage.free / (1024**3):.2f} GB")
        print(f"Usage Percentage: {usage.percent:.1f}%")
        
        # Get filesystem type
        partitions = psutil.disk_partitions()
        for partition in partitions:
            if device_path in partition.mountpoint:
                print(f"Filesystem Type: {partition.fstype}")
                break
                
    except Exception as e:
        print(f"Error analyzing filesystem: {e}")

# Analyze filesystem
# analyze_filesystem('/path/to/your/usb/device')

Why: Understanding filesystem information helps in optimizing storage usage and troubleshooting potential issues. This knowledge is particularly valuable when working with different storage technologies.

Summary

This tutorial demonstrated how to programmatically interact with USB flash drives using Python. You learned how to identify connected devices, measure read/write performance, and analyze filesystem information. These skills are essential for anyone working with storage devices, whether for performance optimization, data management, or system administration tasks.

The techniques covered here apply to any USB storage device, including the SanDisk 64GB Ultra Flair mentioned in the news article. Understanding these concepts helps you make informed decisions about storage technology and optimize your data management workflows.

Source: ZDNet AI

Related Articles