Definisci le dimensioni della partizione super

È importante dimensionare correttamente la partizione super per garantire l'aggiornabilità del dispositivo. Le dimensioni influiscono direttamente sul numero di aggiornamenti che un dispositivo può ricevere e sul numero di utenti che possono installarli correttamente.

Esistono alcune variabili importanti da considerare. La prima è la dimensione di fabbrica, ovvero la dimensione di tutte le partizioni dinamiche quando il dispositivo viene flashato per la prima volta. La seconda è il tasso di crescita, ovvero la percentuale di aumento delle dimensioni del sistema operativo durante l'intero ciclo di vita aggiornabile del dispositivo.

Inoltre, i dispositivi Virtual A/B possono utilizzare spazio su /data durante un aggiornamento, quindi è necessario tenerne conto quando si dimensiona super. Se è necessario troppo spazio su /data, alcuni utenti non possono (o non vogliono) installare l'aggiornamento. Tuttavia, se è noto che la maggior parte degli utenti ha una certa percentuale di spazio libero, i dispositivi possono sottrarre comodamente questo spazio da super. In alternativa, i dispositivi possono garantire che /data non sia mai necessario, semplicemente rendendo super abbastanza grande.

Di seguito sono riportati alcuni modelli che ti aiutano a dimensionare la partizione super in base a queste variabili.

Affidarsi a /data

Virtual A/B incoraggia a ridurre super per aumentare le dimensioni di /data. Parte di questo spazio è necessario durante un aggiornamento. Per comprendere l'impatto sull'aggiornabilità, è essenziale sapere quale percentuale di dispositivi è probabile che abbia questa quantità di spazio libero nel tempo. Determinare questo numero dipende molto dall'hardware del dispositivo e dal comportamento degli utenti. Negli esempi riportati di seguito, questo numero viene indicato come AllowedUserdataUse.

Senza compressione

Senza compressione, un aggiornamento OTA completo richiede uno snapshot di dimensioni simili a quelle del sistema operativo, quindi è necessario tenerne conto quando si dimensiona super:

  FinalDessertSize = FactorySize + (FactorySize * ExpectedGrowth)
  Super = Max(FinalDessertUpdate, FinalDessertSize * 2 - AllowedUserdataUse)

Ad esempio, considera un dispositivo Virtual A/B con una dimensione di fabbrica di 4 GB, una crescita prevista del 50% e la consapevolezza che quasi tutti gli utenti hanno 1 GB di spazio libero (o sono disposti a liberare fino a 1 GB di spazio per un aggiornamento). Per questo dispositivo, super può essere dimensionato come segue:

  FinalDessertSize = 4GB + (4GB * 0.5) = 6GB
  Super = Max(6GB, 6GB * 2 - 1GB) = Max(6GB, 11GB)

Pertanto, questo dispositivo deve avere una partizione super di 11 GB.

Con compressione

Con la compressione, un aggiornamento OTA completo richiede uno snapshot di dimensioni pari a circa il 70% di quelle del sistema operativo:

  FinalDessertSize = FactorySize + (FactorySize * ExpectedGrowth)
  FinalOTASnapshotSize = FinalDessertSize * 0.7
  Super = Max(FinalDessertUpdate, FinalDessertSize + FinalOTASnapshotSize - AllowedUserdataUse)

Ad esempio, considera un dispositivo configurato con la compressione Virtual A/B, con una dimensione di fabbrica di 4 GB, una crescita prevista del 50% e la consapevolezza che quasi tutti gli utenti hanno 1 GB di spazio libero (o sono disposti a liberare fino a 1 GB di spazio per un aggiornamento). Per questo dispositivo, super può essere dimensionato come segue:

  FinalDessertSize = 4GB + (4GB * 0.5) = 6GB
  FinalOTASnapshotSize = 6GB * 0.7 = 4.2GB
  Super = Max(6GB, 6GB + 4.2GB - 1GB) = Max(6GB, 9.2GB) = 9.2GB

