Scan for type 82 partitions and clear them regardless of swapon status.
This commit is contained in:
parent
91cf3950df
commit
c987235bb8
@ -72,6 +72,31 @@ ClearMountsJob::exec()
|
||||
QString partitions = process.readAllStandardOutput();
|
||||
QStringList partitionsList = partitions.simplified().split( ' ' );
|
||||
|
||||
// Build a list of partitions of type 82 (Linux swap / Solaris).
|
||||
// We then need to clear them just in case they contain something resumable from a
|
||||
// previous suspend-to-disk.
|
||||
QStringList swapPartitions;
|
||||
process.start( "sfdisk", { "-d", m_device->deviceNode() } );
|
||||
process.waitForFinished();
|
||||
// Sample output:
|
||||
// % sudo sfdisk -d /dev/sda
|
||||
// label: dos
|
||||
// label-id: 0x000ced89
|
||||
// device: /dev/sda
|
||||
// unit: sectors
|
||||
|
||||
// /dev/sda1 : start= 63, size= 29329345, type=83, bootable
|
||||
// /dev/sda2 : start= 29331456, size= 2125824, type=82
|
||||
|
||||
swapPartitions = QString::fromLocal8Bit( process.readAllStandardOutput() )
|
||||
.split( '\n' );
|
||||
swapPartitions = swapPartitions.filter( "type=82" );
|
||||
for ( QStringList::iterator it = swapPartitions.begin();
|
||||
it != swapPartitions.end(); ++it )
|
||||
{
|
||||
*it = (*it).simplified().split( ' ' ).first();
|
||||
}
|
||||
|
||||
// First we umount all LVM logical volumes we can find
|
||||
process.start( "lvscan", { "-a" } );
|
||||
process.waitForFinished();
|
||||
@ -133,6 +158,13 @@ ClearMountsJob::exec()
|
||||
goodNews.append( news );
|
||||
}
|
||||
|
||||
foreach ( QString p, swapPartitions )
|
||||
{
|
||||
QString news = tryClearSwap( p );
|
||||
if ( !news.isEmpty() )
|
||||
goodNews.append( news );
|
||||
}
|
||||
|
||||
Calamares::JobResult ok = Calamares::JobResult::ok();
|
||||
ok.setMessage( tr( "Cleared all mounts for %1" )
|
||||
.arg( m_device->deviceNode() ) );
|
||||
@ -156,13 +188,20 @@ ClearMountsJob::tryUmount( const QString& partPath )
|
||||
process.start( "swapoff", { partPath } );
|
||||
process.waitForFinished();
|
||||
if ( process.exitCode() == 0 )
|
||||
{
|
||||
process.start( "mkswap", { partPath } );
|
||||
process.waitForFinished();
|
||||
if ( process.exitCode() == 0 )
|
||||
return QString( "Successfully disabled and cleared swap %1." ).arg( partPath );
|
||||
return QString( "Successfully disabled but not cleared swap %1." ).arg( partPath );
|
||||
}
|
||||
return QString( "Successfully disabled swap %1." ).arg( partPath );
|
||||
|
||||
return QString();
|
||||
}
|
||||
|
||||
|
||||
QString
|
||||
ClearMountsJob::tryClearSwap( const QString& partPath )
|
||||
{
|
||||
QProcess process;
|
||||
process.start( "mkswap", { partPath } );
|
||||
process.waitForFinished();
|
||||
if ( process.exitCode() == 0 )
|
||||
return QString( "Successfully cleared swap %1." ).arg( partPath );
|
||||
|
||||
return QString();
|
||||
}
|
||||
|
@ -37,6 +37,7 @@ public:
|
||||
Calamares::JobResult exec() override;
|
||||
private:
|
||||
QString tryUmount( const QString& partPath );
|
||||
QString tryClearSwap( const QString& partPath );
|
||||
Device* m_device;
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user