#!/bin/bash

# Usage: ./find_file_by_sector.sh <DEVICE> <SECTOR_NUMBER>
# Example: ./find_file_by_sector.sh /dev/sda1 1234567

DEVICE="$1"
SECTOR="$2"

if [ -z "$DEVICE" ] || [ -z "$SECTOR" ]; then
    echo "Usage: $0 <device> <sector_number>"
    exit 1
fi

# Blocksize ermitteln
BLOCKSIZE=$(dumpe2fs -h "$DEVICE" 2>/dev/null | grep -i "Block size" | awk '{print $3}')

if [ -z "$BLOCKSIZE" ]; then
    echo "Konnte Blocksize nicht ermitteln!"
    exit 1
fi

# typische Sektorgröße: 512 Byte
SECTOR_SIZE=512

# Sektornummer → Blocknummer
BLOCK_NUM=$(( SECTOR * SECTOR_SIZE / BLOCKSIZE ))

echo "Blocksize:       $BLOCKSIZE"
echo "Sektorgröße:     $SECTOR_SIZE"
echo "Eingabe-Sektor:  $SECTOR"
echo "berechneter Block: $BLOCK_NUM"
echo

# Inode herausfinden
INODE=$(debugfs -R "icheck $BLOCK_NUM" "$DEVICE" 2>/dev/null | awk 'NR==2 {print $2}')

if [ -z "$INODE" ] || [[ "$INODE" == "<block" ]]; then
    echo "Kein Inode für diesen Block gefunden oder keiner Datei zugeordnet."
    exit 1
fi

echo "Gefundener Inode: $INODE"

# Datei zu Inode ermitteln
FILE=$(debugfs -R "ncheck $INODE" "$DEVICE" 2>/dev/null | awk 'NR==2 {print $2}')

echo "Datei:"

echo "$FILE"