Pertanto, questo dispositivo deve avere una partizione super di 9,2 GB.

Senza affidarsi a /data

Se vuoi avere aggiornamenti OTA che non richiedano mai spazio per gli snapshot su /data, il dimensionamento di super è semplice.

Senza compressione

Per un dispositivo Virtual A/B senza compressione o un normale dispositivo A/B:

  FinalDessertSize = FactorySize + (FactorySize * ExpectedGrowth)
  Super = FinalDessertSize * 2

Ad esempio, considera un dispositivo Virtual A/B con una dimensione di fabbrica di 4 GB e una crescita prevista del 50%. Per assicurarti che questo dispositivo non utilizzi mai /data per gli snapshot OTA, il calcolo sarà il seguente:

  FinalDessertSize = 4GB + (4GB * 0.5) = 6GB
  Super = FinalDessertSize * 2 = 12GB

Pertanto, questo dispositivo deve avere una partizione super di 12 GB.

Con compressione

Per un dispositivo Virtual A/B con compressione:

  FinalDessertSize = FactorySize + (FactorySize * ExpectedGrowth)
  FinalOTASnapshotSize = FinalDessertSize * 0.7
  Super = FinalDessertSize + FinalOTASnapshotSize

Ad esempio, considera un dispositivo con compressione Virtual A/B con una dimensione di fabbrica di 4 GB e una crescita prevista del 50%. Per assicurarti che questo dispositivo non utilizzi mai /data per gli snapshot OTA, il calcolo sarà il seguente:

  FinalDessertSize = 4GB + (4GB * 0.5) = 6GB
  FinalOTASnapshotSize = 6GB * 0.7 = 4.2GB
  Super = 6GB + 4.2GB = 10.2GB

Pertanto, questo dispositivo deve avere una partizione super di 10,2 GB.

Precisazioni

Potrebbe essere allettante osservare che se la dimensione di fabbrica è di 4 GB e l'aggiornamento finale è di 5 GB, allora super deve essere di 9 GB anziché di 10 GB. Tuttavia, se il primo e l'ultimo aggiornamento sono entrambi di 5 GB, lo spazio in super potrebbe non essere sufficiente per l'aggiornamento finale. Le formule riportate sopra presuppongono che la crescita della partizione possa avvenire in qualsiasi momento. Lo spazio necessario per applicare l'aggiornamento finale potrebbe essere lo stesso necessario per applicare il primo aggiornamento.

Tieni presente che i rapporti di compressione sono una stima. Un'immagine del sistema operativo potrebbe essere compressa meglio o peggio a seconda dei contenuti. Se utilizzi un file system compresso come EROFS, la compressione aggiuntiva di Virtual A/B ha rendimenti decrescenti. In questo caso, è preferibile utilizzare una delle formule non compresse come linea guida.

Calcolare le dimensioni

Per trovare il valore di FactorySize negli esempi precedenti, somma le dimensioni di tutte le partizioni dinamiche. Le immagini delle partizioni dinamiche AOSP sono:

  • system.img
  • vendor.img
  • product.img
  • system_ext.img
  • vendor_dlkm.img
  • system_dlkm.img

Assicurati di calcolare le dimensioni in base alle immagini non sparse. Quando crei Android 12 o versioni precedenti, le immagini vengono sparse per impostazione predefinita e possono essere non sparse con simg2img.

È anche possibile calcolare le dimensioni delle partizioni da un pacchetto OTA. In questo modo viene stimata anche la dimensione dello snapshot Virtual A/B per ogni partizione:

  python3 system/update_engine/scripts/payload_info.py path/to/ota-package.zip

In alternativa, puoi utilizzare lo strumento di analisi OTA. Questo strumento non carica alcun file e analizza i pacchetti OTA localmente.

Per trovare il valore di ExpectedGrowth, utilizza un dispositivo rilasciato in precedenza. Utilizza l'immagine super più recente e quella meno recente per calcolare la crescita.